From 77eafb97160db4ac6847cb45f18a39eadbceb2a3 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Sat, 8 Jul 2017 02:22:44 +0300 Subject: [PATCH] Kapt: Map kaptGenerateStubsKotlin task classpath properly, ensure the destination for compileKotlin isn't in it (KT-18799) --- .../org/jetbrains/kotlin/gradle/Kapt3IT.kt | 19 +++++++++++++++++++ .../kapt2/kt18799/app/build.gradle | 9 +++++++++ .../app/src/main/java/com.Constants.kt | 3 +++ .../kt18799/app/src/main/java/com.b.A.kt | 7 +++++++ .../kapt2/kt18799/app/src/main/java/lib.kt | 9 +++++++++ .../testProject/kapt2/kt18799/build.gradle | 19 +++++++++++++++++++ .../testProject/kapt2/kt18799/settings.gradle | 1 + .../internal/Kapt3KotlinGradleSubplugin.kt | 1 + .../gradle/internal/KaptGenerateStubsTask.kt | 4 ++++ 9 files changed, 72 insertions(+) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt18799/app/build.gradle create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt18799/app/src/main/java/com.Constants.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt18799/app/src/main/java/com.b.A.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt18799/app/src/main/java/lib.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt18799/build.gradle create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt18799/settings.gradle diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt index 079e0c89e1f..b0f07f58576 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt @@ -223,6 +223,25 @@ open class Kapt3IT : Kapt3BaseIT() { } } + @Test + fun testKt18799() { + val project = Project("kt18799", GRADLE_VERSION, directoryPrefix = "kapt2") + + project.build("kaptKotlin") { + assertSuccessful() + } + + project.projectDir.getFileByName("com.b.A.kt").modify { + val line = "@Factory(factoryClass = CLASS_NAME, something = arrayOf(Test()))" + assert(line in it) + it.replace(line, "@Factory(factoryClass = CLASS_NAME)") + } + + project.build("kaptKotlin") { + assertSuccessful() + } + } + @Test fun testKaptClassesDirSync() { val project = Project("autoService", GRADLE_VERSION, directoryPrefix = "kapt2") diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt18799/app/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt18799/app/build.gradle new file mode 100644 index 00000000000..c54b3463c4d --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt18799/app/build.gradle @@ -0,0 +1,9 @@ +apply plugin: 'kotlin' +apply plugin: 'kotlin-kapt' + +dependencies { + compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" + + compile 'com.google.dagger:dagger:2.9' + kapt 'com.google.dagger:dagger-compiler:2.9' +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt18799/app/src/main/java/com.Constants.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt18799/app/src/main/java/com.Constants.kt new file mode 100644 index 00000000000..b8e8253bdb5 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt18799/app/src/main/java/com.Constants.kt @@ -0,0 +1,3 @@ +package com + +const val CLASS_NAME = "com.test.Something" \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt18799/app/src/main/java/com.b.A.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt18799/app/src/main/java/com.b.A.kt new file mode 100644 index 00000000000..0acfcdbcd4e --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt18799/app/src/main/java/com.b.A.kt @@ -0,0 +1,7 @@ +package com.b + +import com.CLASS_NAME +import com.lib.* + +@Factory(factoryClass = CLASS_NAME, something = arrayOf(Test())) +interface A \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt18799/app/src/main/java/lib.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt18799/app/src/main/java/lib.kt new file mode 100644 index 00000000000..023123b9728 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt18799/app/src/main/java/lib.kt @@ -0,0 +1,9 @@ +package com.lib + +@Retention(AnnotationRetention.SOURCE) +@kotlin.annotation.Target(AnnotationTarget.CLASS, AnnotationTarget.FILE) +annotation class Factory(val factoryClass: String, val something: Array = arrayOf()) + +@Retention(AnnotationRetention.RUNTIME) +@Target(AnnotationTarget.FUNCTION, AnnotationTarget.CLASS) +annotation class Test diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt18799/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt18799/build.gradle new file mode 100644 index 00000000000..789c23cd1b6 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt18799/build.gradle @@ -0,0 +1,19 @@ +buildscript { + repositories { + mavenLocal() + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + jcenter() + mavenLocal() + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt18799/settings.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt18799/settings.gradle new file mode 100644 index 00000000000..e7b4def49cb --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt18799/settings.gradle @@ -0,0 +1 @@ +include ':app' diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/Kapt3KotlinGradleSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/Kapt3KotlinGradleSubplugin.kt index 2e4c85d3b87..974cc89fcfc 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/Kapt3KotlinGradleSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/Kapt3KotlinGradleSubplugin.kt @@ -26,6 +26,7 @@ import org.gradle.api.artifacts.Dependency import org.gradle.api.tasks.SourceSet import org.gradle.api.tasks.compile.AbstractCompile import org.gradle.api.tasks.compile.JavaCompile +import org.jetbrains.kotlin.com.intellij.openapi.util.io.FileUtil import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.tasks.CompilerPluginOptions import org.jetbrains.kotlin.gradle.tasks.KotlinCompile diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/KaptGenerateStubsTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/KaptGenerateStubsTask.kt index 96e826d0c49..062dca13d60 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/KaptGenerateStubsTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/KaptGenerateStubsTask.kt @@ -23,6 +23,8 @@ import org.jetbrains.kotlin.gradle.plugin.kotlinDebug import org.jetbrains.kotlin.gradle.tasks.FilteringSourceRootsContainer import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.incremental.ChangedFiles +import org.jetbrains.kotlin.incremental.classpathAsList +import org.jetbrains.kotlin.incremental.destinationAsFile import org.jetbrains.kotlin.incremental.pathsAsStringRelativeTo import java.io.File @@ -67,6 +69,8 @@ open class KaptGenerateStubsTask : KotlinCompile() { args.pluginClasspaths = (pluginOptions.classpath + args.pluginClasspaths).toSet().toTypedArray() args.pluginOptions = (pluginOptions.arguments + args.pluginOptions).toTypedArray() args.verbose = project.hasProperty("kapt.verbose") && project.property("kapt.verbose").toString().toBoolean() == true + args.classpathAsList = this.compileClasspath.toList() + args.destinationAsFile = this.destinationDir compilerCalled = true callCompiler(args, sourceRoots, ChangedFiles(inputs))