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 AnnotatedConstructorDescriptor(classFqName: String) : AnnotatedElementDescriptor(classFqName)
|
||||||
data class AnnotatedFieldDescriptor(classFqName: String, public val fieldName: 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 {
|
private val processor: Processor by Delegates.lazy {
|
||||||
try {
|
try {
|
||||||
@@ -72,7 +75,7 @@ public abstract class AnnotationProcessorWrapper(private val processorFqName: St
|
|||||||
return
|
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)
|
kotlinAnnotationsProvider = FileObjectKotlinAnnotationProvider(annotationsTxt)
|
||||||
|
|
||||||
processor.init(processingEnv)
|
processor.init(processingEnv)
|
||||||
|
|||||||
+14
-9
@@ -29,6 +29,7 @@ import java.util.zip.ZipFile
|
|||||||
public class AnnotationProcessingManager(
|
public class AnnotationProcessingManager(
|
||||||
private val task: AbstractCompile,
|
private val task: AbstractCompile,
|
||||||
val javaTask: JavaCompile,
|
val javaTask: JavaCompile,
|
||||||
|
val taskQualifier: String,
|
||||||
val aptFiles: Set<File>,
|
val aptFiles: Set<File>,
|
||||||
val aptOutputDir: File,
|
val aptOutputDir: File,
|
||||||
val aptWorkingDir: File) {
|
val aptWorkingDir: File) {
|
||||||
@@ -38,13 +39,12 @@ public class AnnotationProcessingManager(
|
|||||||
private companion object {
|
private companion object {
|
||||||
val JAVA_FQNAME_PATTERN = "^([\\p{L}_$][\\p{L}\\p{N}_$]*\\.)*[\\p{L}_$][\\p{L}\\p{N}_$]*$".toRegex()
|
val JAVA_FQNAME_PATTERN = "^([\\p{L}_$][\\p{L}\\p{N}_$]*\\.)*[\\p{L}_$][\\p{L}\\p{N}_$]*$".toRegex()
|
||||||
val WRAPPERS_DIRECTORY = "wrappers"
|
val WRAPPERS_DIRECTORY = "wrappers"
|
||||||
val ANNOTATIONS_FILENAME = "annotations.kotlin.txt"
|
|
||||||
val GEN_ANNOTATION = "__gen/annotation"
|
val GEN_ANNOTATION = "__gen/annotation"
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getAnnotationFile(): File {
|
fun getAnnotationFile(): File {
|
||||||
aptWorkingDir.mkdirs()
|
aptWorkingDir.mkdirs()
|
||||||
return File(aptWorkingDir, "$WRAPPERS_DIRECTORY/$ANNOTATIONS_FILENAME")
|
return File(aptWorkingDir, "$WRAPPERS_DIRECTORY/annotations.$taskQualifier.txt")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setupKapt() {
|
fun setupKapt() {
|
||||||
@@ -79,7 +79,7 @@ public class AnnotationProcessingManager(
|
|||||||
javaTask.source(javaAptSourceDir)
|
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")
|
val stubOutputDir = File(aptDir, "$WRAPPERS_DIRECTORY")
|
||||||
|
|
||||||
generateKotlinAptAnnotation(stubOutputDir)
|
generateKotlinAptAnnotation(stubOutputDir)
|
||||||
@@ -87,12 +87,12 @@ public class AnnotationProcessingManager(
|
|||||||
val stubOutputPackageDir = File(stubOutputDir, "__gen")
|
val stubOutputPackageDir = File(stubOutputDir, "__gen")
|
||||||
stubOutputPackageDir.mkdirs()
|
stubOutputPackageDir.mkdirs()
|
||||||
|
|
||||||
for (processor in apFqNames) {
|
for (processor in processorFqNames) {
|
||||||
generateAnnotationProcessorWrapper(processor, "__gen", stubOutputPackageDir)
|
generateAnnotationProcessorWrapper(processor, "__gen", stubOutputPackageDir)
|
||||||
}
|
}
|
||||||
|
|
||||||
val annotationProcessorWrapperFqNames = apFqNames
|
val annotationProcessorWrapperFqNames = processorFqNames
|
||||||
.map { "__gen.AnnotationProcessorWrapper_${it.replace('.', '_')}" }
|
.map { fqName -> "__gen." + getProcessorStubClassName(fqName) }
|
||||||
.joinToString(",")
|
.joinToString(",")
|
||||||
|
|
||||||
javaTask.appendClasspath(stubOutputDir)
|
javaTask.appendClasspath(stubOutputDir)
|
||||||
@@ -120,6 +120,10 @@ public class AnnotationProcessingManager(
|
|||||||
javaTask.getOptions().setCompilerArgs(compilerArgs)
|
javaTask.getOptions().setCompilerArgs(compilerArgs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getProcessorStubClassName(processorFqName: String): String {
|
||||||
|
return "AnnotationProcessorWrapper_${taskQualifier}_${processorFqName.replace('.', '_')}"
|
||||||
|
}
|
||||||
|
|
||||||
private fun addGeneratedSourcesOutputToCompilerArgs(javaTask: JavaCompile, outputDir: File) {
|
private fun addGeneratedSourcesOutputToCompilerArgs(javaTask: JavaCompile, outputDir: File) {
|
||||||
outputDir.mkdirs()
|
outputDir.mkdirs()
|
||||||
|
|
||||||
@@ -160,7 +164,7 @@ public class AnnotationProcessingManager(
|
|||||||
}
|
}
|
||||||
|
|
||||||
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 = getProcessorStubClassName(processorFqName)
|
||||||
val classFqName = "$packageName/$className"
|
val classFqName = "$packageName/$className"
|
||||||
|
|
||||||
val bytes = with (ClassWriter(0)) {
|
val bytes = with (ClassWriter(0)) {
|
||||||
@@ -174,9 +178,10 @@ public class AnnotationProcessingManager(
|
|||||||
with (visitMethod(ACC_PUBLIC, "<init>", "()V", null, null)) {
|
with (visitMethod(ACC_PUBLIC, "<init>", "()V", null, null)) {
|
||||||
visitVarInsn(ALOAD, 0)
|
visitVarInsn(ALOAD, 0)
|
||||||
visitLdcInsn(processorFqName)
|
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)
|
visitInsn(RETURN)
|
||||||
visitMaxs(2, 1)
|
visitMaxs(3 /*max stack*/, 1 /*max locals*/)
|
||||||
visitEnd()
|
visitEnd()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-2
@@ -168,7 +168,8 @@ class Kotlin2JvmSourceSetProcessor(
|
|||||||
if (aptConfiguration.getDependencies().size() > 1 && javaTask is JavaCompile) {
|
if (aptConfiguration.getDependencies().size() > 1 && javaTask is JavaCompile) {
|
||||||
val (aptOutputDir, aptWorkingDir) = project.getAptDirsForSourceSet(kotlinTask, sourceSet.getName())
|
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)
|
kotlinTask.storeKaptAnnotationsFile(kaptManager)
|
||||||
|
|
||||||
javaTask.doFirst {
|
javaTask.doFirst {
|
||||||
@@ -437,7 +438,8 @@ open class KotlinAndroidPlugin [Inject] (val scriptHandler: ScriptHandler, val t
|
|||||||
javaTask.dependsOn(kotlinTaskName)
|
javaTask.dependsOn(kotlinTaskName)
|
||||||
|
|
||||||
val kaptManager = if (javaTask is JavaCompile) {
|
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)
|
kotlinTask.storeKaptAnnotationsFile(manager)
|
||||||
manager
|
manager
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user