diff --git a/libraries/tools/kotlin-annotation-processing/src/main/kotlin/org/jetbrains/kotlin/annotation/AnnotationProcessorWrapper.kt b/libraries/tools/kotlin-annotation-processing/src/main/kotlin/org/jetbrains/kotlin/annotation/AnnotationProcessorWrapper.kt index 38b51e7362b..180452e99c4 100644 --- a/libraries/tools/kotlin-annotation-processing/src/main/kotlin/org/jetbrains/kotlin/annotation/AnnotationProcessorWrapper.kt +++ b/libraries/tools/kotlin-annotation-processing/src/main/kotlin/org/jetbrains/kotlin/annotation/AnnotationProcessorWrapper.kt @@ -37,7 +37,10 @@ data class AnnotatedMethodDescriptor(classFqName: String, public val methodName: data class AnnotatedConstructorDescriptor(classFqName: String) : AnnotatedElementDescriptor(classFqName) data class AnnotatedFieldDescriptor(classFqName: String, public val fieldName: String) : AnnotatedElementDescriptor(classFqName) -public abstract class AnnotationProcessorWrapper(private val processorFqName: String) : Processor { +public abstract class AnnotationProcessorWrapper( + private val processorFqName: String, + private val taskQualifier: String +) : Processor { private val processor: Processor by Delegates.lazy { try { @@ -72,7 +75,7 @@ public abstract class AnnotationProcessorWrapper(private val processorFqName: St return } - val annotationsTxt = processingEnv.getFiler().getResource(StandardLocation.CLASS_PATH, "", "annotations.kotlin.txt") + val annotationsTxt = processingEnv.getFiler().getResource(StandardLocation.CLASS_PATH, "", "annotations.$taskQualifier.txt") kotlinAnnotationsProvider = FileObjectKotlinAnnotationProvider(annotationsTxt) processor.init(processingEnv) 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 046b2851153..b1db0f47de4 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 @@ -29,6 +29,7 @@ import java.util.zip.ZipFile public class AnnotationProcessingManager( private val task: AbstractCompile, val javaTask: JavaCompile, + val taskQualifier: String, val aptFiles: Set, val aptOutputDir: File, val aptWorkingDir: File) { @@ -38,13 +39,12 @@ public class AnnotationProcessingManager( private companion object { val JAVA_FQNAME_PATTERN = "^([\\p{L}_$][\\p{L}\\p{N}_$]*\\.)*[\\p{L}_$][\\p{L}\\p{N}_$]*$".toRegex() val WRAPPERS_DIRECTORY = "wrappers" - val ANNOTATIONS_FILENAME = "annotations.kotlin.txt" val GEN_ANNOTATION = "__gen/annotation" } fun getAnnotationFile(): File { aptWorkingDir.mkdirs() - return File(aptWorkingDir, "$WRAPPERS_DIRECTORY/$ANNOTATIONS_FILENAME") + return File(aptWorkingDir, "$WRAPPERS_DIRECTORY/annotations.$taskQualifier.txt") } fun setupKapt() { @@ -79,7 +79,7 @@ public class AnnotationProcessingManager( javaTask.source(javaAptSourceDir) } - private fun generateAnnotationProcessorStubs(aptDir: File, javaTask: JavaCompile, apFqNames: Set) { + private fun generateAnnotationProcessorStubs(aptDir: File, javaTask: JavaCompile, processorFqNames: Set) { val stubOutputDir = File(aptDir, "$WRAPPERS_DIRECTORY") generateKotlinAptAnnotation(stubOutputDir) @@ -87,12 +87,12 @@ public class AnnotationProcessingManager( val stubOutputPackageDir = File(stubOutputDir, "__gen") stubOutputPackageDir.mkdirs() - for (processor in apFqNames) { + for (processor in processorFqNames) { generateAnnotationProcessorWrapper(processor, "__gen", stubOutputPackageDir) } - val annotationProcessorWrapperFqNames = apFqNames - .map { "__gen.AnnotationProcessorWrapper_${it.replace('.', '_')}" } + val annotationProcessorWrapperFqNames = processorFqNames + .map { fqName -> "__gen." + getProcessorStubClassName(fqName) } .joinToString(",") javaTask.appendClasspath(stubOutputDir) @@ -120,6 +120,10 @@ public class AnnotationProcessingManager( javaTask.getOptions().setCompilerArgs(compilerArgs) } + private fun getProcessorStubClassName(processorFqName: String): String { + return "AnnotationProcessorWrapper_${taskQualifier}_${processorFqName.replace('.', '_')}" + } + private fun addGeneratedSourcesOutputToCompilerArgs(javaTask: JavaCompile, outputDir: File) { outputDir.mkdirs() @@ -160,7 +164,7 @@ public class AnnotationProcessingManager( } private fun generateAnnotationProcessorWrapper(processorFqName: String, packageName: String, outputDirectory: File) { - val className = "AnnotationProcessorWrapper_${processorFqName.replace('.', '_')}" + val className = getProcessorStubClassName(processorFqName) val classFqName = "$packageName/$className" val bytes = with (ClassWriter(0)) { @@ -174,9 +178,10 @@ public class AnnotationProcessingManager( with (visitMethod(ACC_PUBLIC, "", "()V", null, null)) { visitVarInsn(ALOAD, 0) visitLdcInsn(processorFqName) - visitMethodInsn(INVOKESPECIAL, superClass, "", "(Ljava/lang/String;)V", false) + visitLdcInsn(taskQualifier) + visitMethodInsn(INVOKESPECIAL, superClass, "", "(Ljava/lang/String;Ljava/lang/String;)V", false) visitInsn(RETURN) - visitMaxs(2, 1) + visitMaxs(3 /*max stack*/, 1 /*max locals*/) visitEnd() } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index 57cfe901351..38bcf2b14b4 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -168,7 +168,8 @@ class Kotlin2JvmSourceSetProcessor( if (aptConfiguration.getDependencies().size() > 1 && javaTask is JavaCompile) { val (aptOutputDir, aptWorkingDir) = project.getAptDirsForSourceSet(kotlinTask, sourceSet.getName()) - val kaptManager = AnnotationProcessingManager(kotlinTask, javaTask, aptConfiguration.resolve(), aptOutputDir, aptWorkingDir) + val kaptManager = AnnotationProcessingManager(kotlinTask, javaTask, sourceSet.getName(), + aptConfiguration.resolve(), aptOutputDir, aptWorkingDir) kotlinTask.storeKaptAnnotationsFile(kaptManager) javaTask.doFirst { @@ -437,7 +438,8 @@ open class KotlinAndroidPlugin [Inject] (val scriptHandler: ScriptHandler, val t javaTask.dependsOn(kotlinTaskName) val kaptManager = if (javaTask is JavaCompile) { - val manager = AnnotationProcessingManager(kotlinTask, javaTask, aptFiles.toSet(), aptOutputDir, aptWorkingDir) + val manager = AnnotationProcessingManager(kotlinTask, javaTask, variantDataName, + aptFiles.toSet(), aptOutputDir, aptWorkingDir) kotlinTask.storeKaptAnnotationsFile(manager) manager }