Skip to content

Commit da2360c

Browse files
committed
fix: Restrict default CSI classpath to main and test, compile and runtime configurations.
1 parent 0893e4c commit da2360c

File tree

2 files changed

+35
-21
lines changed

2 files changed

+35
-21
lines changed

buildSrc/src/main/kotlin/datadog/gradle/plugin/csi/CallSiteInstrumentationExtension.kt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
11
package datadog.gradle.plugin.csi
22

3+
import org.gradle.api.Project
4+
import org.gradle.api.artifacts.Configuration
35
import org.gradle.api.file.DirectoryProperty
46
import org.gradle.api.file.ProjectLayout
57
import org.gradle.api.model.ObjectFactory
8+
import org.gradle.api.plugins.JavaPlugin
9+
import org.gradle.api.plugins.JavaPlugin.COMPILE_CLASSPATH_CONFIGURATION_NAME
10+
import org.gradle.api.plugins.JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME
611
import org.gradle.api.provider.ListProperty
712
import org.gradle.api.provider.Property
13+
import org.gradle.api.tasks.SourceSet.MAIN_SOURCE_SET_NAME
14+
import org.gradle.api.tasks.SourceSet.TEST_SOURCE_SET_NAME
815
import org.gradle.jvm.toolchain.JavaLanguageVersion
16+
import org.gradle.kotlin.dsl.listProperty
17+
import org.gradle.kotlin.dsl.property
918
import java.io.File
1019
import javax.inject.Inject
1120

@@ -14,6 +23,7 @@ import javax.inject.Inject
1423
* This extension allows to configure the Call Site Instrumenter plugin execution.
1524
*/
1625
abstract class CallSiteInstrumentationExtension @Inject constructor(
26+
project: Project,
1727
objectFactory: ObjectFactory,
1828
layout: ProjectLayout
1929
) {
@@ -66,4 +76,20 @@ abstract class CallSiteInstrumentationExtension @Inject constructor(
6676
*/
6777
val jvmArgs: ListProperty<String> =
6878
objectFactory.listProperty<String>().convention(listOf("-Xmx128m", "-Xms64m"))
79+
80+
/**
81+
* The configurations to use to look for the call site instrumenter dependencies.
82+
*
83+
* By default, includes all `main*` source sets, but only the `test`
84+
* (as wee don't want other test configurations by default).
85+
*/
86+
val configurations = objectFactory.listProperty<Configuration>().convention(
87+
project.provider {
88+
project.configurations.matching {
89+
// Includes all main* source sets, but only the test (as wee don;t want other )
90+
(it.name.startsWith(MAIN_SOURCE_SET_NAME) || it.name == TEST_SOURCE_SET_NAME)
91+
&& (it.name.endsWith(RUNTIME_CLASSPATH_CONFIGURATION_NAME, ignoreCase = true) || it.name.endsWith(COMPILE_CLASSPATH_CONFIGURATION_NAME, ignoreCase = true))
92+
}
93+
}
94+
)
6995
}

buildSrc/src/main/kotlin/datadog/gradle/plugin/csi/CallSiteInstrumentationPlugin.kt

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ import org.gradle.api.GradleException
44
import org.gradle.api.JavaVersion
55
import org.gradle.api.Plugin
66
import org.gradle.api.Project
7-
import org.gradle.api.file.FileSystemOperations
87
import org.gradle.api.plugins.JavaPluginExtension
98
import org.gradle.api.tasks.JavaExec
10-
import org.gradle.api.tasks.SourceSet
9+
import org.gradle.api.tasks.SourceSet.MAIN_SOURCE_SET_NAME
10+
import org.gradle.api.tasks.SourceSet.TEST_SOURCE_SET_NAME
1111
import org.gradle.api.tasks.SourceSetContainer
1212
import org.gradle.api.tasks.compile.AbstractCompile
1313
import org.gradle.api.tasks.testing.Test
@@ -43,7 +43,7 @@ abstract class CallSiteInstrumentationPlugin : Plugin<Project>{
4343
// create a new source set for the csi files
4444
val targetFolder = newBuildFolder(project, extension.targetFolder.get().asFile.toString())
4545
val sourceSets = getSourceSets(project)
46-
val mainSourceSet = sourceSets.named(SourceSet.MAIN_SOURCE_SET_NAME).get()
46+
val mainSourceSet = sourceSets.named(MAIN_SOURCE_SET_NAME).get()
4747
val csiSourceSet = sourceSets.create("csi") {
4848
compileClasspath += mainSourceSet.output // mainly needed for the plugin tests
4949
annotationProcessorPath += mainSourceSet.annotationProcessorPath
@@ -60,7 +60,7 @@ abstract class CallSiteInstrumentationPlugin : Plugin<Project>{
6060
}
6161

6262
// add csi classes to test classpath
63-
sourceSets.named(SourceSet.TEST_SOURCE_SET_NAME) {
63+
sourceSets.named(TEST_SOURCE_SET_NAME) {
6464
compileClasspath += csiSourceSet.output.classesDirs
6565
runtimeClasspath += csiSourceSet.output.classesDirs
6666
}
@@ -152,7 +152,10 @@ abstract class CallSiteInstrumentationPlugin : Plugin<Project>{
152152

153153
// Write the call site instrumenter arguments into a temporary file
154154
doFirst {
155-
val programClassPath = getProgramClasspath(project).map { it.toString() }
155+
val programClassPath = extension.configurations.get().flatMap {
156+
it.files
157+
}.map { it.toString() }
158+
156159
val arguments = listOf(
157160
extension.srcFolder.get().asFile.toString(),
158161
inputProvider.get().asFile.toString(),
@@ -172,7 +175,7 @@ abstract class CallSiteInstrumentationPlugin : Plugin<Project>{
172175

173176
// make all sourcesets' class tasks depend on call site generator
174177
val sourceSets = getSourceSets(project)
175-
sourceSets.named(SourceSet.MAIN_SOURCE_SET_NAME) {
178+
sourceSets.named(MAIN_SOURCE_SET_NAME) {
176179
project.tasks.named(classesTaskName) {
177180
dependsOn(callSiteGeneratorTask)
178181
}
@@ -185,19 +188,4 @@ abstract class CallSiteInstrumentationPlugin : Plugin<Project>{
185188
}
186189
}
187190
}
188-
189-
private fun getProgramClasspath(project: Project): List<File> {
190-
val classpath = ArrayList<File>()
191-
// 1. Compilation outputs - exclude latestDep and forked test variants
192-
project.tasks.withType<AbstractCompile>()
193-
.filter { task -> !task.name.contains("LatestDep", ignoreCase = true) && !task.name.contains("Forked", ignoreCase = true) }
194-
.map { it.destinationDirectory.asFile.get() }
195-
.forEach(classpath::add)
196-
// 2. Compile time dependencies - exclude latestDep and forked test variants
197-
project.tasks.withType<AbstractCompile>()
198-
.filter { task -> !task.name.contains("LatestDep", ignoreCase = true) && !task.name.contains("Forked", ignoreCase = true) }
199-
.flatMap { it.classpath }
200-
.forEach(classpath::add)
201-
return classpath
202-
}
203191
}

0 commit comments

Comments
 (0)