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:
Vyacheslav Gerasimov
2018-12-27 17:56:22 +03:00
parent 4db9174b4d
commit ad85707a2d
15 changed files with 7 additions and 6 deletions
+61
View File
@@ -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
)
}
}
}
+107
View File
@@ -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)")
}
}
}
+50
View File
@@ -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
}
+15
View File
@@ -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
+13
View File
@@ -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
+13
View File
@@ -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
+14
View File
@@ -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
+15
View File
@@ -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
+15
View File
@@ -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
+16
View File
@@ -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
+18
View File
@@ -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
+19
View File
@@ -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
+22
View File
@@ -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