Remove source sets from the instrumentation task
This commit is contained in:
@@ -1,49 +1,56 @@
|
|||||||
import org.gradle.api.Action
|
import org.gradle.api.Action
|
||||||
import org.gradle.api.Task
|
import org.gradle.api.Task
|
||||||
import org.gradle.api.artifacts.Configuration
|
import org.gradle.api.artifacts.Configuration
|
||||||
import org.gradle.api.file.FileCollection
|
|
||||||
import org.gradle.api.tasks.SourceSet
|
|
||||||
import org.gradle.api.tasks.compile.JavaCompile
|
import org.gradle.api.tasks.compile.JavaCompile
|
||||||
import org.gradle.kotlin.dsl.provideDelegate
|
import org.gradle.kotlin.dsl.provideDelegate
|
||||||
import org.gradle.kotlin.dsl.withGroovyBuilder
|
import org.gradle.kotlin.dsl.withGroovyBuilder
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class InstrumentJava(@Transient val javaInstrumentator: Configuration, @Transient val sourceSet: SourceSet) : Action<Task> {
|
class InstrumentJava(@Transient val javaInstrumentator: Configuration) : Action<Task> {
|
||||||
private val instrumentatorClasspath: String by lazy {
|
private val instrumentatorClasspath: String by lazy {
|
||||||
javaInstrumentator.asPath
|
javaInstrumentator.asPath
|
||||||
}
|
}
|
||||||
|
|
||||||
private val srcDirs: FileCollection by lazy {
|
|
||||||
sourceSet.allJava.sourceDirectories
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun execute(task: Task) {
|
override fun execute(task: Task) {
|
||||||
require(task is JavaCompile) { "$task is not of type JavaCompile!" }
|
require(task is JavaCompile) { "$task is not of type JavaCompile!" }
|
||||||
task.doLast {
|
|
||||||
val anySrcDir = srcDirs.filter { it.exists() }.firstOrNull()
|
|
||||||
if (anySrcDir != null) {
|
|
||||||
task.ant.withGroovyBuilder {
|
|
||||||
"taskdef"(
|
|
||||||
"name" to "instrumentIdeaExtensions",
|
|
||||||
"classpath" to instrumentatorClasspath,
|
|
||||||
"loaderref" to "java2.loader",
|
|
||||||
"classname" to "com.intellij.ant.InstrumentIdeaExtensions"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
task.ant.withGroovyBuilder {
|
// There is a requirement for Javac.execute() to have an existen non-empty directory as a source dir for the compilation
|
||||||
"instrumentIdeaExtensions"(
|
// even if compilation is disabled.
|
||||||
"srcdir" to anySrcDir, // No code should actually be compiled because of areJavaClassesCompiled==true in Javac2 - so any src folder will do.
|
//
|
||||||
"destdir" to task.destinationDirectory.asFile.get(),
|
// So we create an empty dummy directory during the execution.
|
||||||
"classpath" to task.classpath.asPath,
|
//
|
||||||
"includeantruntime" to false,
|
// See:
|
||||||
"instrumentNotNull" to true
|
// Javac.execute() - https://github.com/apache/ant/blob/9943641/src/main/org/apache/tools/ant/taskdefs/Javac.java#L1086
|
||||||
)
|
// InstrumentIdeaExtensions - https://github.com/JetBrains/intellij-community/blob/9c40bdd/java/compiler/javac2/src/com/intellij/ant/InstrumentIdeaExtensions.java
|
||||||
}
|
// Javac2.compile() - https://github.com/JetBrains/intellij-community/blob/9c40bdd/java/compiler/javac2/src/com/intellij/ant/Javac2.java#L237
|
||||||
|
val dummyInstrumentSrcDir = File(task.project.buildDir, "instrument_dummy_src")
|
||||||
|
val dummyInstrumentSrcRelativePath = dummyInstrumentSrcDir.relativeTo(task.project.projectDir).path.replace("\\", "/")
|
||||||
|
|
||||||
|
task.doLast {
|
||||||
|
task.ant.withGroovyBuilder {
|
||||||
|
"taskdef"(
|
||||||
|
"name" to "instrumentIdeaExtensions",
|
||||||
|
"classpath" to instrumentatorClasspath,
|
||||||
|
"loaderref" to "java2.loader",
|
||||||
|
"classname" to "com.intellij.ant.InstrumentIdeaExtensions"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
dummyInstrumentSrcDir.mkdirs()
|
||||||
|
|
||||||
|
task.ant.withGroovyBuilder {
|
||||||
|
"instrumentIdeaExtensions"(
|
||||||
|
"srcdir" to dummyInstrumentSrcRelativePath,
|
||||||
|
"destdir" to task.destinationDirectory.asFile.get(),
|
||||||
|
"classpath" to task.classpath.asPath,
|
||||||
|
"includeantruntime" to false,
|
||||||
|
"instrumentNotNull" to true
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ fun Project.configureJavaInstrumentation() {
|
|||||||
javaInstrumentator("com.jetbrains.intellij.java:java-compiler-ant-tasks:${rootProject.extra["versions.intellijSdk"]}")
|
javaInstrumentator("com.jetbrains.intellij.java:java-compiler-ant-tasks:${rootProject.extra["versions.intellijSdk"]}")
|
||||||
}
|
}
|
||||||
for (sourceSet in listOf(mainSourceSet, testSourceSet)) {
|
for (sourceSet in listOf(mainSourceSet, testSourceSet)) {
|
||||||
tasks.named(sourceSet.compileJavaTaskName, InstrumentJava(javaInstrumentator, sourceSet))
|
tasks.named(sourceSet.compileJavaTaskName, InstrumentJava(javaInstrumentator))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user