Skip to content

Commit 74935c0

Browse files
committed
fix: Include the main source set output
1 parent 46abdf1 commit 74935c0

File tree

2 files changed

+36
-12
lines changed

2 files changed

+36
-12
lines changed

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

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import org.gradle.api.artifacts.Configuration
55
import org.gradle.api.file.DirectoryProperty
66
import org.gradle.api.file.ProjectLayout
77
import org.gradle.api.model.ObjectFactory
8-
import org.gradle.api.plugins.JavaPlugin
98
import org.gradle.api.plugins.JavaPlugin.COMPILE_CLASSPATH_CONFIGURATION_NAME
109
import org.gradle.api.plugins.JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME
1110
import org.gradle.api.provider.ListProperty
@@ -16,6 +15,7 @@ import org.gradle.jvm.toolchain.JavaLanguageVersion
1615
import org.gradle.kotlin.dsl.listProperty
1716
import org.gradle.kotlin.dsl.property
1817
import java.io.File
18+
import java.util.Locale
1919
import javax.inject.Inject
2020

2121

@@ -83,13 +83,35 @@ abstract class CallSiteInstrumentationExtension @Inject constructor(
8383
* By default, includes all `main*` source sets, but only the `test`
8484
* (as wee don't want other test configurations by default).
8585
*/
86-
val configurations = objectFactory.listProperty<Configuration>().convention(
86+
val configurations: ListProperty<Configuration> = objectFactory.listProperty<Configuration>().convention(
8787
project.provider {
8888
project.configurations.matching {
8989
// 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))
90+
// * For main => runtimeClasspath, compileClasspath
91+
// * For test => testRuntimeClasspath, testCompileClasspath
92+
// * For other main* => "main_javaXXRuntimeClasspath", "main_javaXXCompileClasspath"
93+
94+
when (it.name) {
95+
// Regular main and test source sets
96+
RUNTIME_CLASSPATH_CONFIGURATION_NAME,
97+
COMPILE_CLASSPATH_CONFIGURATION_NAME,
98+
TEST_SOURCE_SET_NAME + RUNTIME_CLASSPATH_CONFIGURATION_NAME.capitalize(),
99+
TEST_SOURCE_SET_NAME + COMPILE_CLASSPATH_CONFIGURATION_NAME.capitalize() -> true
100+
101+
// Other main_javaXX source sets
102+
else -> {
103+
it.name.startsWith(MAIN_SOURCE_SET_NAME) &&
104+
(it.name.endsWith(RUNTIME_CLASSPATH_CONFIGURATION_NAME, ignoreCase = true) ||
105+
it.name.endsWith(COMPILE_CLASSPATH_CONFIGURATION_NAME, ignoreCase = true))
106+
}
107+
}
92108
}
93109
}
94110
)
111+
112+
private fun String.capitalize(): String = replaceFirstChar {
113+
if (it.isLowerCase()) it.titlecase(
114+
Locale.getDefault()
115+
) else it.toString()
116+
}
95117
}

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

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ abstract class CallSiteInstrumentationPlugin : Plugin<Project>{
4242
private fun configureSourceSets(project: Project, extension: CallSiteInstrumentationExtension) {
4343
// create a new source set for the csi files
4444
val targetFolder = newBuildFolder(project, extension.targetFolder.get().asFile.toString())
45-
val sourceSets = getSourceSets(project)
45+
val sourceSets = project.sourceSets
4646
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
@@ -91,10 +91,6 @@ abstract class CallSiteInstrumentationPlugin : Plugin<Project>{
9191
return file
9292
}
9393

94-
private fun getSourceSets(project: Project): SourceSetContainer {
95-
return project.extensions.getByType<JavaPluginExtension>().sourceSets
96-
}
97-
9894
private fun createTasks(project: Project, extension: CallSiteInstrumentationExtension) {
9995
registerGenerateCallSiteTask(project, extension, "compileJava")
10096
val targetFolder = extension.targetFolder.get().asFile
@@ -152,17 +148,20 @@ abstract class CallSiteInstrumentationPlugin : Plugin<Project>{
152148

153149
// Write the call site instrumenter arguments into a temporary file
154150
doFirst {
151+
val sourceSetOutput = project.sourceSets.matching { it.name.startsWith(MAIN_SOURCE_SET_NAME) }.flatMap {
152+
it.output.classesDirs.files
153+
}
155154
val programClassPath = csiExtension.configurations.get().flatMap {
156155
it.files
157-
}.map { it.toString() }
156+
}
158157

159158
val arguments = listOf(
160159
csiExtension.srcFolder.get().asFile.toString(),
161160
inputProvider.get().asFile.toString(),
162161
output.get().asFile.toString(),
163162
csiExtension.suffix.get(),
164163
csiExtension.reporters.get().joinToString(",")
165-
) + programClassPath
164+
) + (sourceSetOutput + programClassPath).map { it.toString() }
166165

167166
val argumentFile = newTempFile(temporaryDir, "call-site-arguments")
168167
Files.write(argumentFile.toPath(), arguments)
@@ -174,7 +173,7 @@ abstract class CallSiteInstrumentationPlugin : Plugin<Project>{
174173
}
175174

176175
// make all sourcesets' class tasks depend on call site generator
177-
val sourceSets = getSourceSets(project)
176+
val sourceSets = project.sourceSets
178177
sourceSets.named(MAIN_SOURCE_SET_NAME) {
179178
project.tasks.named(classesTaskName) {
180179
dependsOn(callSiteGeneratorTask)
@@ -188,4 +187,7 @@ abstract class CallSiteInstrumentationPlugin : Plugin<Project>{
188187
}
189188
}
190189
}
190+
191+
private val Project.sourceSets: SourceSetContainer
192+
get() = project.extensions.getByType<JavaPluginExtension>().sourceSets
191193
}

0 commit comments

Comments
 (0)