Kapt+JVM_IR: generate annotation property initializers

#KT-55490 Fixed
This commit is contained in:
Alexander Udalov
2022-12-28 22:31:28 +01:00
parent 1a5aedd27a
commit 549bfb2d9e
3 changed files with 20 additions and 19 deletions
@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
import org.jetbrains.kotlin.psi2ir.pureEndOffsetOrUndefined
import org.jetbrains.kotlin.psi2ir.pureStartOffsetOrUndefined
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.hasBackingField
class PropertyGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGeneratorExtension(declarationGenerator) {
@@ -76,8 +77,11 @@ class PropertyGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
): IrProperty {
val irPropertyType = propertyDescriptor.type.toIrType()
return generateSyntheticPropertyWithInitializer(ktDeclarationContainer, propertyDescriptor, generateSyntheticAccessors) {
if (irValueParameter == null || context.configuration.skipBodies) null
else {
if (irValueParameter == null)
null
else if (context.configuration.skipBodies && !DescriptorUtils.isAnnotationClass(propertyDescriptor.containingDeclaration))
null
else
context.irFactory.createExpressionBody(
IrGetValueImpl(
ktDeclarationContainer.startOffsetSkippingComments, ktDeclarationContainer.endOffset,
@@ -86,7 +90,6 @@ class PropertyGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
IrStatementOrigin.INITIALIZE_PROPERTY_FROM_PARAMETER
)
)
}
}
}
@@ -1,5 +1,3 @@
// IGNORE_BACKEND: JVM_IR
annotation class Anno1
enum class Colors { WHITE, BLACK }
annotation class Anno2(
@@ -1,13 +1,13 @@
@kotlin.Metadata()
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
@kotlin.Metadata()
public abstract @interface Anno1 {
}
////////////////////
@kotlin.Metadata()
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
@kotlin.Metadata()
public abstract @interface Anno2 {
public abstract int i() default 5;
@@ -32,8 +32,8 @@ public abstract @interface Anno2 {
////////////////////
@kotlin.Metadata()
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
@kotlin.Metadata()
public abstract @interface Anno3 {
public abstract java.lang.String value();
@@ -67,10 +67,10 @@ public enum Enum1 {
////////////////////
@kotlin.Metadata()
@Anno3(value = "value")
@Anno2(a = @Anno1(), clazz = TestAnno.class, classes = {TestAnno.class, Anno1.class})
@Anno1()
@Anno2(a = @Anno1(), clazz = TestAnno.class, classes = {TestAnno.class, Anno1.class})
@Anno3(value = "value")
@kotlin.Metadata()
public final class TestAnno {
public TestAnno() {
@@ -81,12 +81,12 @@ public final class TestAnno {
////////////////////
@kotlin.Metadata()
@Anno2(i = 6, s = "BCD", ii = {4, 5, 6}, ss = {"Z", "X"}, a = @Anno1(), color = Colors.WHITE, colors = {Colors.WHITE}, clazz = TestAnno.class, classes = {TestAnno.class, Anno1.class})
@Anno3(value = "value")
@Anno2(i = 6, s = "BCD", ii = {4, 5, 6}, ss = {"Z", "X"}, a = @Anno1(), color = Colors.WHITE, colors = {Colors.WHITE}, clazz = TestAnno.class, classes = {TestAnno.class, Anno1.class})
@kotlin.Metadata()
public final class TestAnno2 {
@org.jetbrains.annotations.NotNull()
@Anno3(value = "field")
@org.jetbrains.annotations.NotNull()
private java.lang.String b = "property initializer";
public TestAnno2() {
@@ -94,20 +94,20 @@ public final class TestAnno2 {
}
@Anno1()
public final void a(@org.jetbrains.annotations.NotNull()
@Anno3(value = "param-pam-pam")
public final void a(@Anno3(value = "param-pam-pam")
@org.jetbrains.annotations.NotNull()
java.lang.String param) {
}
@org.jetbrains.annotations.NotNull()
@Anno3(value = "getter")
@org.jetbrains.annotations.NotNull()
public final java.lang.String getB() {
return null;
}
@Anno3(value = "setter")
public final void setB(@org.jetbrains.annotations.NotNull()
@Anno3(value = "setparam")
public final void setB(@Anno3(value = "setparam")
@org.jetbrains.annotations.NotNull()
java.lang.String p0) {
}