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) } }