diff --git a/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/AnnotationProcessingManager.kt b/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/AnnotationProcessingManager.kt index 12c20344b25..b1920048e1c 100644 --- a/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/AnnotationProcessingManager.kt +++ b/libraries/tools/kotlin-gradle-plugin-core/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/AnnotationProcessingManager.kt @@ -67,7 +67,7 @@ public class AnnotationProcessingManager(private val task: KotlinCompile) { val javaHackClFile = File(javaHackPackageDir, "Cl.java") javaHackClFile.writeText( "package __gen.annotation;" + - "class Cl { @javax.inject.Inject boolean v; }") + "class Cl { @__gen.KotlinAptAnnotation boolean v; }") javaTask.source(javaAptSourceDir) } @@ -75,6 +75,8 @@ public class AnnotationProcessingManager(private val task: KotlinCompile) { private fun generateAnnotationProcessorStubs(aptDir: File, javaTask: JavaCompile, apFqNames: Set) { val stubOutputDir = File(aptDir, "wrappers") + generateKotlinAptAnnotation(stubOutputDir) + val stubOutputPackageDir = File(stubOutputDir, "__gen") stubOutputPackageDir.mkdirs() @@ -111,6 +113,24 @@ public class AnnotationProcessingManager(private val task: KotlinCompile) { javaTask.getOptions().setCompilerArgs(compilerArgs) } + private fun generateKotlinAptAnnotation(outputDirectory: File) { + val packageName = "__gen" + val className = "KotlinAptAnnotation" + val classFqName = "$packageName/$className" + + val bytes = with (ClassWriter(0)) { + visit(49, ACC_PUBLIC + ACC_ABSTRACT + ACC_INTERFACE + ACC_ANNOTATION, classFqName, + null, null, arrayOf("java/lang/annotation/Annotation")) + visitSource(null, null) + visitEnd() + toByteArray() + } + + val injectPackage = File(outputDirectory, packageName) + injectPackage.mkdirs() + File(injectPackage, "$className.class").writeBytes(bytes) + } + private fun generateAnnotationProcessorWrapper(processorFqName: String, packageName: String, outputDirectory: File) { val className = "AnnotationProcessorWrapper_${processorFqName.replace('.', '_')}" val classFqName = "$packageName/$className"