Generate custom annotation class file
This commit is contained in:
+21
-1
@@ -67,7 +67,7 @@ public class AnnotationProcessingManager(private val task: KotlinCompile) {
|
|||||||
val javaHackClFile = File(javaHackPackageDir, "Cl.java")
|
val javaHackClFile = File(javaHackPackageDir, "Cl.java")
|
||||||
javaHackClFile.writeText(
|
javaHackClFile.writeText(
|
||||||
"package __gen.annotation;" +
|
"package __gen.annotation;" +
|
||||||
"class Cl { @javax.inject.Inject boolean v; }")
|
"class Cl { @__gen.KotlinAptAnnotation boolean v; }")
|
||||||
|
|
||||||
javaTask.source(javaAptSourceDir)
|
javaTask.source(javaAptSourceDir)
|
||||||
}
|
}
|
||||||
@@ -75,6 +75,8 @@ public class AnnotationProcessingManager(private val task: KotlinCompile) {
|
|||||||
private fun generateAnnotationProcessorStubs(aptDir: File, javaTask: JavaCompile, apFqNames: Set<String>) {
|
private fun generateAnnotationProcessorStubs(aptDir: File, javaTask: JavaCompile, apFqNames: Set<String>) {
|
||||||
val stubOutputDir = File(aptDir, "wrappers")
|
val stubOutputDir = File(aptDir, "wrappers")
|
||||||
|
|
||||||
|
generateKotlinAptAnnotation(stubOutputDir)
|
||||||
|
|
||||||
val stubOutputPackageDir = File(stubOutputDir, "__gen")
|
val stubOutputPackageDir = File(stubOutputDir, "__gen")
|
||||||
stubOutputPackageDir.mkdirs()
|
stubOutputPackageDir.mkdirs()
|
||||||
|
|
||||||
@@ -111,6 +113,24 @@ public class AnnotationProcessingManager(private val task: KotlinCompile) {
|
|||||||
javaTask.getOptions().setCompilerArgs(compilerArgs)
|
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) {
|
private fun generateAnnotationProcessorWrapper(processorFqName: String, packageName: String, outputDirectory: File) {
|
||||||
val className = "AnnotationProcessorWrapper_${processorFqName.replace('.', '_')}"
|
val className = "AnnotationProcessorWrapper_${processorFqName.replace('.', '_')}"
|
||||||
val classFqName = "$packageName/$className"
|
val classFqName = "$packageName/$className"
|
||||||
|
|||||||
Reference in New Issue
Block a user