JVM IR: generate source-retained annotations in kapt mode

#KT-49682
This commit is contained in:
Alexander Udalov
2021-12-09 00:59:20 +01:00
parent 1df2851611
commit fc2c0eea27
8 changed files with 150 additions and 7 deletions
@@ -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
@@ -1,5 +1,3 @@
// IGNORE_BACKEND: JVM_IR
package test
internal annotation class Anno
@@ -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;
}
}
@@ -1,5 +1,3 @@
// IGNORE_BACKEND: JVM_IR
import kotlinx.kapt.*
class Test {
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JVM_IR
// WITH_STDLIB
@file:Suppress("AMBIGUOUS_ANONYMOUS_TYPE_INFERRED")
@@ -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<java.lang.Runnable> 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) {
}
}
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JVM_IR
// CORRECT_ERROR_TYPES
package foo
@@ -0,0 +1,43 @@
package foo;
import java.lang.System;
@kotlin.Metadata()
public abstract interface InterfaceWithDefaults<T extends java.lang.Object> {
public abstract void foo();
@kotlin.Metadata()
public static final class DefaultImpls {
public DefaultImpls() {
super();
}
public static <T extends java.lang.Object>void foo(@org.jetbrains.annotations.NotNull()
foo.InterfaceWithDefaults<T> $this) {
}
}
}
////////////////////
package foo;
import java.lang.System;
@kotlin.Metadata()
public abstract interface SubInterface<T extends java.lang.Object> extends foo.InterfaceWithDefaults<T> {
@kotlin.Metadata()
public static final class DefaultImpls {
public DefaultImpls() {
super();
}
public static <T extends java.lang.Object>void foo(@org.jetbrains.annotations.NotNull()
foo.SubInterface<T> $this) {
}
}
}