diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/complex.kt b/compiler/testData/codegen/asmLike/typeAnnotations/complex.kt index f04b736344c..1eaf283f7a6 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/complex.kt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/complex.kt @@ -1,5 +1,5 @@ // KOTLIN_CONFIGURATION_FLAGS: +JVM.EMIT_JVM_TYPE_ANNOTATIONS -// TYPE_ANNOTATIONS +// RENDER_ANNOTATIONS // TARGET_BACKEND: JVM // JVM_TARGET: 1.8 package foo diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/complex.txt b/compiler/testData/codegen/asmLike/typeAnnotations/complex.txt index 49ec8e22f4a..603cf4b158b 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/complex.txt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/complex.txt @@ -24,8 +24,10 @@ public final class foo/Kotlin : java/lang/Object { public final void foo(foo.Bar s) @Lfoo/Ann;([]) : METHOD_FORMAL_PARAMETER 0, null @Lfoo/Ann2;([]) : METHOD_FORMAL_PARAMETER 0, 0; + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 public final foo.Bar foo() + @Lorg/jetbrains/annotations/Nullable;([]) // invisible @Lfoo/Ann;([]) : METHOD_RETURN, null @Lfoo/Ann2;([]) : METHOD_RETURN, 0; @@ -36,8 +38,10 @@ public final class foo/Kotlin : java/lang/Object { @Lfoo/Ann;([]) : METHOD_FORMAL_PARAMETER 0, null @Lfoo/Ann2;([]) : METHOD_FORMAL_PARAMETER 0, [ @Lfoo/Ann3;([]) : METHOD_FORMAL_PARAMETER 0, [0; + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 public final foo.Bar[] fooArray() + @Lorg/jetbrains/annotations/Nullable;([]) // invisible @Lfoo/Ann;([]) : METHOD_RETURN, null @Lfoo/Ann2;([]) : METHOD_RETURN, [ @Lfoo/Ann3;([]) : METHOD_RETURN, [0; @@ -47,8 +51,10 @@ public final class foo/Kotlin : java/lang/Object { @Lfoo/Ann2;([]) : METHOD_FORMAL_PARAMETER 0, [ @Lfoo/Ann3;([]) : METHOD_FORMAL_PARAMETER 0, [[ @Lfoo/Ann4;([]) : METHOD_FORMAL_PARAMETER 0, [[0; + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 public final foo.Bar[][] fooArrayArray() + @Lorg/jetbrains/annotations/Nullable;([]) // invisible @Lfoo/Ann;([]) : METHOD_RETURN, null @Lfoo/Ann2;([]) : METHOD_RETURN, [ @Lfoo/Ann3;([]) : METHOD_RETURN, [[ @@ -57,4 +63,5 @@ public final class foo/Kotlin : java/lang/Object { public final void fooGeneric(foo.Bar s) @Lfoo/Ann;([]) : METHOD_FORMAL_PARAMETER 0, null @Lfoo/Ann2;([]) : METHOD_FORMAL_PARAMETER 0, 0; -} + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 +} \ No newline at end of file diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/constructor.kt b/compiler/testData/codegen/asmLike/typeAnnotations/constructor.kt index 0f2051eefed..c51203d5db2 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/constructor.kt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/constructor.kt @@ -1,5 +1,5 @@ // KOTLIN_CONFIGURATION_FLAGS: +JVM.EMIT_JVM_TYPE_ANNOTATIONS -// TYPE_ANNOTATIONS +// RENDER_ANNOTATIONS // TARGET_BACKEND: JVM // JVM_TARGET: 1.8 package foo diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/constructor.txt b/compiler/testData/codegen/asmLike/typeAnnotations/constructor.txt index ed77e03b280..baf64d15478 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/constructor.txt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/constructor.txt @@ -2,12 +2,15 @@ public final class foo/Kotlin$foo$1 : java/lang/Object { void () public final foo.Kotlin foo() + @Lorg/jetbrains/annotations/NotNull;([]) // invisible } public final class foo/Kotlin : java/lang/Object { public void (java.lang.String s, java.lang.String p) @Lfoo/TypeAnn;([name="1"]) : METHOD_FORMAL_PARAMETER 0, null @Lfoo/TypeAnn;([name="123"]) : METHOD_FORMAL_PARAMETER 1, null + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 1 private void (java.lang.String s) @Lfoo/TypeAnn;([name="private"]) : METHOD_FORMAL_PARAMETER 0, null diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/defaultArgs.kt b/compiler/testData/codegen/asmLike/typeAnnotations/defaultArgs.kt index 8a18676e952..64c2d0a1410 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/defaultArgs.kt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/defaultArgs.kt @@ -1,5 +1,5 @@ // KOTLIN_CONFIGURATION_FLAGS: +JVM.EMIT_JVM_TYPE_ANNOTATIONS -// TYPE_ANNOTATIONS +// RENDER_ANNOTATIONS // TARGET_BACKEND: JVM // JVM_TARGET: 1.8 package foo diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/defaultArgs.txt b/compiler/testData/codegen/asmLike/typeAnnotations/defaultArgs.txt index e61dade1cc9..e5331a0059f 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/defaultArgs.txt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/defaultArgs.txt @@ -2,9 +2,11 @@ public final class foo/Kotlin : java/lang/Object { public void () public final java.lang.Object foo(java.lang.String s, int x) + @Lorg/jetbrains/annotations/Nullable;([]) // invisible @Lfoo/TypeAnn;([name="return"]) : METHOD_RETURN, null @Lfoo/TypeAnn;([name="1"]) : METHOD_FORMAL_PARAMETER 0, null @Lfoo/TypeAnn;([name="2"]) : METHOD_FORMAL_PARAMETER 1, null + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 public static java.lang.Object foo$default(foo.Kotlin p0, java.lang.String p1, int p2, int p3, java.lang.Object p4) } diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/enumClassConstructor.kt b/compiler/testData/codegen/asmLike/typeAnnotations/enumClassConstructor.kt index c034c7a3f2c..d6e8ea3587d 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/enumClassConstructor.kt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/enumClassConstructor.kt @@ -1,6 +1,6 @@ // IGNORE_BACKEND: JVM_IR // KOTLIN_CONFIGURATION_FLAGS: +JVM.EMIT_JVM_TYPE_ANNOTATIONS -// TYPE_ANNOTATIONS +// RENDER_ANNOTATIONS // TARGET_BACKEND: JVM // JVM_TARGET: 1.8 package foo diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/extension.kt b/compiler/testData/codegen/asmLike/typeAnnotations/extension.kt index f099638af77..7099052c911 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/extension.kt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/extension.kt @@ -1,5 +1,5 @@ // KOTLIN_CONFIGURATION_FLAGS: +JVM.EMIT_JVM_TYPE_ANNOTATIONS -// TYPE_ANNOTATIONS +// RENDER_ANNOTATIONS // TARGET_BACKEND: JVM // JVM_TARGET: 1.8 package foo diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/extension.txt b/compiler/testData/codegen/asmLike/typeAnnotations/extension.txt index 88fa86fc73c..6eb5ccd2ec6 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/extension.txt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/extension.txt @@ -4,6 +4,8 @@ public final class foo/Kotlin : java/lang/Object { public final void foo2(java.lang.String $this$foo2, java.lang.String s) @Lfoo/TypeAnn;([name="ext"]) : METHOD_FORMAL_PARAMETER 0, null @Lfoo/TypeAnn;([name="param"]) : METHOD_FORMAL_PARAMETER 1, null + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 1 } public abstract interface foo/TypeAnn : java/lang/Object, java/lang/annotation/Annotation { diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/implicit.kt b/compiler/testData/codegen/asmLike/typeAnnotations/implicit.kt index e9674ff4efa..de18bfe9d7c 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/implicit.kt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/implicit.kt @@ -1,6 +1,6 @@ // IGNORE_BACKEND: JVM_IR // KOTLIN_CONFIGURATION_FLAGS: +JVM.EMIT_JVM_TYPE_ANNOTATIONS -// TYPE_ANNOTATIONS +// RENDER_ANNOTATIONS // TARGET_BACKEND: JVM // JVM_TARGET: 1.8 package foo diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/implicit.txt b/compiler/testData/codegen/asmLike/typeAnnotations/implicit.txt index ed0bb275d32..4144e48dbd1 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/implicit.txt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/implicit.txt @@ -6,6 +6,7 @@ final class foo/Kotlin$foo4$1 : kotlin/jvm/internal/Lambda, kotlin/jvm/functions public java.lang.Object invoke() public final java.lang.String invoke() + @Lorg/jetbrains/annotations/NotNull;([]) // invisible @Lfoo/TypeAnn;([name="2"]) : METHOD_RETURN, null @Lfoo/TypeAnnBinary;([]) : METHOD_RETURN, null // invisible } @@ -14,14 +15,17 @@ public final class foo/Kotlin : java/lang/Object { public void () public final java.lang.String foo2() + @Lorg/jetbrains/annotations/NotNull;([]) // invisible @Lfoo/TypeAnn;([name="2"]) : METHOD_RETURN, null @Lfoo/TypeAnnBinary;([]) : METHOD_RETURN, null // invisible public final java.lang.String foo3() + @Lorg/jetbrains/annotations/NotNull;([]) // invisible @Lfoo/TypeAnn;([name="2"]) : METHOD_RETURN, null @Lfoo/TypeAnnBinary;([]) : METHOD_RETURN, null // invisible public final java.lang.String foo4() + @Lorg/jetbrains/annotations/NotNull;([]) // invisible @Lfoo/TypeAnn;([name="2"]) : METHOD_RETURN, null @Lfoo/TypeAnnBinary;([]) : METHOD_RETURN, null // invisible } diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/innerClassConstructor.kt b/compiler/testData/codegen/asmLike/typeAnnotations/innerClassConstructor.kt index 00ec835fde8..8beb954499a 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/innerClassConstructor.kt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/innerClassConstructor.kt @@ -1,5 +1,5 @@ // KOTLIN_CONFIGURATION_FLAGS: +JVM.EMIT_JVM_TYPE_ANNOTATIONS -// TYPE_ANNOTATIONS +// RENDER_ANNOTATIONS // TARGET_BACKEND: JVM // JVM_TARGET: 1.8 package foo diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/innerClassConstructor.txt b/compiler/testData/codegen/asmLike/typeAnnotations/innerClassConstructor.txt index 761ca9f8578..975a1eca163 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/innerClassConstructor.txt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/innerClassConstructor.txt @@ -3,6 +3,7 @@ public final class foo/Kotlin$Inner : java/lang/Object { public void (foo.Kotlin this$0, java.lang.String s) @Lfoo/TypeAnn;([]) : METHOD_FORMAL_PARAMETER 0, null + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 } public final class foo/Kotlin : java/lang/Object { diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/jvmOverload.kt b/compiler/testData/codegen/asmLike/typeAnnotations/jvmOverload.kt index d81ba3c0c1c..ecf329bca09 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/jvmOverload.kt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/jvmOverload.kt @@ -1,5 +1,5 @@ // KOTLIN_CONFIGURATION_FLAGS: +JVM.EMIT_JVM_TYPE_ANNOTATIONS -// TYPE_ANNOTATIONS +// RENDER_ANNOTATIONS // TARGET_BACKEND: JVM // JVM_TARGET: 1.8 // WITH_RUNTIME diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/jvmOverload.txt b/compiler/testData/codegen/asmLike/typeAnnotations/jvmOverload.txt index 60b02033845..f03f59faafa 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/jvmOverload.txt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/jvmOverload.txt @@ -2,15 +2,23 @@ public final class foo/FooClass : java/lang/Object { public void () public final java.lang.Object foo(java.lang.String s, int x) + @Lkotlin/jvm/JvmOverloads;([]) // invisible + @Lorg/jetbrains/annotations/Nullable;([]) // invisible @Lfoo/TypeAnn;([name="return"]) : METHOD_RETURN, null @Lfoo/TypeAnn;([name="1"]) : METHOD_FORMAL_PARAMETER 0, null @Lfoo/TypeAnn;([name="2"]) : METHOD_FORMAL_PARAMETER 1, null + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 public final java.lang.Object foo(java.lang.String s) + @Lkotlin/jvm/JvmOverloads;([]) // invisible + @Lorg/jetbrains/annotations/Nullable;([]) // invisible @Lfoo/TypeAnn;([name="return"]) : METHOD_RETURN, null @Lfoo/TypeAnn;([name="1"]) : METHOD_FORMAL_PARAMETER 0, null + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 public final java.lang.Object foo() + @Lkotlin/jvm/JvmOverloads;([]) // invisible + @Lorg/jetbrains/annotations/Nullable;([]) // invisible @Lfoo/TypeAnn;([name="return"]) : METHOD_RETURN, null public static java.lang.Object foo$default(foo.FooClass p0, java.lang.String p1, int p2, int p3, java.lang.Object p4) diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/jvmStatic.kt b/compiler/testData/codegen/asmLike/typeAnnotations/jvmStatic.kt index 35a887941af..0cccd8dbdbc 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/jvmStatic.kt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/jvmStatic.kt @@ -1,5 +1,5 @@ // KOTLIN_CONFIGURATION_FLAGS: +JVM.EMIT_JVM_TYPE_ANNOTATIONS -// TYPE_ANNOTATIONS +// RENDER_ANNOTATIONS // TARGET_BACKEND: JVM // JVM_TARGET: 1.8 // WITH_RUNTIME diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/jvmStatic.txt b/compiler/testData/codegen/asmLike/typeAnnotations/jvmStatic.txt index bcd7bfea7b8..60542318cf3 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/jvmStatic.txt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/jvmStatic.txt @@ -1,14 +1,18 @@ public final class foo/Foo : java/lang/Object { public final static foo.Foo INSTANCE + @Lorg/jetbrains/annotations/NotNull;([]) // invisible static void () private void () public final static java.lang.Object foo(java.lang.String s, int x) + @Lkotlin/jvm/JvmStatic;([]) + @Lorg/jetbrains/annotations/Nullable;([]) // invisible @Lfoo/TypeAnn;([name="return"]) : METHOD_RETURN, null @Lfoo/TypeAnn;([name="1"]) : METHOD_FORMAL_PARAMETER 0, null @Lfoo/TypeAnn;([name="2"]) : METHOD_FORMAL_PARAMETER 1, null + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 } public final class foo/FooClass$Companion : java/lang/Object { @@ -17,22 +21,29 @@ public final class foo/FooClass$Companion : java/lang/Object { public void (kotlin.jvm.internal.DefaultConstructorMarker $constructor_marker) public final java.lang.Object foo(java.lang.String s, int x) + @Lkotlin/jvm/JvmStatic;([]) + @Lorg/jetbrains/annotations/Nullable;([]) // invisible @Lfoo/TypeAnn;([name="return"]) : METHOD_RETURN, null @Lfoo/TypeAnn;([name="1"]) : METHOD_FORMAL_PARAMETER 0, null @Lfoo/TypeAnn;([name="2"]) : METHOD_FORMAL_PARAMETER 1, null + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 } public final class foo/FooClass : java/lang/Object { public final static foo.FooClass$Companion Companion + @Lorg/jetbrains/annotations/NotNull;([]) // invisible static void () public void () public final static java.lang.Object foo(java.lang.String s, int x) + @Lkotlin/jvm/JvmStatic;([]) + @Lorg/jetbrains/annotations/Nullable;([]) // invisible @Lfoo/TypeAnn;([name="return"]) : METHOD_RETURN, null @Lfoo/TypeAnn;([name="1"]) : METHOD_FORMAL_PARAMETER 0, null @Lfoo/TypeAnn;([name="2"]) : METHOD_FORMAL_PARAMETER 1, null + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 } public abstract interface foo/TypeAnn : java/lang/Object, java/lang/annotation/Annotation { diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/notYetSupported.kt b/compiler/testData/codegen/asmLike/typeAnnotations/notYetSupported.kt index f9aeb71790b..622e1f5cb3f 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/notYetSupported.kt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/notYetSupported.kt @@ -1,5 +1,5 @@ // KOTLIN_CONFIGURATION_FLAGS: +JVM.EMIT_JVM_TYPE_ANNOTATIONS -// TYPE_ANNOTATIONS +// RENDER_ANNOTATIONS // TARGET_BACKEND: JVM // JVM_TARGET: 1.8 package foo diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/notYetSupported.txt b/compiler/testData/codegen/asmLike/typeAnnotations/notYetSupported.txt index 9aaf0a800a4..3c9c8279537 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/notYetSupported.txt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/notYetSupported.txt @@ -22,26 +22,34 @@ public final class foo/Kotlin : java/lang/Object { public void () public final void foo(foo.Outer$Inner s) + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 public final foo.Outer$Inner foo() + @Lorg/jetbrains/annotations/Nullable;([]) // invisible public final void fooArray(foo.Outer$Inner[] s) @Lfoo/Ann;([]) : METHOD_FORMAL_PARAMETER 0, null + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 public final foo.Outer$Inner[] fooArray() + @Lorg/jetbrains/annotations/Nullable;([]) // invisible @Lfoo/Ann;([]) : METHOD_RETURN, null public final void fooArrayIn(java.lang.Object[] s) @Lfoo/Ann;([]) : METHOD_FORMAL_PARAMETER 0, null + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 public final foo.Outer$Inner[] fooArrayOut() + @Lorg/jetbrains/annotations/Nullable;([]) // invisible @Lfoo/Ann;([]) : METHOD_RETURN, null public final void fooGenericIn(foo.Bar s) @Lfoo/Ann;([]) : METHOD_FORMAL_PARAMETER 0, null + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 public final void fooGenericOut(foo.Bar s) @Lfoo/Ann;([]) : METHOD_FORMAL_PARAMETER 0, null + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 } public final class foo/Outer$Inner : java/lang/Object { diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/property.kt b/compiler/testData/codegen/asmLike/typeAnnotations/property.kt index 2ff5bce5b19..f36abaec3dc 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/property.kt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/property.kt @@ -1,5 +1,5 @@ // KOTLIN_CONFIGURATION_FLAGS: +JVM.EMIT_JVM_TYPE_ANNOTATIONS -// TYPE_ANNOTATIONS +// RENDER_ANNOTATIONS // TARGET_BACKEND: JVM // JVM_TARGET: 1.8 // WITH_RUNTIME diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/property.txt b/compiler/testData/codegen/asmLike/typeAnnotations/property.txt index 8769590a0ed..60edde431c3 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/property.txt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/property.txt @@ -4,40 +4,51 @@ public final class foo/Kotlin$Companion : java/lang/Object { public void (kotlin.jvm.internal.DefaultConstructorMarker $constructor_marker) public final java.lang.String getCompanionVarProperty() + @Lorg/jetbrains/annotations/NotNull;([]) // invisible @Lfoo/TypeAnn;([name="1"]) : METHOD_RETURN, null @Lfoo/TypeAnnBinary;([]) : METHOD_RETURN, null // invisible public final java.lang.String getJvmStatic() + @Lorg/jetbrains/annotations/NotNull;([]) // invisible @Lfoo/TypeAnn;([name="1"]) : METHOD_RETURN, null @Lfoo/TypeAnnBinary;([]) : METHOD_RETURN, null // invisible public static void getJvmStatic$annotations() + @Lkotlin/jvm/JvmStatic;([]) public final void setCompanionVarProperty(java.lang.String ) @Lfoo/TypeAnn;([name="1"]) : METHOD_FORMAL_PARAMETER 0, null @Lfoo/TypeAnnBinary;([]) : METHOD_FORMAL_PARAMETER 0, null // invisible + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 public final void setJvmStatic(java.lang.String ) @Lfoo/TypeAnn;([name="1"]) : METHOD_FORMAL_PARAMETER 0, null @Lfoo/TypeAnnBinary;([]) : METHOD_FORMAL_PARAMETER 0, null // invisible + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 } public final class foo/Kotlin : java/lang/Object { public final static foo.Kotlin$Companion Companion + @Lorg/jetbrains/annotations/NotNull;([]) // invisible private static java.lang.String companionVarProperty + @Lorg/jetbrains/annotations/NotNull;([]) // invisible @Lfoo/TypeAnn;([name="1"]) : FIELD, null @Lfoo/TypeAnnBinary;([]) : FIELD, null // invisible private java.lang.String customSetter + @Lorg/jetbrains/annotations/NotNull;([]) // invisible @Lfoo/TypeAnn;([name="1"]) : FIELD, null @Lfoo/TypeAnnBinary;([]) : FIELD, null // invisible public java.lang.String jvmField + @Lkotlin/jvm/JvmField;([]) // invisible + @Lorg/jetbrains/annotations/NotNull;([]) // invisible @Lfoo/TypeAnn;([name="1"]) : FIELD, null @Lfoo/TypeAnnBinary;([]) : FIELD, null // invisible private static java.lang.String jvmStatic + @Lorg/jetbrains/annotations/NotNull;([]) // invisible @Lfoo/TypeAnn;([name="1"]) : FIELD, null @Lfoo/TypeAnnBinary;([]) : FIELD, null // invisible @@ -46,10 +57,12 @@ public final class foo/Kotlin : java/lang/Object { @Lfoo/TypeAnnBinary;([]) : FIELD, null // invisible private final java.lang.String valProp + @Lorg/jetbrains/annotations/NotNull;([]) // invisible @Lfoo/TypeAnn;([name="1"]) : FIELD, null @Lfoo/TypeAnnBinary;([]) : FIELD, null // invisible private java.lang.String varProp + @Lorg/jetbrains/annotations/NotNull;([]) // invisible @Lfoo/TypeAnn;([name="1"]) : FIELD, null @Lfoo/TypeAnnBinary;([]) : FIELD, null // invisible @@ -70,40 +83,49 @@ public final class foo/Kotlin : java/lang/Object { @Lfoo/TypeAnnBinary;([]) : METHOD_RETURN, null // invisible public final java.lang.String getCustomSetter() + @Lorg/jetbrains/annotations/NotNull;([]) // invisible @Lfoo/TypeAnn;([name="1"]) : METHOD_RETURN, null @Lfoo/TypeAnnBinary;([]) : METHOD_RETURN, null // invisible public final static java.lang.String getJvmStatic() + @Lorg/jetbrains/annotations/NotNull;([]) // invisible @Lfoo/TypeAnn;([name="1"]) : METHOD_RETURN, null @Lfoo/TypeAnnBinary;([]) : METHOD_RETURN, null // invisible public final java.lang.String getLateinitProp() + @Lorg/jetbrains/annotations/NotNull;([]) // invisible @Lfoo/TypeAnn;([name="1"]) : METHOD_RETURN, null @Lfoo/TypeAnnBinary;([]) : METHOD_RETURN, null // invisible public final int getUnannotatedGetter() public final java.lang.String getValProp() + @Lorg/jetbrains/annotations/NotNull;([]) // invisible @Lfoo/TypeAnn;([name="1"]) : METHOD_RETURN, null @Lfoo/TypeAnnBinary;([]) : METHOD_RETURN, null // invisible public final java.lang.String getVarProp() + @Lorg/jetbrains/annotations/NotNull;([]) // invisible @Lfoo/TypeAnn;([name="1"]) : METHOD_RETURN, null @Lfoo/TypeAnnBinary;([]) : METHOD_RETURN, null // invisible public final void setCustomSetter(java.lang.String field) + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 public final static void setJvmStatic(java.lang.String ) @Lfoo/TypeAnn;([name="1"]) : METHOD_FORMAL_PARAMETER 0, null @Lfoo/TypeAnnBinary;([]) : METHOD_FORMAL_PARAMETER 0, null // invisible + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 public final void setLateinitProp(java.lang.String ) @Lfoo/TypeAnn;([name="1"]) : METHOD_FORMAL_PARAMETER 0, null @Lfoo/TypeAnnBinary;([]) : METHOD_FORMAL_PARAMETER 0, null // invisible + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 public final void setVarProp(java.lang.String ) @Lfoo/TypeAnn;([name="1"]) : METHOD_FORMAL_PARAMETER 0, null @Lfoo/TypeAnnBinary;([]) : METHOD_FORMAL_PARAMETER 0, null // invisible + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 } public abstract interface foo/TypeAnn : java/lang/Object, java/lang/annotation/Annotation { diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/simple.kt b/compiler/testData/codegen/asmLike/typeAnnotations/simple.kt index c794a40c42e..5cdff853256 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/simple.kt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/simple.kt @@ -1,5 +1,5 @@ // KOTLIN_CONFIGURATION_FLAGS: +JVM.EMIT_JVM_TYPE_ANNOTATIONS -// TYPE_ANNOTATIONS +// RENDER_ANNOTATIONS // TARGET_BACKEND: JVM // JVM_TARGET: 1.8 package foo diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/simple.txt b/compiler/testData/codegen/asmLike/typeAnnotations/simple.txt index beaa704f814..ba3fad7b5e9 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/simple.txt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/simple.txt @@ -4,16 +4,20 @@ public final class foo/Kotlin : java/lang/Object { public final void foo(java.lang.String s) @Lfoo/TypeAnn;([name="1"]) : METHOD_FORMAL_PARAMETER 0, null @Lfoo/TypeAnnBinary;([]) : METHOD_FORMAL_PARAMETER 0, null // invisible + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 public final java.lang.String foo2() + @Lorg/jetbrains/annotations/NotNull;([]) // invisible @Lfoo/TypeAnn;([name="2"]) : METHOD_RETURN, null @Lfoo/TypeAnnBinary;([]) : METHOD_RETURN, null // invisible public final void fooArray(java.lang.String[] s) @Lfoo/TypeAnn;([name="3"]) : METHOD_FORMAL_PARAMETER 0, [ @Lfoo/TypeAnnBinary;([]) : METHOD_FORMAL_PARAMETER 0, [ // invisible + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 public final java.lang.String[] fooArray2() + @Lorg/jetbrains/annotations/Nullable;([]) // invisible @Lfoo/TypeAnn;([name="4"]) : METHOD_RETURN, [ @Lfoo/TypeAnnBinary;([]) : METHOD_RETURN, [ // invisible } diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/simple2Params.kt b/compiler/testData/codegen/asmLike/typeAnnotations/simple2Params.kt index d4927e3e9cd..f7cb205273f 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/simple2Params.kt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/simple2Params.kt @@ -1,5 +1,5 @@ // KOTLIN_CONFIGURATION_FLAGS: +JVM.EMIT_JVM_TYPE_ANNOTATIONS -// TYPE_ANNOTATIONS +// RENDER_ANNOTATIONS // TARGET_BACKEND: JVM // JVM_TARGET: 1.8 package foo diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/simple2Params.txt b/compiler/testData/codegen/asmLike/typeAnnotations/simple2Params.txt index a6ab94a240a..febba4e2608 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/simple2Params.txt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/simple2Params.txt @@ -4,10 +4,13 @@ public final class foo/Kotlin : java/lang/Object { public final void foo(java.lang.String s, int x) @Lfoo/TypeAnn;([name="1"]) : METHOD_FORMAL_PARAMETER 0, null @Lfoo/TypeAnn;([name="2"]) : METHOD_FORMAL_PARAMETER 1, null + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 public final void fooArray(java.lang.String[] s, java.lang.Integer[] i) @Lfoo/TypeAnn;([name="3"]) : METHOD_FORMAL_PARAMETER 0, [ @Lfoo/TypeAnn;([name="3"]) : METHOD_FORMAL_PARAMETER 1, [ + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 1 } public abstract interface foo/TypeAnn : java/lang/Object, java/lang/annotation/Annotation { diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/staticNested.kt b/compiler/testData/codegen/asmLike/typeAnnotations/staticNested.kt index 1082cdfd8fe..5f01e93385a 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/staticNested.kt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/staticNested.kt @@ -1,5 +1,5 @@ // KOTLIN_CONFIGURATION_FLAGS: +JVM.EMIT_JVM_TYPE_ANNOTATIONS -// TYPE_ANNOTATIONS +// RENDER_ANNOTATIONS // TARGET_BACKEND: JVM // JVM_TARGET: 1.8 package foo diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/staticNested.txt b/compiler/testData/codegen/asmLike/typeAnnotations/staticNested.txt index ae604901475..1ca9cf30d89 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/staticNested.txt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/staticNested.txt @@ -24,8 +24,10 @@ public final class foo/Kotlin : java/lang/Object { public final void foo(foo.Outer$NestedStatic s) @Lfoo/Ann;([]) : METHOD_FORMAL_PARAMETER 0, null @Lfoo/Ann2;([]) : METHOD_FORMAL_PARAMETER 0, 0; + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 public final foo.Outer$NestedStatic foo() + @Lorg/jetbrains/annotations/Nullable;([]) // invisible @Lfoo/Ann;([]) : METHOD_RETURN, null @Lfoo/Ann2;([]) : METHOD_RETURN, 0; @@ -33,23 +35,29 @@ public final class foo/Kotlin : java/lang/Object { @Lfoo/Ann;([]) : METHOD_FORMAL_PARAMETER 0, null @Lfoo/Ann2;([]) : METHOD_FORMAL_PARAMETER 0, [ @Lfoo/Ann3;([]) : METHOD_FORMAL_PARAMETER 0, [0; + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 public final foo.Outer$NestedStatic[] fooArray() + @Lorg/jetbrains/annotations/Nullable;([]) // invisible @Lfoo/Ann;([]) : METHOD_RETURN, null @Lfoo/Ann2;([]) : METHOD_RETURN, [ @Lfoo/Ann3;([]) : METHOD_RETURN, [0; public final void fooArrayIn(java.lang.Object[] s) @Lfoo/Ann;([]) : METHOD_FORMAL_PARAMETER 0, null + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 public final foo.Outer$NestedStatic[] fooArrayOut() + @Lorg/jetbrains/annotations/Nullable;([]) // invisible @Lfoo/Ann;([]) : METHOD_RETURN, null public final void fooGenericIn(foo.Bar s) @Lfoo/Ann;([]) : METHOD_FORMAL_PARAMETER 0, null + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 public final void fooGenericOut(foo.Bar s) @Lfoo/Ann;([]) : METHOD_FORMAL_PARAMETER 0, null + @Lorg/jetbrains/annotations/NotNull;([]) // invisible, parameter 0 } public final class foo/Outer$NestedStatic : java/lang/Object { diff --git a/compiler/testData/codegen/asmLike/typeAnnotations/syntheticAccessors.kt b/compiler/testData/codegen/asmLike/typeAnnotations/syntheticAccessors.kt index 53ec4dc4924..af50dfcae45 100644 --- a/compiler/testData/codegen/asmLike/typeAnnotations/syntheticAccessors.kt +++ b/compiler/testData/codegen/asmLike/typeAnnotations/syntheticAccessors.kt @@ -1,5 +1,5 @@ // KOTLIN_CONFIGURATION_FLAGS: +JVM.EMIT_JVM_TYPE_ANNOTATIONS -// TYPE_ANNOTATIONS +// RENDER_ANNOTATIONS // TARGET_BACKEND: JVM // JVM_TARGET: 1.8 package foo diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/AbstractAsmLikeInstructionListingTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/AbstractAsmLikeInstructionListingTest.kt index 97b621b9689..79725349343 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/AbstractAsmLikeInstructionListingTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/AbstractAsmLikeInstructionListingTest.kt @@ -24,7 +24,7 @@ abstract class AbstractAsmLikeInstructionListingTest : CodegenTestCase() { private companion object { const val CURIOUS_ABOUT_DIRECTIVE = "// CURIOUS_ABOUT " const val LOCAL_VARIABLE_TABLE_DIRECTIVE = "// LOCAL_VARIABLE_TABLE" - const val TYPE_ANNOTATIONS_DIRECTIVE = "// TYPE_ANNOTATIONS" + const val RENDER_ANNOTATIONS_DIRECTIVE = "// RENDER_ANNOTATIONS" } override fun doMultiFileTest(wholeFile: File, files: List) { @@ -44,10 +44,10 @@ abstract class AbstractAsmLikeInstructionListingTest : CodegenTestCase() { .flatMap { it.split(',').map { it.trim() } } val showLocalVariables = testFileLines.any { it.trim() == LOCAL_VARIABLE_TABLE_DIRECTIVE } - val showTypeAnnotations = testFileLines.any { it.trim() == TYPE_ANNOTATIONS_DIRECTIVE } + val renderAnnotations = testFileLines.any { it.trim() == RENDER_ANNOTATIONS_DIRECTIVE } KotlinTestUtils.assertEqualsToFile(txtFile, classes.joinToString(LINE_SEPARATOR.repeat(2)) { - renderClassNode(it, printBytecodeForTheseMethods, showLocalVariables, showTypeAnnotations) + renderClassNode(it, printBytecodeForTheseMethods, showLocalVariables, renderAnnotations) }) } @@ -57,7 +57,7 @@ abstract class AbstractAsmLikeInstructionListingTest : CodegenTestCase() { clazz: ClassNode, showBytecodeForTheseMethods: List, showLocalVariables: Boolean, - showTypeAnnotations: Boolean + renderAnnotations: Boolean ): String { val fields = (clazz.fields ?: emptyList()).sortedBy { it.name } val methods = (clazz.methods ?: emptyList()).sortedBy { it.name } @@ -76,7 +76,7 @@ abstract class AbstractAsmLikeInstructionListingTest : CodegenTestCase() { appendLine(" {") - fields.joinTo(this, LINE_SEPARATOR.repeat(2)) { renderField(it, showTypeAnnotations).withMargin() } + fields.joinTo(this, LINE_SEPARATOR.repeat(2)) { renderField(it, renderAnnotations).withMargin() } if (fields.isNotEmpty()) { appendLine().appendLine() @@ -84,22 +84,30 @@ abstract class AbstractAsmLikeInstructionListingTest : CodegenTestCase() { methods.joinTo(this, LINE_SEPARATOR.repeat(2)) { val showBytecode = showBytecodeForTheseMethods.contains(it.name) - renderMethod(it, showBytecode, showLocalVariables, showTypeAnnotations).withMargin() + renderMethod(it, showBytecode, showLocalVariables, renderAnnotations).withMargin() } appendLine().append("}") } } - private fun renderField(field: FieldNode, showTypeAnnotations: Boolean) = buildString { + private fun renderField(field: FieldNode, renderAnnotations: Boolean) = buildString { renderVisibilityModifiers(field.access) renderModalityModifiers(field.access) append(Type.getType(field.desc).className).append(' ') append(field.name) - if (showTypeAnnotations) { + if (renderAnnotations) { val textifier = Textifier() val visitor = TraceFieldVisitor(textifier) + + field.visibleAnnotations?.forEach { + it.accept(visitor.visitAnnotation(it.desc, true)) + } + field.invisibleAnnotations?.forEach { + it.accept(visitor.visitAnnotation(it.desc, false)) + } + field.visibleTypeAnnotations?.forEach { it.accept(visitor.visitTypeAnnotation(it.typeRef, it.typePath, it.desc, true)) } @@ -116,7 +124,7 @@ abstract class AbstractAsmLikeInstructionListingTest : CodegenTestCase() { method: MethodNode, showBytecode: Boolean, showLocalVariables: Boolean, - showTypeAnnotations: Boolean + renderAnnotations: Boolean ) = buildString { renderVisibilityModifiers(method.access) renderModalityModifiers(method.access) @@ -129,15 +137,45 @@ abstract class AbstractAsmLikeInstructionListingTest : CodegenTestCase() { "${type.className} $name" }.joinTo(this, prefix = "(", postfix = ")") - if (showTypeAnnotations) { + if (renderAnnotations) { val textifier = Textifier() val visitor = TraceMethodVisitor(textifier) + method.visibleAnnotations?.forEach { + it.accept(visitor.visitAnnotation(it.desc, true)) + } + method.invisibleAnnotations?.forEach { + it.accept(visitor.visitAnnotation(it.desc, false)) + } + method.visibleTypeAnnotations?.forEach { it.accept(visitor.visitTypeAnnotation(it.typeRef, it.typePath, it.desc, true)) } method.invisibleTypeAnnotations?.forEach { it.accept(visitor.visitTypeAnnotation(it.typeRef, it.typePath, it.desc, false)) } + + method.visibleParameterAnnotations?.forEachIndexed { index, parameterAnnotations: MutableList? -> + parameterAnnotations?.forEach { + it.accept( + visitor.visitParameterAnnotation( + index, + it.desc, + true + ) + ) + } + } + method.invisibleParameterAnnotations?.forEachIndexed { index, parameterAnnotations: MutableList? -> + parameterAnnotations?.forEach { + it.accept( + visitor.visitParameterAnnotation( + index, + it.desc, + false + ) + ) + } + } textifier.getText().takeIf { it.isNotEmpty() }?.let { append("\n${textifier.getText().joinToString("").trimEnd()}") }