diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt index 8716027b5f1..9ea79b5749b 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt @@ -29,6 +29,21 @@ abstract class BaseGradleIT { workingDir.deleteRecursively() } + fun Project.allowOriginalKapt() { + if (!projectDir.exists()) { + setupWorkingDir() + } + + val allowOriginalKaptOption = "allow.original.kapt = true" + + val gradleProperties = File(projectDir, "gradle.properties") + if (gradleProperties.exists()) { + gradleProperties.appendText("\n$allowOriginalKaptOption") + } else { + gradleProperties.writeText(allowOriginalKaptOption) + } + } + // https://developer.android.com/studio/intro/update.html#download-with-gradle fun acceptAndroidSdkLicenses() = defaultBuildOptions().androidHome?.let { val sdkLicenses = File(it, "licenses") diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIT.kt index 22e8159d049..01c6538c602 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIT.kt @@ -15,6 +15,7 @@ class KaptIT: BaseGradleIT() { @Test fun testSimple() { val project = Project("kaptSimple", GRADLE_VERSION) + project.allowOriginalKapt() project.build("build") { assertSuccessful() @@ -43,6 +44,7 @@ class KaptIT: BaseGradleIT() { @Test fun testEnumConstructor() { val project = Project("kaptEnumConstructor", GRADLE_VERSION) + project.allowOriginalKapt() project.build("build") { assertSuccessful() @@ -59,6 +61,7 @@ class KaptIT: BaseGradleIT() { @Test fun testStubs() { val project = Project("kaptStubs", GRADLE_VERSION) + project.allowOriginalKapt() project.build("build") { assertSuccessful() @@ -84,7 +87,7 @@ class KaptIT: BaseGradleIT() { @Test fun testStubsWithoutJava() { val project = Project("kaptStubs", GRADLE_VERSION) - project.setupWorkingDir() + project.allowOriginalKapt() project.projectDir.allJavaFiles().forEach { it.delete() } project.build("build") { @@ -110,6 +113,7 @@ class KaptIT: BaseGradleIT() { private fun doTestIncrementalBuild(projectName: String, compileTasks: Array) { val compileTasksUpToDate = compileTasks.map { it + " UP-TO-DATE" }.toTypedArray() val project = Project(projectName, "2.10") + project.allowOriginalKapt() project.build("build") { assertSuccessful() @@ -145,7 +149,10 @@ class KaptIT: BaseGradleIT() { @Test fun testArguments() { - Project("kaptArguments", GRADLE_VERSION).build("build") { + val project = Project("kaptArguments", GRADLE_VERSION) + project.allowOriginalKapt() + + project.build("build") { assertSuccessful() assertContains("kapt: Using class file stubs") assertContains(":compileKotlin") @@ -159,7 +166,10 @@ class KaptIT: BaseGradleIT() { @Test fun testInheritedAnnotations() { - Project("kaptInheritedAnnotations", GRADLE_VERSION).build("build") { + val project = Project("kaptInheritedAnnotations", GRADLE_VERSION) + project.allowOriginalKapt() + + project.build("build") { assertSuccessful() assertFileExists("build/generated/source/kapt/main/example/TestClassGenerated.java") assertFileExists("build/generated/source/kapt/main/example/AncestorClassGenerated.java") @@ -170,7 +180,10 @@ class KaptIT: BaseGradleIT() { @Test fun testOutputKotlinCode() { - Project("kaptOutputKotlinCode", GRADLE_VERSION).build("build") { + val project = Project("kaptOutputKotlinCode", GRADLE_VERSION) + project.allowOriginalKapt() + + project.build("build") { assertSuccessful() assertContains("kapt: Using class file stubs") assertContains(":compileKotlin") @@ -186,7 +199,9 @@ class KaptIT: BaseGradleIT() { @Test fun testInternalUserIsModifiedStubsIC() { val options = defaultBuildOptions().copy(incremental = true) + val project = Project("kaptStubs", GRADLE_VERSION) + project.allowOriginalKapt() project.build("build", options = options) { assertSuccessful() @@ -206,7 +221,9 @@ class KaptIT: BaseGradleIT() { @Test fun testKotlinCompilerNotCalledStubsIC() { val options = defaultBuildOptions().copy(incremental = true) + val project = Project("kaptStubs", GRADLE_VERSION) + project.allowOriginalKapt() project.build("build", options = options) { assertSuccessful() diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalIT.kt index d1e1bf05f8d..b11e3d4b333 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalIT.kt @@ -37,6 +37,7 @@ abstract class KaptIncrementalBaseIT(val shouldUseStubs: Boolean, val useKapt3: if (useKapt3) { buildGradle.modify { it.replace(APPLY_KAPT3_PLUGIN_PLACEHOLDER, APPLY_KAPT3_PLUGIN) } + allowOriginalKapt() } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidDaggerProject/app/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidDaggerProject/app/build.gradle index fc53e05fc75..3e574dc180d 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidDaggerProject/app/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidDaggerProject/app/build.gradle @@ -13,6 +13,7 @@ buildscript { apply plugin: 'com.android.application' apply plugin: 'kotlin-android' +apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-android-extensions' android { @@ -48,10 +49,6 @@ dependencies { provided 'org.glassfish:javax.annotation:10.0-b28' } -kapt { - generateStubs = true -} - androidExtensions { experimental = true } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidIcepickProject/app/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidIcepickProject/app/build.gradle index aa1c49cf4af..a726cb838f0 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidIcepickProject/app/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidIcepickProject/app/build.gradle @@ -1,5 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' +apply plugin: 'kotlin-kapt' dependencies { compile "frankiesardo:icepick:3.2.0" @@ -38,8 +39,4 @@ repositories { } mavenLocal() maven { url 'https://maven.google.com' } -} - -kapt { - generateStubs = true } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/inheritedAnnotations/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/inheritedAnnotations/build.gradle index 5e5680583fb..f276cd40603 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/inheritedAnnotations/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/inheritedAnnotations/build.gradle @@ -21,8 +21,4 @@ dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" compile "org.jetbrains.kotlin:annotation-processor-example:$kotlin_version" kapt "org.jetbrains.kotlin:annotation-processor-example:$kotlin_version" -} - -kapt { - generateStubs = true } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kaptOutputKotlinCode/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kaptOutputKotlinCode/build.gradle index ac74e26645a..1b3dc5d680c 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kaptOutputKotlinCode/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kaptOutputKotlinCode/build.gradle @@ -23,7 +23,6 @@ dependencies { } kapt { - generateStubs = true arguments { arg("suffix", "Customized") arg("generate.kotlin.code", "true") diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AnnotationProcessingManager.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AnnotationProcessingManager.kt index 3588544fe8e..376fbef268d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AnnotationProcessingManager.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/AnnotationProcessingManager.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.gradle.internal import com.android.build.gradle.BaseExtension +import org.gradle.api.GradleException import org.gradle.api.Project import org.gradle.api.UnknownDomainObjectException import org.gradle.api.file.FileCollection @@ -172,13 +173,24 @@ class AnnotationProcessingManager( val kaptProcessorPath get() = setOf(wrappersDirectory) + aptFiles + javaTask.classpath + private fun allowToUseOriginalKapt(): Boolean { + return project.hasProperty("allow.original.kapt") + && project.property("allow.original.kapt").toString().toBoolean() + } + fun setupKapt() { originalJavaCompilerArgs = javaTask.options.compilerArgs if (aptFiles.isEmpty()) return - project.logger.warn("${project.name}: " + - "Original kapt is deprecated. Please add \"apply plugin: 'kotlin-kapt'\" to your build.gradle.") + val deprecationMessage = "${project.name}: " + + "Original kapt is deprecated. Please add \"apply plugin: 'kotlin-kapt'\" to your build.gradle." + + if (allowToUseOriginalKapt()) { + project.logger.warn(deprecationMessage) + } else { + throw GradleException(deprecationMessage) + } if (project.plugins.findPlugin(ANDROID_APT_PLUGIN_ID) != null) { project.logger.warn("Please do not use `$ANDROID_APT_PLUGIN_ID` with kapt.")