[KAPT4] KT-51982 Implement Kapt4AnalysisHandlerExtension, add KAPT CLI and Gradle IT
Co-authored-by: Alexander Udalov <Alexander.Udalov@jetbrains.com>
This commit is contained in:
committed by
Space Team
parent
d50d36f16c
commit
5c19cb3fcb
@@ -0,0 +1,11 @@
|
||||
package test
|
||||
|
||||
import apt.Annotation1
|
||||
import generated.Test123
|
||||
|
||||
@Annotation1
|
||||
class Test
|
||||
|
||||
fun main() {
|
||||
println("Generated class: " + Test123::class.java.name)
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
package apt
|
||||
|
||||
import javax.annotation.processing.*
|
||||
import javax.lang.model.SourceVersion
|
||||
import javax.lang.model.element.TypeElement
|
||||
import javax.tools.Diagnostic
|
||||
|
||||
|
||||
annotation class Annotation1
|
||||
annotation class Annotation2
|
||||
annotation class Annotation3
|
||||
|
||||
@SupportedSourceVersion(SourceVersion.RELEASE_8)
|
||||
@SupportedAnnotationTypes("apt.Annotation1")
|
||||
class AnnotationProcessor1 : AbstractProcessor() {
|
||||
override fun process(annotations: Set<TypeElement>, roundEnv: RoundEnvironment): Boolean {
|
||||
val elements = roundEnv.getElementsAnnotatedWith(Annotation1::class.java)
|
||||
for (element in elements) {
|
||||
val generatedSimpleName = "${element.simpleName}1"
|
||||
|
||||
val file = processingEnv.filer.createSourceFile("generated.$generatedSimpleName")
|
||||
|
||||
file.openWriter().use {
|
||||
it.write("package generated;\n@apt.Annotation2\npublic class $generatedSimpleName {}")
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
@SupportedSourceVersion(SourceVersion.RELEASE_8)
|
||||
@SupportedAnnotationTypes("apt.Annotation2")
|
||||
class AnnotationProcessor2 : AbstractProcessor() {
|
||||
override fun process(annotations: Set<TypeElement>, roundEnv: RoundEnvironment): Boolean {
|
||||
val elements = roundEnv.getElementsAnnotatedWith(Annotation2::class.java)
|
||||
for (element in elements) {
|
||||
val generatedSimpleName = "${element.simpleName}2"
|
||||
|
||||
val file = processingEnv.filer.createSourceFile("generated.$generatedSimpleName")
|
||||
|
||||
file.openWriter().use {
|
||||
it.write("package generated;\n@apt.Annotation3\npublic class $generatedSimpleName {}")
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
@SupportedSourceVersion(SourceVersion.RELEASE_8)
|
||||
@SupportedAnnotationTypes("apt.Annotation3")
|
||||
class AnnotationProcessor3 : AbstractProcessor() {
|
||||
override fun process(annotations: Set<TypeElement>, roundEnv: RoundEnvironment): Boolean {
|
||||
val elements = roundEnv.getElementsAnnotatedWith(Annotation3::class.java)
|
||||
for (element in elements) {
|
||||
val generatedSimpleName = "${element.simpleName}3"
|
||||
|
||||
val file = processingEnv.filer.createSourceFile("generated.$generatedSimpleName")
|
||||
|
||||
file.openWriter().use {
|
||||
it.write("package generated;\npublic class $generatedSimpleName {}")
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
# mkdir
|
||||
output/ap
|
||||
output/stubs
|
||||
output/classes
|
||||
output/javaClasses
|
||||
output/sources
|
||||
|
||||
# kotlinc
|
||||
-cp %KOTLIN_STDLIB%
|
||||
-d output/ap
|
||||
ap/processors.kt
|
||||
|
||||
# kapt
|
||||
-Kapt-stubs=output/stubs
|
||||
-Kapt-classes=output/classes
|
||||
-Kapt-sources=output/sources
|
||||
-Kapt-classpath=output/ap
|
||||
-Kapt-processors=apt.AnnotationProcessor3
|
||||
-Kapt-processors=apt.AnnotationProcessor2
|
||||
-Kapt-processors=apt.AnnotationProcessor1
|
||||
-d output/classes
|
||||
-cp output/ap:%KOTLIN_STDLIB%
|
||||
Test.kt
|
||||
|
||||
# javac
|
||||
-cp output/ap
|
||||
-d output/javaClasses
|
||||
-proc:none
|
||||
output/sources/generated/Test1.java
|
||||
output/sources/generated/Test12.java
|
||||
output/sources/generated/Test123.java
|
||||
|
||||
# java
|
||||
-cp output/classes:output/javaClasses:output/ap:%KOTLIN_STDLIB%
|
||||
test.TestKt
|
||||
|
||||
# after
|
||||
Generated class: generated.Test123
|
||||
Reference in New Issue
Block a user