@@ -4,13 +4,12 @@ import org.gradle.api.GradleException
44import org.gradle.api.JavaVersion
55import org.gradle.api.Plugin
66import org.gradle.api.Project
7- import org.gradle.api.file.Directory
87import org.gradle.api.file.DirectoryProperty
8+ import org.gradle.api.file.ProjectLayout
99import org.gradle.api.model.ObjectFactory
1010import org.gradle.api.plugins.JavaPluginExtension
1111import org.gradle.api.provider.ListProperty
1212import org.gradle.api.provider.Property
13- import org.gradle.api.provider.Provider
1413import org.gradle.api.tasks.JavaExec
1514import org.gradle.api.tasks.SourceSet
1615import 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