Build: move buildscripts & versions from root directory to ./gradle
javaInstrumentation.gradle.kts report.gradle.kts versions.gradle.kts and all versions.properties
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
allprojects {
|
||||
afterEvaluate {
|
||||
configureJavaInstrumentation()
|
||||
}
|
||||
}
|
||||
|
||||
// Hide window of instrumentation tasks
|
||||
val headlessOldValue: String? = System.setProperty("java.awt.headless", "true")
|
||||
logger.info("Setting java.awt.headless=true, old value was $headlessOldValue")
|
||||
|
||||
/**
|
||||
* Configures instrumentation for all JavaCompile tasks in project
|
||||
*/
|
||||
fun Project.configureJavaInstrumentation() {
|
||||
if (plugins.hasPlugin("org.gradle.java")) {
|
||||
val javaInstrumentator by configurations.creating
|
||||
dependencies {
|
||||
javaInstrumentator(intellijDep()) {
|
||||
includeJars("javac2", "jdom", "asm-all", rootProject = rootProject)
|
||||
}
|
||||
}
|
||||
|
||||
tasks.withType<JavaCompile> {
|
||||
doLast {
|
||||
instrumentClasses(javaInstrumentator.asPath)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun JavaCompile.instrumentClasses(instrumentatorClasspath: String) {
|
||||
ant.withGroovyBuilder {
|
||||
"taskdef"(
|
||||
"name" to "instrumentIdeaExtensions",
|
||||
"classpath" to instrumentatorClasspath,
|
||||
"loaderref" to "java2.loader",
|
||||
"classname" to "com.intellij.ant.InstrumentIdeaExtensions"
|
||||
)
|
||||
}
|
||||
|
||||
val sourceSet = project.sourceSets.single { it.compileJavaTaskName == name }
|
||||
|
||||
val javaSourceDirectories = sourceSet.allJava.sourceDirectories.filter { it.exists() }
|
||||
|
||||
ant.withGroovyBuilder {
|
||||
javaSourceDirectories.forEach { directory ->
|
||||
"instrumentIdeaExtensions"(
|
||||
"srcdir" to directory,
|
||||
"destdir" to destinationDir,
|
||||
"classpath" to classpath.asPath,
|
||||
"includeantruntime" to false,
|
||||
"instrumentNotNull" to true
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
import org.gradle.api.Task
|
||||
import org.gradle.api.execution.TaskExecutionListener
|
||||
import org.gradle.api.invocation.Gradle
|
||||
import org.gradle.api.logging.Logger
|
||||
import org.gradle.api.tasks.TaskState
|
||||
import java.util.HashMap
|
||||
|
||||
BuildTimeReporter.configure(gradle)
|
||||
|
||||
private class BuildTimeReporter(
|
||||
private val kotlinCompileClass: Class<*>,
|
||||
private val javaCompileClass: Class<*>,
|
||||
private val jarClass: Class<*>,
|
||||
private val proguardClass: Class<*>
|
||||
) : TaskExecutionListener {
|
||||
companion object {
|
||||
fun configure(gradle: Gradle) {
|
||||
val rootProject = gradle.rootProject
|
||||
val logger = rootProject.logger
|
||||
val classloader = rootProject.buildscript.classLoader
|
||||
|
||||
fun findClass(name: String): Class<*>? =
|
||||
try {
|
||||
Class.forName(name, false, classloader)
|
||||
} catch (e: ClassNotFoundException) {
|
||||
logger.warn("Could not find class '$name'. Build times won't be reported")
|
||||
null
|
||||
}
|
||||
|
||||
val reporter = BuildTimeReporter(
|
||||
kotlinCompileClass = findClass("org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile") ?: return,
|
||||
javaCompileClass = findClass("org.gradle.api.tasks.compile.JavaCompile") ?: return,
|
||||
jarClass = findClass("org.gradle.jvm.tasks.Jar") ?: return,
|
||||
proguardClass = findClass("proguard.gradle.ProGuardTask") ?: return
|
||||
)
|
||||
gradle.taskGraph.addTaskExecutionListener(reporter)
|
||||
gradle.buildFinished {
|
||||
reporter.report(logger)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private enum class TaskCategory {
|
||||
COMPILING_KOTLIN,
|
||||
COMPILING_JAVA,
|
||||
PROCESSING_JARS,
|
||||
UNCATEGORIZED;
|
||||
|
||||
private fun String.toTitleCase() =
|
||||
if (length <= 1) capitalize() else { get(0).toUpperCase() + substring(1).toLowerCase() }
|
||||
|
||||
fun description(): String =
|
||||
name.replace("_", " ").toTitleCase()
|
||||
}
|
||||
|
||||
private val taskStartTime = HashMap<Task, Long>()
|
||||
private val categoryTimeNs = HashMap<TaskCategory, Long>()
|
||||
private var totalTimeNs = 0L
|
||||
|
||||
@Synchronized
|
||||
override fun beforeExecute(task: Task) {
|
||||
taskStartTime[task] = System.nanoTime()
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
override fun afterExecute(task: Task, state: TaskState) {
|
||||
val startTimeNs = taskStartTime.remove(task) ?: return
|
||||
val endTimeNs = System.nanoTime()
|
||||
val timeNs = endTimeNs - startTimeNs
|
||||
totalTimeNs += timeNs
|
||||
val category = taskCategory(task)
|
||||
categoryTimeNs[category] = (categoryTimeNs[category] ?: 0L) + timeNs
|
||||
}
|
||||
|
||||
private fun taskCategory(task: Task): TaskCategory = when {
|
||||
kotlinCompileClass.isInstance(task) -> TaskCategory.COMPILING_KOTLIN
|
||||
javaCompileClass.isInstance(task) -> TaskCategory.COMPILING_JAVA
|
||||
jarClass.isInstance(task) ||
|
||||
proguardClass.isInstance(task) -> TaskCategory.PROCESSING_JARS
|
||||
else -> TaskCategory.UNCATEGORIZED
|
||||
}
|
||||
|
||||
private fun Double.asShortString() =
|
||||
String.format("%.2f", this)
|
||||
|
||||
@Synchronized
|
||||
private fun report(log: Logger) {
|
||||
val secondInNs = 1000_000_000
|
||||
val totalTimeSec = totalTimeNs.toDouble() / secondInNs
|
||||
if (totalTimeSec < 1) return
|
||||
|
||||
log.warn("Build time for tasks:")
|
||||
for (category in TaskCategory.values()) {
|
||||
val timeNs = categoryTimeNs[category] ?: 0L
|
||||
val timeSec = timeNs.toDouble() / secondInNs
|
||||
if (timeSec < 1) continue
|
||||
|
||||
val percent = timeSec / totalTimeSec * 100
|
||||
log.warn("${category.description()}: ${timeSec.asShortString()}s (${percent.asShortString()}% of total time)")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
import java.util.*
|
||||
import java.io.*
|
||||
|
||||
var propertiesFile: File = rootProject.file("gradle/versions.properties")
|
||||
if (!propertiesFile.exists()) {
|
||||
//work-around for buildSrc
|
||||
propertiesFile = rootProject.file("../gradle/versions.properties")
|
||||
}
|
||||
|
||||
FileReader(propertiesFile).use {
|
||||
val properties = Properties()
|
||||
properties.load(it)
|
||||
properties.forEach { (k, v) ->
|
||||
extra[k.toString()] = v
|
||||
}
|
||||
}
|
||||
|
||||
val gradleJars = listOf(
|
||||
"gradle-api",
|
||||
"gradle-tooling-api",
|
||||
"gradle-base-services",
|
||||
"gradle-wrapper",
|
||||
"gradle-core",
|
||||
"gradle-base-services-groovy"
|
||||
)
|
||||
|
||||
val androidStudioVersion = if (extra.has("versions.androidStudioRelease"))
|
||||
extra["versions.androidStudioRelease"]?.toString()?.replace(".", "")?.substring(0, 2)
|
||||
else
|
||||
null
|
||||
|
||||
val intellijVersion = rootProject.extra["versions.intellijSdk"] as String
|
||||
val intellijVersionDelimiterIndex = intellijVersion.indexOfAny(charArrayOf('.', '-'))
|
||||
if (intellijVersionDelimiterIndex == -1) {
|
||||
error("Invalid IDEA version $intellijVersion")
|
||||
}
|
||||
|
||||
val platformBaseVersion = intellijVersion.substring(0, intellijVersionDelimiterIndex)
|
||||
val platform = androidStudioVersion?.let { "AS$it" } ?: platformBaseVersion
|
||||
|
||||
rootProject.extra["versions.platform"] = platform
|
||||
|
||||
|
||||
for (jar in gradleJars) {
|
||||
extra["versions.jar.$jar"] = extra["versions.gradle-api"]
|
||||
}
|
||||
|
||||
if (!extra.has("versions.androidStudioRelease")) {
|
||||
extra["ignore.jar.android-base-common"] = true
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
versions.intellijSdk=183.4886.37
|
||||
versions.androidBuildTools=r23.0.1
|
||||
versions.idea.NodeJS=181.3494.12
|
||||
versions.jar.guava=25.1-jre
|
||||
versions.jar.groovy-all=2.4.15
|
||||
versions.jar.lombok-ast=0.2.3
|
||||
versions.jar.swingx-core=1.6.2-2
|
||||
versions.jar.kxml2=2.3.0
|
||||
versions.jar.streamex=0.6.7
|
||||
versions.jar.gson=2.8.5
|
||||
versions.jar.oro=2.0.8
|
||||
versions.jar.picocontainer=1.2
|
||||
versions.jar.asm-all=7.0
|
||||
ignore.jar.snappy-in-java=true
|
||||
versions.gradle-api=4.5.1
|
||||
@@ -0,0 +1,13 @@
|
||||
versions.intellijSdk=173.4674.33
|
||||
versions.androidBuildTools=r23.0.1
|
||||
versions.idea.NodeJS=172.3757.32
|
||||
versions.jar.guava=21.0
|
||||
versions.jar.groovy-all=2.4.12
|
||||
versions.jar.lombok-ast=0.2.3
|
||||
versions.jar.swingx-core=1.6.2
|
||||
versions.jar.kxml2=2.3.0
|
||||
versions.jar.streamex=0.6.5
|
||||
versions.jar.gson=2.8.2
|
||||
versions.jar.snappy-in-java=0.5.1
|
||||
ignore.jar.lombok-ast-0.2.3=true
|
||||
versions.gradle-api=4.0
|
||||
@@ -0,0 +1,13 @@
|
||||
versions.intellijSdk=181.5540.7
|
||||
versions.androidBuildTools=r23.0.1
|
||||
versions.idea.NodeJS=181.3494.12
|
||||
versions.jar.guava=21.0
|
||||
versions.jar.groovy-all=2.4.12
|
||||
versions.jar.lombok-ast=0.2.3
|
||||
versions.jar.swingx-core=1.6.2-2
|
||||
versions.jar.kxml2=2.3.0
|
||||
versions.jar.streamex=0.6.5
|
||||
versions.jar.gson=2.8.2
|
||||
versions.jar.oro=2.0.8
|
||||
versions.jar.snappy-in-java=0.5.1
|
||||
versions.gradle-api=4.4
|
||||
@@ -0,0 +1,14 @@
|
||||
versions.intellijSdk=182.5107.16
|
||||
versions.androidBuildTools=r23.0.1
|
||||
versions.idea.NodeJS=181.3494.12
|
||||
versions.jar.guava=23.6-jre
|
||||
versions.jar.groovy-all=2.4.15
|
||||
versions.jar.lombok-ast=0.2.3
|
||||
versions.jar.swingx-core=1.6.2-2
|
||||
versions.jar.kxml2=2.3.0
|
||||
versions.jar.streamex=0.6.5
|
||||
versions.jar.gson=2.8.4
|
||||
versions.jar.oro=2.0.8
|
||||
versions.jar.picocontainer=1.2
|
||||
ignore.jar.snappy-in-java=true
|
||||
versions.gradle-api=4.5.1
|
||||
@@ -0,0 +1,15 @@
|
||||
versions.intellijSdk=191-SNAPSHOT
|
||||
versions.androidBuildTools=r23.0.1
|
||||
versions.idea.NodeJS=181.3494.12
|
||||
versions.jar.asm-all=7.0
|
||||
versions.jar.guava=25.1-jre
|
||||
versions.jar.groovy-all=2.4.15
|
||||
versions.jar.lombok-ast=0.2.3
|
||||
versions.jar.swingx-core=1.6.2-2
|
||||
versions.jar.kxml2=2.3.0
|
||||
versions.jar.streamex=0.6.7
|
||||
versions.jar.gson=2.8.5
|
||||
versions.jar.oro=2.0.8
|
||||
versions.jar.picocontainer=1.2
|
||||
ignore.jar.snappy-in-java=true
|
||||
versions.gradle-api=4.5.1
|
||||
@@ -0,0 +1,15 @@
|
||||
versions.intellijSdk=173.3727.127
|
||||
versions.androidBuildTools=r23.0.1
|
||||
versions.idea.NodeJS=172.3757.32
|
||||
versions.androidStudioRelease=3.1.3.0
|
||||
versions.androidStudioBuild=173.4819257
|
||||
versions.jar.guava=21.0
|
||||
versions.jar.groovy-all=2.4.12
|
||||
versions.jar.swingx-core=1.6.2
|
||||
versions.jar.kxml2=2.3.0
|
||||
versions.jar.streamex=0.6.5
|
||||
versions.jar.gson=2.8.2
|
||||
versions.jar.snappy-in-java=0.5.1
|
||||
ignore.jar.common=true
|
||||
ignore.jar.lombok-ast=true
|
||||
versions.gradle-api=4.0
|
||||
@@ -0,0 +1,16 @@
|
||||
versions.intellijSdk=181.5540.7
|
||||
versions.androidBuildTools=r23.0.1
|
||||
versions.idea.NodeJS=181.2784.17
|
||||
versions.androidStudioRelease=3.2.0.25
|
||||
versions.androidStudioBuild=181.4987877
|
||||
versions.jar.guava=21.0
|
||||
versions.jar.groovy-all=2.4.12
|
||||
versions.jar.swingx-core=1.6.2
|
||||
versions.jar.kxml2=2.3.0
|
||||
versions.jar.streamex=0.6.5
|
||||
versions.jar.gson=2.8.2
|
||||
versions.jar.oro=2.0.8
|
||||
versions.jar.snappy-in-java=0.5.1
|
||||
ignore.jar.common=true
|
||||
ignore.jar.lombok-ast=true
|
||||
versions.gradle-api=4.4
|
||||
@@ -0,0 +1,18 @@
|
||||
versions.intellijSdk=182.4505.22
|
||||
versions.androidBuildTools=r23.0.1
|
||||
versions.idea.NodeJS=181.3494.12
|
||||
versions.androidStudioRelease=3.3.0.16
|
||||
versions.androidStudioBuild=182.5114240
|
||||
versions.jar.guava=23.6-jre
|
||||
versions.jar.groovy-all=2.4.15
|
||||
versions.jar.lombok-ast=0.2.3
|
||||
versions.jar.swingx-core=1.6.2-2
|
||||
versions.jar.kxml2=2.3.0
|
||||
versions.jar.streamex=0.6.5
|
||||
versions.jar.gson=2.8.4
|
||||
versions.jar.oro=2.0.8
|
||||
versions.jar.picocontainer=1.2
|
||||
ignore.jar.snappy-in-java=true
|
||||
ignore.jar.common=true
|
||||
ignore.jar.lombok-ast=true
|
||||
versions.gradle-api=4.4
|
||||
@@ -0,0 +1,19 @@
|
||||
versions.intellijSdk=183.4284.36
|
||||
versions.androidBuildTools=r23.0.1
|
||||
versions.idea.NodeJS=181.3494.12
|
||||
versions.androidStudioRelease=3.4.0.4
|
||||
versions.androidStudioBuild=183.5141831
|
||||
versions.jar.guava=25.1-jre
|
||||
versions.jar.groovy-all=2.4.15
|
||||
versions.jar.lombok-ast=0.2.3
|
||||
versions.jar.swingx-core=1.6.2-2
|
||||
versions.jar.kxml2=2.3.0
|
||||
versions.jar.streamex=0.6.7
|
||||
versions.jar.gson=2.8.5
|
||||
versions.jar.oro=2.0.8
|
||||
versions.jar.picocontainer=1.2
|
||||
ignore.jar.snappy-in-java=true
|
||||
ignore.jar.common=true
|
||||
ignore.jar.lombok-ast=true
|
||||
versions.jar.asm-all=7.0
|
||||
versions.gradle-api=4.5.1
|
||||
@@ -0,0 +1,22 @@
|
||||
versions.intellijSdk=183.4588.61
|
||||
versions.androidBuildTools=r23.0.1
|
||||
versions.idea.NodeJS=181.3494.12
|
||||
# TODO: select appropriate 183 base build for AppCode
|
||||
versions.appcode=191.1411
|
||||
versions.appcode.strict=true
|
||||
versions.appcode.repo=ijplatform_master_CIDR_AppCode_Installers
|
||||
versions.clion=183.4886.39
|
||||
versions.clion.strict=false
|
||||
versions.clion.repo=ijplatform_IjPlatform183_Cidr_CLion_PublicInstallers
|
||||
versions.jar.guava=25.1-jre
|
||||
versions.jar.groovy-all=2.4.15
|
||||
versions.jar.lombok-ast=0.2.3
|
||||
versions.jar.swingx-core=1.6.2-2
|
||||
versions.jar.kxml2=2.3.0
|
||||
versions.jar.streamex=0.6.7
|
||||
versions.jar.gson=2.8.5
|
||||
versions.jar.oro=2.0.8
|
||||
versions.jar.picocontainer=1.2
|
||||
versions.jar.asm-all=7.0
|
||||
ignore.jar.snappy-in-java=true
|
||||
versions.gradle-api=4.5.1
|
||||
Reference in New Issue
Block a user