From f60bf5cb97cfd940edf8b40715f92834ef0b5708 Mon Sep 17 00:00:00 2001 From: Ivan Gavrilovic Date: Thu, 13 Jun 2019 22:08:31 +0900 Subject: [PATCH] KT-31127: register only generated Java sources to AGP When adding generated Java sources to AGP using Variant API, add only Java sources. This was already done in a6ae4494167c9d4cca23995457c59fb2daedad39 for Java projects, and this commit fixes the same issue for Android projects. Test: Kapt3Android33IT.testKotlinProcessorUsingFiler --- .../jetbrains/kotlin/gradle/Kapt3AndroidIT.kt | 45 +++++++++++++++++-- .../AndroidLibraryKotlinProject/build.gradle | 29 ++++++++++++ .../gradle.properties | 1 + .../src/main/AndroidManifest.xml | 9 ++++ .../src/main/kotlin/Dummy.kt | 3 ++ .../src/main/kotlin/Greeter.kt | 3 ++ .../src/main/kotlin/dummyUtil.kt | 3 ++ .../android/Android25ProjectHandler.kt | 1 + 8 files changed, 90 insertions(+), 4 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidLibraryKotlinProject/build.gradle create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidLibraryKotlinProject/gradle.properties create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidLibraryKotlinProject/src/main/AndroidManifest.xml create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidLibraryKotlinProject/src/main/kotlin/Dummy.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidLibraryKotlinProject/src/main/kotlin/Greeter.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidLibraryKotlinProject/src/main/kotlin/dummyUtil.kt diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3AndroidIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3AndroidIT.kt index a9533e17663..edf5717a41d 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3AndroidIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3AndroidIT.kt @@ -1,11 +1,10 @@ package org.jetbrains.kotlin.gradle -import org.jetbrains.kotlin.gradle.util.AGPVersion -import org.jetbrains.kotlin.gradle.util.checkedReplace -import org.jetbrains.kotlin.gradle.util.getFileByName -import org.jetbrains.kotlin.gradle.util.modify +import org.jetbrains.kotlin.gradle.util.* import org.jetbrains.kotlin.test.KotlinTestUtils +import org.junit.Assert import org.junit.Test +import java.io.File class Kapt3WorkersAndroid32IT : Kapt3Android32IT() { override fun kaptOptions(): KaptOptions = @@ -36,6 +35,44 @@ open class Kapt3Android33IT : Kapt3AndroidIT() { assertFileExists("build/tmp/kotlin-classes/debug/test/androidx/navigation/StartFragmentKt.class") } } + + /** Regression test for Android projects and KT-31127. */ + @Test + fun testKotlinProcessorUsingFiler() { + val project = Project("AndroidLibraryKotlinProject").apply { + setupWorkingDir() + gradleBuildScript().appendText( + """ + apply plugin: 'kotlin-kapt' + android { + defaultConfig.javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = false + + libraryVariants.all { + it.generateBuildConfig.enabled = false + } + } + + dependencies { + kapt "org.jetbrains.kotlin:annotation-processor-example:${"$"}kotlin_version" + implementation "org.jetbrains.kotlin:annotation-processor-example:${"$"}kotlin_version" + } + """.trimIndent() + ) + + // The test must not contain any java sources in order to detect the issue. + Assert.assertEquals(emptyList(), projectDir.allJavaFiles().toList()) + projectDir.getFileByName("Dummy.kt").modify { + it.replace("class Dummy", "@example.KotlinFilerGenerated class Dummy") + } + } + + project.build("assembleDebug") { + assertSuccessful() + assertFileExists("build/generated/source/kapt/debug/demo/DummyGenerated.kt") + assertTasksExecuted(":compileDebugKotlin") + assertTasksSkipped(":compileDebugJavaWithJavac") + } + } } class Kapt3Android31IT : Kapt3AndroidIT() { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidLibraryKotlinProject/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidLibraryKotlinProject/build.gradle new file mode 100644 index 00000000000..463e39d4b86 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidLibraryKotlinProject/build.gradle @@ -0,0 +1,29 @@ +buildscript { + repositories { + mavenLocal() + maven { url 'https://maven.google.com' } + jcenter() + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath('com.android.tools.build:gradle:' + android_tools_version) + } +} + +repositories { + mavenLocal() + maven { url 'https://maven.google.com' } + jcenter() +} + +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' + +android { + compileSdkVersion 23 + buildToolsVersion "25.0.2" +} + +dependencies { + compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidLibraryKotlinProject/gradle.properties b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidLibraryKotlinProject/gradle.properties new file mode 100644 index 00000000000..59b261a6689 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidLibraryKotlinProject/gradle.properties @@ -0,0 +1 @@ +org.gradle.jvmargs=-XX:MaxPermSize=512m \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidLibraryKotlinProject/src/main/AndroidManifest.xml b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidLibraryKotlinProject/src/main/AndroidManifest.xml new file mode 100644 index 00000000000..d5d65ecfca9 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidLibraryKotlinProject/src/main/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidLibraryKotlinProject/src/main/kotlin/Dummy.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidLibraryKotlinProject/src/main/kotlin/Dummy.kt new file mode 100644 index 00000000000..9c033c2608b --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidLibraryKotlinProject/src/main/kotlin/Dummy.kt @@ -0,0 +1,3 @@ +package demo + +class Dummy diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidLibraryKotlinProject/src/main/kotlin/Greeter.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidLibraryKotlinProject/src/main/kotlin/Greeter.kt new file mode 100644 index 00000000000..accb6e430f8 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidLibraryKotlinProject/src/main/kotlin/Greeter.kt @@ -0,0 +1,3 @@ +package demo + +open class Greeter(val greeting: String) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidLibraryKotlinProject/src/main/kotlin/dummyUtil.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidLibraryKotlinProject/src/main/kotlin/dummyUtil.kt new file mode 100644 index 00000000000..2bf9f3e293a --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/AndroidLibraryKotlinProject/src/main/kotlin/dummyUtil.kt @@ -0,0 +1,3 @@ +package demo + +fun dummyFun() {} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/Android25ProjectHandler.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/Android25ProjectHandler.kt index 36bdcf3fbdd..98af1ca1e4f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/Android25ProjectHandler.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/Android25ProjectHandler.kt @@ -191,6 +191,7 @@ class Android25ProjectHandler( javaTask: AbstractCompile ) { val kaptSourceOutput = project.fileTree(kaptTask.destinationDir).builtBy(kaptTask) + kaptSourceOutput.include("**/*.java") variantData.registerExternalAptJavaOutput(kaptSourceOutput) variantData.dataBindingDependencyArtifactsIfSupported?.let { kaptTask.dependsOn(it) } }