Skip to content

Commit dd16ce2

Browse files
committed
feat(csi): Update the CSI plugin extension types
Use the right types for extension in addition to providers/properties
1 parent 29e6406 commit dd16ce2

1 file changed

Lines changed: 17 additions & 16 deletions

File tree

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

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,12 @@ 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.Directory
87
import org.gradle.api.file.DirectoryProperty
8+
import org.gradle.api.file.ProjectLayout
99
import org.gradle.api.model.ObjectFactory
1010
import org.gradle.api.plugins.JavaPluginExtension
1111
import org.gradle.api.provider.ListProperty
1212
import org.gradle.api.provider.Property
13-
import org.gradle.api.provider.Provider
1413
import org.gradle.api.tasks.JavaExec
1514
import org.gradle.api.tasks.SourceSet
1615
import org.gradle.api.tasks.SourceSetContainer
@@ -32,15 +31,19 @@ private const val CALL_SITE_ERROR_CONSOLE_REPORTER = "ERROR_CONSOLE"
3231
/**
3332
* This extension allows to configure the Call Site Instrumenter plugin execution.
3433
*/
35-
abstract class CallSiteInstrumentationExtension @Inject constructor(objectFactory: ObjectFactory) {
34+
abstract class CallSiteInstrumentationExtension @Inject constructor(objectFactory: ObjectFactory, layout: ProjectLayout) {
3635
/**
37-
* The location of the source code to generate call site ({@code src/main/java} by default).
36+
* The location of the source code to generate call site ({@code <project>/src/main/java} by default).
3837
*/
39-
val srcFolder: Property<String> = objectFactory.property(String::class.java).convention("src${File.separatorChar}main${File.separatorChar}java")
38+
val srcFolder: DirectoryProperty = objectFactory.directoryProperty().convention(
39+
layout.projectDirectory.dir("src").dir("main").dir("java")
40+
)
4041
/**
41-
* The location to generate call site source code ({@code generated/sources/csi} by default).
42+
* The location to generate call site source code ({@code <project>/build/generated/sources/csi} by default).
4243
*/
43-
val targetFolder: Property<String> = objectFactory.property(String::class.java).convention("generated${File.separatorChar}sources${File.separatorChar}csi")
44+
val targetFolder: DirectoryProperty = objectFactory.directoryProperty().convention(
45+
layout.buildDirectory.dir("generated${File.separatorChar}sources${File.separatorChar}csi")
46+
)
4447
/**
4548
* The generated call site source file suffix (#CALL_SITE_CLASS_SUFFIX by default).
4649
*/
@@ -82,7 +85,7 @@ abstract class CallSiteInstrumentationPlugin : Plugin<Project>{
8285

8386
private fun configureSourceSets(project: Project, extension: CallSiteInstrumentationExtension) {
8487
// create a new source set for the csi files
85-
val targetFolder = newBuildFolder(project, extension.targetFolder.get())
88+
val targetFolder = newBuildFolder(project, extension.targetFolder.get().asFile.toString())
8689
val sourceSets = getSourceSets(project)
8790
val csiSourceSet = sourceSets.create("csi")
8891
val mainSourceSet = sourceSets.named(SourceSet.MAIN_SOURCE_SET_NAME).get()
@@ -134,11 +137,10 @@ abstract class CallSiteInstrumentationPlugin : Plugin<Project>{
134137
}
135138

136139
private fun createTasks(project: Project, extension: CallSiteInstrumentationExtension) {
137-
val compileTask: AbstractCompile = project.tasks.named("compileJava").get() as AbstractCompile
140+
val compileTask: AbstractCompile = project.tasks.named("compileJava", AbstractCompile::class.java).get()
138141
val input = compileTask.destinationDirectory
139-
val output = project.layout.buildDirectory.dir(extension.targetFolder)
140-
val targetFolder = output.get().asFile
141-
createGenerateCallSiteTask(project, extension, compileTask, input, output)
142+
createGenerateCallSiteTask(project, extension, compileTask, input)
143+
val targetFolder = extension.targetFolder.get().asFile
142144
project.tasks.withType(AbstractCompile::class.java).matching {
143145
task -> task.name.startsWith("compileTest")
144146
}.configureEach {
@@ -158,8 +160,7 @@ abstract class CallSiteInstrumentationPlugin : Plugin<Project>{
158160
private fun createGenerateCallSiteTask(project: Project,
159161
extension: CallSiteInstrumentationExtension,
160162
compileTask: AbstractCompile,
161-
input: DirectoryProperty,
162-
output: Provider<Directory>) {
163+
input: DirectoryProperty) {
163164
val taskName = compileTask.name.replace("compile", "generateCallSite")
164165
val rootFolder = extension.rootFolder.getOrElse(project.rootDir)
165166
val pluginJarFile = Paths.get(
@@ -170,13 +171,13 @@ abstract class CallSiteInstrumentationPlugin : Plugin<Project>{
170171
"libs",
171172
"call-site-instrumentation-plugin-all.jar"
172173
).toFile()
173-
val sourcePath = project.projectDir.toPath().resolve(extension.srcFolder.get()) // TODO Update with Directory property
174174
val programClassPath = getProgramClasspath(project).map { it.toString() }
175175
val callSiteGeneratorTask = project.tasks.register(taskName, JavaExec::class.java) {
176176
// Task description
177177
group = "call site instrumentation"
178178
description = "Generates call sites from ${compileTask.name}"
179179
// Task input & output
180+
val output = extension.targetFolder
180181
inputs.dir(input)
181182
outputs.dir(output)
182183
// JavaExec configuration
@@ -190,7 +191,7 @@ abstract class CallSiteInstrumentationPlugin : Plugin<Project>{
190191
doFirst {
191192
val argumentFile = newTempFile(temporaryDir, "call-site-arguments")
192193
val arguments = listOf(
193-
sourcePath.toString(),
194+
extension.srcFolder.get().asFile.toString(),
194195
input.get().asFile.toString(),
195196
output.get().asFile.toString(),
196197
extension.suffix.get(),

0 commit comments

Comments
 (0)