From fc2c0eea27629da2343b57594cfe330f3a5b040b Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 9 Dec 2021 00:59:20 +0100 Subject: [PATCH] JVM IR: generate source-retained annotations in kapt mode #KT-49682 --- .../backend/jvm/codegen/AnnotationCodegen.kt | 2 +- .../testData/converter/errorSuperclass.kt | 2 - .../testData/converter/errorSuperclass_ir.txt | 40 +++++++++++ .../testData/converter/ignoredMembers.kt | 2 - .../testData/converter/kt14997.kt | 1 - .../testData/converter/kt14997_ir.txt | 66 +++++++++++++++++++ .../testData/converter/kt28306.kt | 1 - .../testData/converter/kt28306_ir.txt | 43 ++++++++++++ 8 files changed, 150 insertions(+), 7 deletions(-) create mode 100644 plugins/kapt3/kapt3-compiler/testData/converter/errorSuperclass_ir.txt create mode 100644 plugins/kapt3/kapt3-compiler/testData/converter/kt14997_ir.txt create mode 100644 plugins/kapt3/kapt3-compiler/testData/converter/kt28306_ir.txt diff --git a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/AnnotationCodegen.kt b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/AnnotationCodegen.kt index 868b55b609c..f54ee5ff4f2 100644 --- a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/AnnotationCodegen.kt +++ b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/AnnotationCodegen.kt @@ -186,7 +186,7 @@ abstract class AnnotationCodegen( private fun genAnnotation(annotation: IrConstructorCall, path: TypePath?, isTypeAnnotation: Boolean): String? { val annotationClass = annotation.annotationClass val retentionPolicy = getRetentionPolicy(annotationClass) - if (retentionPolicy == RetentionPolicy.SOURCE) return null + if (retentionPolicy == RetentionPolicy.SOURCE && !context.state.classBuilderMode.generateSourceRetentionAnnotations) return null // FlexibleNullability is an internal annotation, used only inside the compiler if (annotationClass.fqNameWhenAvailable in internalAnnotations) return null diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/errorSuperclass.kt b/plugins/kapt3/kapt3-compiler/testData/converter/errorSuperclass.kt index 2fe16c67acb..ec2c46e01c2 100644 --- a/plugins/kapt3/kapt3-compiler/testData/converter/errorSuperclass.kt +++ b/plugins/kapt3/kapt3-compiler/testData/converter/errorSuperclass.kt @@ -1,5 +1,3 @@ -// IGNORE_BACKEND: JVM_IR - package test internal annotation class Anno diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/errorSuperclass_ir.txt b/plugins/kapt3/kapt3-compiler/testData/converter/errorSuperclass_ir.txt new file mode 100644 index 00000000000..a8d95c9bca3 --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/errorSuperclass_ir.txt @@ -0,0 +1,40 @@ +package test; + +import java.lang.System; + +@kotlin.Metadata() +@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) +public abstract @interface Anno { +} + +//////////////////// + +package test; + +import java.lang.System; + +@kotlin.Suppress(names = {"UNRESOLVED_REFERENCE"}) +@kotlin.Metadata() +@Anno() +public final class ClassWithParent implements java.lang.CharSequence { + + public ClassWithParent() { + super(); + } + + @java.lang.Override() + public abstract char get(int index); + + @java.lang.Override() + public abstract int getLength(); + + @java.lang.Override() + public final char charAt(int index) { + return '\u0000'; + } + + @java.lang.Override() + public final int length() { + return 0; + } +} diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/ignoredMembers.kt b/plugins/kapt3/kapt3-compiler/testData/converter/ignoredMembers.kt index 6dcc76ab357..10e1b56c7d2 100644 --- a/plugins/kapt3/kapt3-compiler/testData/converter/ignoredMembers.kt +++ b/plugins/kapt3/kapt3-compiler/testData/converter/ignoredMembers.kt @@ -1,5 +1,3 @@ -// IGNORE_BACKEND: JVM_IR - import kotlinx.kapt.* class Test { diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/kt14997.kt b/plugins/kapt3/kapt3-compiler/testData/converter/kt14997.kt index 04d3c2d9b25..8a46ebb27c0 100644 --- a/plugins/kapt3/kapt3-compiler/testData/converter/kt14997.kt +++ b/plugins/kapt3/kapt3-compiler/testData/converter/kt14997.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND: JVM_IR // WITH_STDLIB @file:Suppress("AMBIGUOUS_ANONYMOUS_TYPE_INFERRED") diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/kt14997_ir.txt b/plugins/kapt3/kapt3-compiler/testData/converter/kt14997_ir.txt new file mode 100644 index 00000000000..15641ffef49 --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/kt14997_ir.txt @@ -0,0 +1,66 @@ +import java.lang.System; + +@kotlin.Metadata() +public class CrashMe { + @org.jetbrains.annotations.NotNull() + private final java.lang.Runnable notReally = null; + + public CrashMe() { + super(); + } +} + +//////////////////// + + +import java.lang.System; + +@kotlin.Suppress(names = {"AMBIGUOUS_ANONYMOUS_TYPE_INFERRED"}) +@kotlin.Metadata() +public final class Kt14997Kt { + + public Kt14997Kt() { + super(); + } + + @org.jetbrains.annotations.NotNull() + public static final java.lang.Runnable a() { + return null; + } + + @org.jetbrains.annotations.NotNull() + public static final java.lang.Object b() { + return null; + } + + @org.jetbrains.annotations.NotNull() + public static final java.lang.Object c() { + return null; + } + + @org.jetbrains.annotations.NotNull() + public static final java.util.List d() { + return null; + } + + @org.jetbrains.annotations.NotNull() + public static final java.lang.Runnable[] e() { + return null; + } + + public static final void e1(@org.jetbrains.annotations.NotNull() + java.lang.CharSequence[] a) { + } + + public static final void e2(@org.jetbrains.annotations.NotNull() + java.lang.Object[] a) { + } + + public static final void e3(@org.jetbrains.annotations.NotNull() + java.lang.CharSequence[] a) { + } + + public static final void e3(@org.jetbrains.annotations.NotNull() + java.lang.Object[] a) { + } +} diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/kt28306.kt b/plugins/kapt3/kapt3-compiler/testData/converter/kt28306.kt index dc8c4dd109e..24758253697 100644 --- a/plugins/kapt3/kapt3-compiler/testData/converter/kt28306.kt +++ b/plugins/kapt3/kapt3-compiler/testData/converter/kt28306.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND: JVM_IR // CORRECT_ERROR_TYPES package foo diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/kt28306_ir.txt b/plugins/kapt3/kapt3-compiler/testData/converter/kt28306_ir.txt new file mode 100644 index 00000000000..20ee870ea6f --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/kt28306_ir.txt @@ -0,0 +1,43 @@ +package foo; + +import java.lang.System; + +@kotlin.Metadata() +public abstract interface InterfaceWithDefaults { + + public abstract void foo(); + + @kotlin.Metadata() + public static final class DefaultImpls { + + public DefaultImpls() { + super(); + } + + public static void foo(@org.jetbrains.annotations.NotNull() + foo.InterfaceWithDefaults $this) { + } + } +} + +//////////////////// + +package foo; + +import java.lang.System; + +@kotlin.Metadata() +public abstract interface SubInterface extends foo.InterfaceWithDefaults { + + @kotlin.Metadata() + public static final class DefaultImpls { + + public DefaultImpls() { + super(); + } + + public static void foo(@org.jetbrains.annotations.NotNull() + foo.SubInterface $this) { + } + } +}