Add test checking that JVM_IR is enabled/disabled in kapt

#KT-53135
This commit is contained in:
Alexander Udalov
2023-01-18 01:12:37 +01:00
committed by Space Team
parent 62f2a09d70
commit 574b9b76cd
14 changed files with 190 additions and 0 deletions
@@ -92,6 +92,14 @@ class Kapt3ClassLoadersCacheIT : Kapt3IT() {
override fun testKt33847(gradleVersion: GradleVersion) {
}
@Disabled("classloaders cache is leaking file descriptors that prevents cleaning test project")
override fun testRepeatableAnnotations(gradleVersion: GradleVersion) {
}
@Disabled("classloaders cache is leaking file descriptors that prevents cleaning test project")
override fun testRepeatableAnnotationsWithOldJvmBackend(gradleVersion: GradleVersion) {
}
override fun testAnnotationProcessorAsFqName(gradleVersion: GradleVersion) {
project("annotationProcessorAsFqName".withPrefix, gradleVersion) {
//classloaders caching is not compatible with includeCompileClasspath
@@ -1036,4 +1044,26 @@ open class Kapt3IT : Kapt3BaseIT() {
build("assemble")
}
}
@DisplayName("KT-53135: check that JVM IR backend is enabled by default by verifying that repeatable annotations are supported")
@GradleTest
open fun testRepeatableAnnotations(gradleVersion: GradleVersion) {
project("repeatableAnnotations".withPrefix, gradleVersion) {
build("build") {
assertKaptSuccessful()
assertTasksExecuted(":kaptGenerateStubsKotlin", ":kaptKotlin", ":compileKotlin")
}
}
}
@DisplayName("KT-53135: check that JVM IR backend is disabled if kapt.use.jvm.ir=false is specified in gradle.properties")
@GradleTest
open fun testRepeatableAnnotationsWithOldJvmBackend(gradleVersion: GradleVersion) {
project("repeatableAnnotationsWithOldJvmBackend".withPrefix, gradleVersion) {
build("build") {
assertKaptSuccessful()
assertTasksExecuted(":kaptGenerateStubsKotlin", ":kaptKotlin", ":compileKotlin")
}
}
}
}
@@ -0,0 +1,17 @@
plugins {
id "java"
id "org.jetbrains.kotlin.jvm"
id "org.jetbrains.kotlin.kapt"
}
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
implementation(project(":processor"))
kapt(project(":processor"))
}
compileKotlin.kotlinOptions.allWarningsAsErrors = true
@@ -0,0 +1,11 @@
plugins {
id "java"
id "org.jetbrains.kotlin.jvm"
}
repositories {
mavenLocal()
mavenCentral()
}
compileKotlin.kotlinOptions.allWarningsAsErrors = true
@@ -0,0 +1,43 @@
package processor
import javax.annotation.processing.AbstractProcessor
import javax.annotation.processing.RoundEnvironment
import javax.lang.model.SourceVersion
import javax.lang.model.element.TypeElement
import javax.tools.Diagnostic
class CheckAnnotationIsRepeated : AbstractProcessor() {
override fun process(annotations: MutableSet<out TypeElement>?, roundEnv: RoundEnvironment): Boolean {
val element = processingEnv.elementUtils.getTypeElement("example.TestClass")
val containerAnnotation = element.annotationMirrors.singleOrNull {
it.annotationType.asElement().simpleName.contentEquals("Container") &&
it.annotationType.asElement().enclosingElement.simpleName.contentEquals("Anno")
}
if (containerAnnotation == null) {
processingEnv.messager.printMessage(
Diagnostic.Kind.ERROR,
"Repeatable container annotation class example.Anno.Container is not found. " +
"The problem is likely in the fact that JVM IR is NOT enabled for kapt stub generation.",
element,
)
return true
}
val expected = "{value()={@example.Anno(\"1\"), @example.Anno(\"2\")}}"
val actual = containerAnnotation.elementValues.toString()
if (actual != expected) {
processingEnv.messager.printMessage(
Diagnostic.Kind.ERROR,
"Repeatable annotation values are incorrect: $actual"
)
}
return true
}
override fun getSupportedSourceVersion(): SourceVersion =
SourceVersion.RELEASE_6
override fun getSupportedAnnotationTypes(): Set<String> =
setOf("example.ToBeChecked")
}
@@ -0,0 +1,11 @@
package example
annotation class ToBeChecked
@Repeatable
annotation class Anno(val value: String)
@ToBeChecked
@Anno("1")
@Anno("2")
public class TestClass
@@ -0,0 +1,17 @@
plugins {
id "java"
id "org.jetbrains.kotlin.jvm"
id "org.jetbrains.kotlin.kapt"
}
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
implementation(project(":processor"))
kapt(project(":processor"))
}
compileKotlin.kotlinOptions.allWarningsAsErrors = true
@@ -0,0 +1,11 @@
plugins {
id "java"
id "org.jetbrains.kotlin.jvm"
}
repositories {
mavenLocal()
mavenCentral()
}
compileKotlin.kotlinOptions.allWarningsAsErrors = true
@@ -0,0 +1,34 @@
package processor
import javax.annotation.processing.AbstractProcessor
import javax.annotation.processing.RoundEnvironment
import javax.lang.model.SourceVersion
import javax.lang.model.element.TypeElement
import javax.tools.Diagnostic
class CheckAnnotationIsNotRepeated : AbstractProcessor() {
override fun process(annotations: MutableSet<out TypeElement>?, roundEnv: RoundEnvironment): Boolean {
val element = processingEnv.elementUtils.getTypeElement("example.TestClass")
val containerAnnotation = element.annotationMirrors.singleOrNull {
it.annotationType.asElement().simpleName.contentEquals("Container") &&
it.annotationType.asElement().enclosingElement.simpleName.contentEquals("Anno")
}
if (containerAnnotation != null) {
processingEnv.messager.printMessage(
Diagnostic.Kind.ERROR,
"Repeatable container annotation class example.Anno.Container is found. " +
"The problem is likely in the fact that JVM IR is NOT DISABLED for kapt stub generation " +
"even though kapt.use.jvm.ir=false is specified in gradle.properties.",
element,
)
}
return true
}
override fun getSupportedSourceVersion(): SourceVersion =
SourceVersion.RELEASE_6
override fun getSupportedAnnotationTypes(): Set<String> =
setOf("example.ToBeChecked")
}
@@ -0,0 +1,11 @@
package example
annotation class ToBeChecked
@Repeatable
annotation class Anno(val value: String)
@ToBeChecked
@Anno("1")
@Anno("2")
public class TestClass