APT: Use task qualifiers in annotation file names
This commit is contained in:
+5
-2
@@ -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)
|
||||
|
||||
+14
-9
@@ -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<File>,
|
||||
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<String>) {
|
||||
private fun generateAnnotationProcessorStubs(aptDir: File, javaTask: JavaCompile, processorFqNames: Set<String>) {
|
||||
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, "<init>", "()V", null, null)) {
|
||||
visitVarInsn(ALOAD, 0)
|
||||
visitLdcInsn(processorFqName)
|
||||
visitMethodInsn(INVOKESPECIAL, superClass, "<init>", "(Ljava/lang/String;)V", false)
|
||||
visitLdcInsn(taskQualifier)
|
||||
visitMethodInsn(INVOKESPECIAL, superClass, "<init>", "(Ljava/lang/String;Ljava/lang/String;)V", false)
|
||||
visitInsn(RETURN)
|
||||
visitMaxs(2, 1)
|
||||
visitMaxs(3 /*max stack*/, 1 /*max locals*/)
|
||||
visitEnd()
|
||||
}
|
||||
|
||||
|
||||
+4
-2
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user