diff --git a/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt b/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt index f25e1f73113..1be0a47b2f8 100644 --- a/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt +++ b/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt @@ -42,6 +42,7 @@ import org.jetbrains.kotlin.kapt3.javac.KaptJavaFileObject import org.jetbrains.kotlin.kapt3.javac.KaptTreeMaker import org.jetbrains.kotlin.kapt3.stubs.ErrorTypeCorrector.TypeKind.* import org.jetbrains.kotlin.kapt3.util.* +import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.load.java.sources.JavaSourceElement import org.jetbrains.kotlin.load.kotlin.TypeMappingMode import org.jetbrains.kotlin.name.FqName @@ -881,8 +882,8 @@ class ClassFileToSourceStubConverter(val kaptContext: KaptContextForStubGenerati if (isIgnored(method.invisibleAnnotations)) return null val descriptor = kaptContext.origins[method]?.descriptor as? CallableDescriptor ?: return null - val isAnnotationHolderForProperty = descriptor is PropertyDescriptor && isSynthetic(method.access) - && isStatic(method.access) && method.name.endsWith("\$annotations") + val isAnnotationHolderForProperty = + isSynthetic(method.access) && isStatic(method.access) && method.name.endsWith(JvmAbi.ANNOTATED_PROPERTY_METHOD_NAME_SUFFIX) if (isSynthetic(method.access) && !isAnnotationHolderForProperty) return null diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/annotations2_ir.txt b/plugins/kapt3/kapt3-compiler/testData/converter/annotations2_ir.txt new file mode 100644 index 00000000000..1a155e93137 --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/annotations2_ir.txt @@ -0,0 +1,117 @@ +package test; + +import java.lang.System; + +@kotlin.Metadata() +@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) +@Anno(value = "anno-class") +public abstract @interface Anno { + + public abstract java.lang.String value(); +} + +//////////////////// + +package test; + +import java.lang.System; + +@kotlin.jvm.JvmName(name = "AnnotationsTest") +@kotlin.Metadata() +public final class AnnotationsTest { + + public AnnotationsTest() { + super(); + } + + @Anno(value = "top-level-fun") + public static final void topLevelFun(@org.jetbrains.annotations.NotNull() + @Anno(value = "top-level-fun-receiver") + java.lang.String $this$topLevelFun) { + } + + @Anno(value = "top-level-val") + @java.lang.Deprecated() + public static void getTopLevelVal$annotations(int p0) { + } + + @org.jetbrains.annotations.NotNull() + public static final java.lang.String getTopLevelVal(@Anno(value = "top-level-val-receiver") + int $this$topLevelVal) { + return null; + } +} + +//////////////////// + +package test; + +import java.lang.System; + +@kotlin.Metadata() +@Anno(value = "enum") +public enum Enum { + @Anno(value = "white") + /*public static final*/ WHITE /* = new Enum() */, + @Anno(value = "black") + /*public static final*/ BLACK /* = new Enum() */; + private final int x = 0; + + @Anno(value = "enum-constructor") + Enum(@Anno(value = "x") + int x) { + } + + public final int getX() { + return 0; + } +} + +//////////////////// + +package test; + +import java.lang.System; + +@kotlin.Metadata() +@Anno(value = "clazz") +public abstract class Test { + @org.jetbrains.annotations.NotNull() + private java.lang.String v; + + @Anno(value = "test-constructor") + protected Test(@org.jetbrains.annotations.NotNull() + @Anno(value = "v-param") + java.lang.String v) { + super(); + } + + @org.jetbrains.annotations.NotNull() + @Anno(value = "v-get") + public final java.lang.String getV() { + return null; + } + + @Anno(value = "v-set") + public final void setV(@org.jetbrains.annotations.NotNull() + @Anno(value = "v-setparam") + java.lang.String p0) { + } + + @org.jetbrains.annotations.NotNull() + @Anno(value = "abstract-method") + public abstract java.lang.String abstractMethod(); + + @org.jetbrains.annotations.NotNull() + public abstract java.lang.String getAbstractVal(); + + @Anno(value = "abstract-val") + @java.lang.Deprecated() + public static void getAbstractVal$annotations() { + } + + @Anno(value = "v-property") + @java.lang.Deprecated() + public static void getV$annotations() { + } +} diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/annotationsWithTargets.kt b/plugins/kapt3/kapt3-compiler/testData/converter/annotationsWithTargets.kt index f8be14f4233..ff1a482bd7c 100644 --- a/plugins/kapt3/kapt3-compiler/testData/converter/annotationsWithTargets.kt +++ b/plugins/kapt3/kapt3-compiler/testData/converter/annotationsWithTargets.kt @@ -1,5 +1,3 @@ -// IGNORE_BACKEND: JVM_IR - @Target(AnnotationTarget.FIELD) annotation class FieldAnno diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/annotations_ir.txt b/plugins/kapt3/kapt3-compiler/testData/converter/annotations_ir.txt new file mode 100644 index 00000000000..8a33f84aac1 --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/annotations_ir.txt @@ -0,0 +1,132 @@ +import java.lang.System; + +@kotlin.Metadata() +@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) +public abstract @interface Anno1 { +} + +//////////////////// + + +import java.lang.System; + +@kotlin.Metadata() +@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) +public abstract @interface Anno2 { + + public abstract int i() default 5; + + public abstract java.lang.String s() default "ABC"; + + public abstract int[] ii() default {1, 2, 3}; + + public abstract java.lang.String[] ss() default {"A", "B"}; + + public abstract Anno1 a(); + + public abstract Colors color() default Colors.BLACK; + + public abstract Colors[] colors() default {Colors.BLACK, Colors.WHITE}; + + public abstract java.lang.Class clazz(); + + public abstract java.lang.Class[] classes(); +} + +//////////////////// + + +import java.lang.System; + +@kotlin.Metadata() +@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) +public abstract @interface Anno3 { + + public abstract java.lang.String value(); +} + +//////////////////// + + +import java.lang.System; + +@kotlin.Metadata() +public enum Colors { + /*public static final*/ WHITE /* = new Colors() */, + /*public static final*/ BLACK /* = new Colors() */; + + Colors() { + } +} + +//////////////////// + + +import java.lang.System; + +@kotlin.Metadata() +public enum Enum1 { + /*public static final*/ BLACK /* = new Enum1() */, + @Anno1() + /*public static final*/ WHITE /* = new Enum1() */; + + Enum1() { + } +} + +//////////////////// + + +import java.lang.System; + +@kotlin.Metadata() +@Anno3(value = "value") +@Anno2(a = @Anno1(), clazz = TestAnno.class, classes = {TestAnno.class, Anno1.class}) +@Anno1() +public final class TestAnno { + + public TestAnno() { + super(); + } +} + +//////////////////// + + +import java.lang.System; + +@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") +public final class TestAnno2 { + @org.jetbrains.annotations.NotNull() + @Anno3(value = "field") + private java.lang.String b = "property initializer"; + + public TestAnno2() { + super(); + } + + @Anno1() + public final void a(@org.jetbrains.annotations.NotNull() + @Anno3(value = "param-pam-pam") + java.lang.String param) { + } + + @org.jetbrains.annotations.NotNull() + @Anno3(value = "getter") + public final java.lang.String getB() { + return null; + } + + @Anno3(value = "setter") + public final void setB(@org.jetbrains.annotations.NotNull() + @Anno3(value = "setparam") + java.lang.String p0) { + } + + @Anno3(value = "property") + @java.lang.Deprecated() + public static void getB$annotations() { + } +} diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/commentsRemoved.kt b/plugins/kapt3/kapt3-compiler/testData/converter/commentsRemoved.kt index b2d232579d4..1af404a1d2b 100644 --- a/plugins/kapt3/kapt3-compiler/testData/converter/commentsRemoved.kt +++ b/plugins/kapt3/kapt3-compiler/testData/converter/commentsRemoved.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND: JVM_IR // !KEEP_KDOC_COMMENTS_IN_STUBS /** Test. */ class Test { diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/commentsRemoved_ir.txt b/plugins/kapt3/kapt3-compiler/testData/converter/commentsRemoved_ir.txt new file mode 100644 index 00000000000..0be1d8c1f74 --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/commentsRemoved_ir.txt @@ -0,0 +1,153 @@ +import java.lang.System; + +@kotlin.Metadata() +@java.lang.annotation.Target(value = {}) +@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) +@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.PROPERTY}) +public abstract @interface Anno { +} + +//////////////////// + + +import java.lang.System; + +@kotlin.Metadata() +public enum EnumError { + /*public static final*/ One /* = new EnumError() */, + /*public static final*/ Two /* = new EnumError() */; + + EnumError() { + } + + @org.jetbrains.annotations.NotNull() + public abstract java.lang.String doIt(); +} + +//////////////////// + + +import java.lang.System; + +@kotlin.Metadata() +public final class Obj { + @org.jetbrains.annotations.NotNull() + public static final Obj INSTANCE = null; + + private Obj() { + super(); + } +} + +//////////////////// + + +import java.lang.System; + +@kotlin.Metadata() +public final class Test { + @org.jetbrains.annotations.NotNull() + public final java.lang.String prop = ""; + @org.jetbrains.annotations.NotNull() + private final java.lang.String prop2 = ""; + + public Test() { + super(); + } + + public final void method() { + } + + public final void method(int a) { + } + + public final void method(@org.jetbrains.annotations.NotNull() + java.lang.String a) { + } + + @org.jetbrains.annotations.NotNull() + public final java.lang.String getProp2() { + return null; + } + + @org.jetbrains.annotations.NotNull() + public final java.lang.String getProp3() { + return null; + } + + public final void setProp3(@org.jetbrains.annotations.NotNull() + java.lang.String v) { + } + + @Anno() + @java.lang.Deprecated() + public static void getProp2$annotations() { + } +} + +//////////////////// + + +import java.lang.System; + +@kotlin.Metadata() +public final class Test2 { + @org.jetbrains.annotations.NotNull() + private final java.lang.String a = null; + + public Test2(@org.jetbrains.annotations.NotNull() + java.lang.String a) { + super(); + } + + @org.jetbrains.annotations.NotNull() + public final java.lang.String getA() { + return null; + } +} + +//////////////////// + + +import java.lang.System; + +@kotlin.Metadata() +public final class Test3 { + @org.jetbrains.annotations.NotNull() + private final java.lang.String a = null; + + protected Test3(@org.jetbrains.annotations.NotNull() + java.lang.String a) { + super(); + } + + @org.jetbrains.annotations.NotNull() + public final java.lang.String getA() { + return null; + } +} + +//////////////////// + + +import java.lang.System; + +@kotlin.Metadata() +public final class Test4 { + + public Test4() { + super(); + } + + public final void method() { + } +} + +//////////////////// + + +import java.lang.System; + +@kotlin.Metadata() +public abstract interface TestComponent { +} diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/comments_ir.txt b/plugins/kapt3/kapt3-compiler/testData/converter/comments_ir.txt new file mode 100644 index 00000000000..0ad7403700a --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/comments_ir.txt @@ -0,0 +1,196 @@ +import java.lang.System; + +@kotlin.Metadata() +@java.lang.annotation.Target(value = {}) +@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) +@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.PROPERTY}) +public abstract @interface Anno { +} + +//////////////////// + + +import java.lang.System; + +@kotlin.Metadata() +public enum EnumError { + /*public static final*/ One /* = new EnumError() */, + /*public static final*/ Two /* = new EnumError() */; + + EnumError() { + } + + @org.jetbrains.annotations.NotNull() + public abstract java.lang.String doIt(); +} + +//////////////////// + + +import java.lang.System; + +/** + * Obj. + */ +@kotlin.Metadata() +public final class Obj { + @org.jetbrains.annotations.NotNull() + public static final Obj INSTANCE = null; + + private Obj() { + super(); + } +} + +//////////////////// + + +import java.lang.System; + +/** + * Test. + */ +@kotlin.Metadata() +public final class Test { + + /** + * prop. + */ + @org.jetbrains.annotations.NotNull() + public final java.lang.String prop = ""; + + /** + * prop2. + */ + @org.jetbrains.annotations.NotNull() + private final java.lang.String prop2 = ""; + + public Test() { + super(); + } + + /** + * method(). + */ + public final void method() { + } + + /** + * method(int). + */ + public final void method(int a) { + } + + /** + * method(String). + */ + public final void method(@org.jetbrains.annotations.NotNull() + java.lang.String a) { + } + + @org.jetbrains.annotations.NotNull() + public final java.lang.String getProp2() { + return null; + } + + /** + * get. + */ + @org.jetbrains.annotations.NotNull() + public final java.lang.String getProp3() { + return null; + } + + /** + * set. + */ + public final void setProp3(@org.jetbrains.annotations.NotNull() + java.lang.String v) { + } + + /** + * prop2. + */ + @Anno() + @java.lang.Deprecated() + public static void getProp2$annotations() { + } +} + +//////////////////// + + +import java.lang.System; + +/** + * Test2 + * Multiline + * documentation. + */ +@kotlin.Metadata() +public final class Test2 { + @org.jetbrains.annotations.NotNull() + private final java.lang.String a = null; + + public Test2(@org.jetbrains.annotations.NotNull() + java.lang.String a) { + super(); + } + + @org.jetbrains.annotations.NotNull() + public final java.lang.String getA() { + return null; + } +} + +//////////////////// + + +import java.lang.System; + +/** + * constructor. + */ +@kotlin.Metadata() +public final class Test3 { + @org.jetbrains.annotations.NotNull() + private final java.lang.String a = null; + + protected Test3(@org.jetbrains.annotations.NotNull() + java.lang.String a) { + super(); + } + + @org.jetbrains.annotations.NotNull() + public final java.lang.String getA() { + return null; + } +} + +//////////////////// + + +import java.lang.System; + +@kotlin.Metadata() +public final class Test4 { + + public Test4() { + super(); + } + + public final void method() { + } +} + +//////////////////// + + +import java.lang.System; + +/** + * `/ * Failure * /` + */ +@kotlin.Metadata() +public abstract interface TestComponent { +} diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/deprecated.kt b/plugins/kapt3/kapt3-compiler/testData/converter/deprecated.kt index 1dfbc1fce60..3c8ac6f28c2 100644 --- a/plugins/kapt3/kapt3-compiler/testData/converter/deprecated.kt +++ b/plugins/kapt3/kapt3-compiler/testData/converter/deprecated.kt @@ -1,5 +1,3 @@ -// IGNORE_BACKEND: JVM_IR - package deprecated @Deprecated("Deprecated annotation") diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/deprecated_ir.txt b/plugins/kapt3/kapt3-compiler/testData/converter/deprecated_ir.txt new file mode 100644 index 00000000000..d400a79971c --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/deprecated_ir.txt @@ -0,0 +1,49 @@ +package deprecated; + +import java.lang.System; + +@kotlin.Metadata() +@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) +@java.lang.Deprecated() +public abstract @interface Anno { +} + +//////////////////// + +package deprecated; + +import java.lang.System; + +@kotlin.Metadata() +@Anno() +@java.lang.Deprecated() +public final class Foo { + @java.lang.Deprecated() + private final int prop = 0; + + public Foo() { + super(); + } + + @java.lang.Deprecated() + public final void foo(int a) { + } + + @java.lang.Deprecated() + public final int getProp() { + return 0; + } + + @java.lang.Deprecated() + public final int getFoo() { + return 0; + } + + @java.lang.Deprecated() + public final void setFoo(int value) { + } + + @java.lang.Deprecated() + public static void getProp$annotations() { + } +} diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/jvmStatic.kt b/plugins/kapt3/kapt3-compiler/testData/converter/jvmStatic.kt index bb4a4191a67..dc6d864f1cf 100644 --- a/plugins/kapt3/kapt3-compiler/testData/converter/jvmStatic.kt +++ b/plugins/kapt3/kapt3-compiler/testData/converter/jvmStatic.kt @@ -1,5 +1,3 @@ -// IGNORE_BACKEND: JVM_IR - class JvmStaticTest { companion object { @JvmStatic diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/jvmStaticFieldInParent.kt b/plugins/kapt3/kapt3-compiler/testData/converter/jvmStaticFieldInParent.kt index 8809cf62b21..621c5c1cb7a 100644 --- a/plugins/kapt3/kapt3-compiler/testData/converter/jvmStaticFieldInParent.kt +++ b/plugins/kapt3/kapt3-compiler/testData/converter/jvmStaticFieldInParent.kt @@ -1,5 +1,3 @@ -// IGNORE_BACKEND: JVM_IR - class Test { companion object A { @JvmStatic diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/jvmStaticFieldInParent_ir.txt b/plugins/kapt3/kapt3-compiler/testData/converter/jvmStaticFieldInParent_ir.txt new file mode 100644 index 00000000000..e5d3defecc8 --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/jvmStaticFieldInParent_ir.txt @@ -0,0 +1,36 @@ +import java.lang.System; + +@kotlin.Metadata() +public final class Test { + @org.jetbrains.annotations.NotNull() + private static final java.lang.String test = ""; + @org.jetbrains.annotations.NotNull() + public static final Test.A A = null; + + public Test() { + super(); + } + + @org.jetbrains.annotations.NotNull() + public static final java.lang.String getTest() { + return null; + } + + @kotlin.Metadata() + public static final class A { + + private A() { + super(); + } + + @org.jetbrains.annotations.NotNull() + public final java.lang.String getTest() { + return null; + } + + @kotlin.jvm.JvmStatic() + @java.lang.Deprecated() + public static void getTest$annotations() { + } + } +} diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/jvmStatic_ir.txt b/plugins/kapt3/kapt3-compiler/testData/converter/jvmStatic_ir.txt new file mode 100644 index 00000000000..49a8f654546 --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/jvmStatic_ir.txt @@ -0,0 +1,70 @@ +import java.lang.System; + +@kotlin.Metadata() +public abstract interface FooComponent { + @org.jetbrains.annotations.NotNull() + public static final FooComponent.Companion Companion = null; + + @org.jetbrains.annotations.NotNull() + @kotlin.jvm.JvmStatic() + public static java.lang.String create(@org.jetbrains.annotations.NotNull() + java.lang.String context) { + return null; + } + + @kotlin.Metadata() + public static final class Companion { + + private Companion() { + super(); + } + + @org.jetbrains.annotations.NotNull() + @kotlin.jvm.JvmStatic() + public final java.lang.String create(@org.jetbrains.annotations.NotNull() + java.lang.String context) { + return null; + } + } +} + +//////////////////// + + +import java.lang.System; + +@kotlin.Metadata() +public final class JvmStaticTest { + private static final int one = 1; + public static final int two = 2; + public static final char c = 'C'; + public final byte three = (byte)3; + public final char d = 'D'; + @org.jetbrains.annotations.NotNull() + public static final JvmStaticTest.Companion Companion = null; + + public JvmStaticTest() { + super(); + } + + public static final int getOne() { + return 0; + } + + @kotlin.Metadata() + public static final class Companion { + + private Companion() { + super(); + } + + public final int getOne() { + return 0; + } + + @kotlin.jvm.JvmStatic() + @java.lang.Deprecated() + public static void getOne$annotations() { + } + } +} diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/propertyAnnotations.kt b/plugins/kapt3/kapt3-compiler/testData/converter/propertyAnnotations.kt index 9f7c5216086..6587e068041 100644 --- a/plugins/kapt3/kapt3-compiler/testData/converter/propertyAnnotations.kt +++ b/plugins/kapt3/kapt3-compiler/testData/converter/propertyAnnotations.kt @@ -1,5 +1,3 @@ -// IGNORE_BACKEND: JVM_IR - annotation class Anno @Target(AnnotationTarget.PROPERTY, AnnotationTarget.CLASS)