Update synthetic parameter processing logic according to ASM 7 changes
#KT-27774 Fixed
This commit is contained in:
@@ -73,6 +73,9 @@ import static org.jetbrains.kotlin.types.TypeUtils.isNullableType;
|
|||||||
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
|
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
|
||||||
|
|
||||||
public class AsmUtil {
|
public class AsmUtil {
|
||||||
|
|
||||||
|
public static final boolean IS_BUILT_WITH_ASM6 = Opcodes.API_VERSION <= Opcodes.ASM6;
|
||||||
|
|
||||||
private static final Set<Type> STRING_BUILDER_OBJECT_APPEND_ARG_TYPES = Sets.newHashSet(
|
private static final Set<Type> STRING_BUILDER_OBJECT_APPEND_ARG_TYPES = Sets.newHashSet(
|
||||||
getType(String.class),
|
getType(String.class),
|
||||||
getType(StringBuffer.class),
|
getType(StringBuffer.class),
|
||||||
|
|||||||
@@ -517,12 +517,27 @@ public class FunctionCodegen {
|
|||||||
|
|
||||||
Iterator<ValueParameterDescriptor> iterator = valueParameters.iterator();
|
Iterator<ValueParameterDescriptor> iterator = valueParameters.iterator();
|
||||||
List<JvmMethodParameterSignature> kotlinParameterTypes = jvmSignature.getValueParameters();
|
List<JvmMethodParameterSignature> kotlinParameterTypes = jvmSignature.getValueParameters();
|
||||||
|
int syntheticParameterCount = 0;
|
||||||
|
for (int i = 0; i < kotlinParameterTypes.size(); i++) {
|
||||||
|
JvmMethodParameterSignature parameterSignature = kotlinParameterTypes.get(i);
|
||||||
|
JvmMethodParameterKind kind = parameterSignature.getKind();
|
||||||
|
if (kind.isSkippedInGenericSignature()) {
|
||||||
|
if (AsmUtil.IS_BUILT_WITH_ASM6) {
|
||||||
|
markEnumOrInnerConstructorParameterAsSynthetic(mv, i, state.getClassBuilderMode());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
syntheticParameterCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!AsmUtil.IS_BUILT_WITH_ASM6) {
|
||||||
|
Asm7UtilKt.visitAnnotableParameterCount(mv, kotlinParameterTypes.size() - syntheticParameterCount);
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < kotlinParameterTypes.size(); i++) {
|
for (int i = 0; i < kotlinParameterTypes.size(); i++) {
|
||||||
JvmMethodParameterSignature parameterSignature = kotlinParameterTypes.get(i);
|
JvmMethodParameterSignature parameterSignature = kotlinParameterTypes.get(i);
|
||||||
JvmMethodParameterKind kind = parameterSignature.getKind();
|
JvmMethodParameterKind kind = parameterSignature.getKind();
|
||||||
if (kind.isSkippedInGenericSignature()) {
|
if (kind.isSkippedInGenericSignature()) {
|
||||||
markEnumOrInnerConstructorParameterAsSynthetic(mv, i, state.getClassBuilderMode());
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -534,7 +549,9 @@ public class FunctionCodegen {
|
|||||||
: null;
|
: null;
|
||||||
|
|
||||||
if (annotated != null) {
|
if (annotated != null) {
|
||||||
AnnotationCodegen.forParameter(i, mv, innerClassConsumer, state).genAnnotations(annotated, parameterSignature.getAsmType());
|
//noinspection ConstantConditions
|
||||||
|
AnnotationCodegen.forParameter(AsmUtil.IS_BUILT_WITH_ASM6 ? i : i - syntheticParameterCount, mv, innerClassConsumer, state)
|
||||||
|
.genAnnotations(annotated, parameterSignature.getAsmType());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.codegen
|
||||||
|
|
||||||
|
import org.jetbrains.org.objectweb.asm.MethodVisitor
|
||||||
|
|
||||||
|
internal fun visitAnnotableParameterCount(mv: MethodVisitor, paramCount: Int) {}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.codegen
|
||||||
|
|
||||||
|
import org.jetbrains.org.objectweb.asm.MethodVisitor
|
||||||
|
|
||||||
|
internal fun visitAnnotableParameterCount(mv: MethodVisitor, paramCount: Int) {
|
||||||
|
mv.visitAnnotableParameterCount(paramCount, true)
|
||||||
|
mv.visitAnnotableParameterCount(paramCount, false)
|
||||||
|
}
|
||||||
+1
-1
@@ -60,7 +60,7 @@ internal class AnnotationsAndParameterCollectorMethodVisitor(
|
|||||||
)
|
)
|
||||||
|
|
||||||
override fun visitParameterAnnotation(parameter: Int, desc: String, visible: Boolean): AnnotationVisitor? {
|
override fun visitParameterAnnotation(parameter: Int, desc: String, visible: Boolean): AnnotationVisitor? {
|
||||||
val index = parameter - parametersToSkipNumber
|
val index = if (Opcodes.API_VERSION <= Opcodes.ASM6) parameter - parametersToSkipNumber else parameter
|
||||||
if (index < 0) return null
|
if (index < 0) return null
|
||||||
|
|
||||||
val annotations =
|
val annotations =
|
||||||
|
|||||||
+15
-1
@@ -252,7 +252,12 @@ public abstract class FileBasedKotlinClass implements KotlinJvmBinaryClass {
|
|||||||
MethodAnnotationVisitor v = memberVisitor.visitMethod(Name.identifier(name), desc);
|
MethodAnnotationVisitor v = memberVisitor.visitMethod(Name.identifier(name), desc);
|
||||||
if (v == null) return null;
|
if (v == null) return null;
|
||||||
|
|
||||||
|
int methodParamCount = Type.getArgumentTypes(desc).length;
|
||||||
return new MethodVisitor(ASM5) {
|
return new MethodVisitor(ASM5) {
|
||||||
|
|
||||||
|
private int visibleAnnotableParameterCount = methodParamCount;
|
||||||
|
private int invisibleAnnotableParameterCount = methodParamCount;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public org.jetbrains.org.objectweb.asm.AnnotationVisitor visitAnnotation(@NotNull String desc, boolean visible) {
|
public org.jetbrains.org.objectweb.asm.AnnotationVisitor visitAnnotation(@NotNull String desc, boolean visible) {
|
||||||
return convertAnnotationVisitor(v, desc, innerClasses);
|
return convertAnnotationVisitor(v, desc, innerClasses);
|
||||||
@@ -260,10 +265,19 @@ public abstract class FileBasedKotlinClass implements KotlinJvmBinaryClass {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public org.jetbrains.org.objectweb.asm.AnnotationVisitor visitParameterAnnotation(int parameter, @NotNull String desc, boolean visible) {
|
public org.jetbrains.org.objectweb.asm.AnnotationVisitor visitParameterAnnotation(int parameter, @NotNull String desc, boolean visible) {
|
||||||
AnnotationArgumentVisitor av = v.visitParameterAnnotation(parameter, resolveNameByDesc(desc, innerClasses), SourceElement.NO_SOURCE);
|
int parameterIndex = parameter + methodParamCount - (visible ? visibleAnnotableParameterCount : invisibleAnnotableParameterCount);
|
||||||
|
AnnotationArgumentVisitor av = v.visitParameterAnnotation(parameterIndex, resolveNameByDesc(desc, innerClasses), SourceElement.NO_SOURCE);
|
||||||
return av == null ? null : convertAnnotationVisitor(av, innerClasses);
|
return av == null ? null : convertAnnotationVisitor(av, innerClasses);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void visitAnnotableParameterCount(int parameterCount, boolean visible) {
|
||||||
|
if (visible)
|
||||||
|
visibleAnnotableParameterCount = parameterCount;
|
||||||
|
else {
|
||||||
|
invisibleAnnotableParameterCount = parameterCount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visitEnd() {
|
public void visitEnd() {
|
||||||
v.visitEnd();
|
v.visitEnd();
|
||||||
|
|||||||
@@ -81,6 +81,7 @@ public class StubClassBuilder extends AbstractClassBuilder {
|
|||||||
) {
|
) {
|
||||||
assert v == null : "defineClass() called twice?";
|
assert v == null : "defineClass() called twice?";
|
||||||
|
|
||||||
|
//noinspection ConstantConditions
|
||||||
v = new StubBuildingVisitor<>(null, EMPTY_STRATEGY, parent, access, calculateShortName(name));
|
v = new StubBuildingVisitor<>(null, EMPTY_STRATEGY, parent, access, calculateShortName(name));
|
||||||
|
|
||||||
super.defineClass(origin, version, access, name, signature, superName, interfaces);
|
super.defineClass(origin, version, access, name, signature, superName, interfaces);
|
||||||
|
|||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
public enum AnnotatedParameterInEnumConstructor {
|
||||||
|
A;
|
||||||
|
|
||||||
|
private AnnotatedParameterInEnumConstructor(@test.Anno(x = "a") java.lang.String a, @test.Anno(x = "b") java.lang.String b) { /* compiled code */ }
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
// test.AnnotatedParameterInEnumConstructor
|
||||||
|
package test
|
||||||
|
|
||||||
|
annotation class Anno(val x: String)
|
||||||
|
|
||||||
|
enum class AnnotatedParameterInEnumConstructor(@Anno("a") a: String, @Anno("b") b: String) {
|
||||||
|
A("1", "b")
|
||||||
|
}
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
public final class AnnotatedParameterInInnerClassConstructor {
|
||||||
|
public AnnotatedParameterInInnerClassConstructor() { /* compiled code */ }
|
||||||
|
|
||||||
|
public final class Inner {
|
||||||
|
public Inner(@test.Anno(x = "a") @org.jetbrains.annotations.NotNull java.lang.String $outer, @test.Anno(x = "b") @org.jetbrains.annotations.NotNull java.lang.String a) { /* compiled code */ }
|
||||||
|
}
|
||||||
|
|
||||||
|
public final class InnerGeneric <T> {
|
||||||
|
public InnerGeneric(@test.Anno(x = "a") T $outer, @test.Anno(x = "b") @org.jetbrains.annotations.NotNull java.lang.String a) { /* compiled code */ }
|
||||||
|
}
|
||||||
|
}
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
public final class AnnotatedParameterInInnerClassConstructor {
|
||||||
|
public AnnotatedParameterInInnerClassConstructor() { /* compiled code */ }
|
||||||
|
|
||||||
|
public final class Inner {
|
||||||
|
public Inner(@test.Anno(x = "a") @org.jetbrains.annotations.NotNull java.lang.String a, @test.Anno(x = "b") @org.jetbrains.annotations.NotNull java.lang.String b) { /* compiled code */ }
|
||||||
|
}
|
||||||
|
|
||||||
|
public final class InnerGeneric <T> {
|
||||||
|
public InnerGeneric(@test.Anno(x = "a") T a, @test.Anno(x = "b") @org.jetbrains.annotations.NotNull java.lang.String b) { /* compiled code */ }
|
||||||
|
}
|
||||||
|
}
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
// test.AnnotatedParameterInInnerClassConstructor
|
||||||
|
package test
|
||||||
|
|
||||||
|
annotation class Anno(val x: String)
|
||||||
|
|
||||||
|
class AnnotatedParameterInInnerClassConstructor {
|
||||||
|
|
||||||
|
inner class Inner(@Anno("a") a: String, @Anno("b") b: String) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
inner class InnerGeneric<T>(@Anno("a") a: T, @Anno("b") b: String) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
+29
@@ -0,0 +1,29 @@
|
|||||||
|
// IGNORE_BACKEND: JS_IR
|
||||||
|
// TODO: muted automatically, investigate should it be ran for JS or not
|
||||||
|
// IGNORE_BACKEND: JS, NATIVE
|
||||||
|
|
||||||
|
// WITH_REFLECT
|
||||||
|
|
||||||
|
import kotlin.reflect.full.valueParameters
|
||||||
|
|
||||||
|
@Retention(AnnotationRetention.RUNTIME)
|
||||||
|
annotation class Simple(val value: String)
|
||||||
|
|
||||||
|
fun local(): Any {
|
||||||
|
class A(@Simple("OK") val z: String)
|
||||||
|
return A("OK")
|
||||||
|
}
|
||||||
|
|
||||||
|
fun localCaptured(): Any {
|
||||||
|
val z = 1
|
||||||
|
class A(@Simple("K") val z: String) {
|
||||||
|
val x = z
|
||||||
|
}
|
||||||
|
return A("K")
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
return (local()::class.constructors.single().valueParameters.single().annotations.single() as Simple).value
|
||||||
|
//KT-25573
|
||||||
|
//return (localCaptured()::class.constructors.single().valueParameters.single().annotations.single() as Simple).value
|
||||||
|
}
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
annotation class Simple(val value: String)
|
||||||
|
|
||||||
|
fun localCaptured(): Any {
|
||||||
|
val z = 1
|
||||||
|
class A(@Simple("K") val z: String) {
|
||||||
|
val x = z
|
||||||
|
}
|
||||||
|
return A("K")
|
||||||
|
}
|
||||||
+22
@@ -0,0 +1,22 @@
|
|||||||
|
@kotlin.Metadata
|
||||||
|
public final class LocalClassWithCapturedParamsKt$localCaptured$A {
|
||||||
|
synthetic final field $z: int
|
||||||
|
private final field x: int
|
||||||
|
private final @org.jetbrains.annotations.NotNull field z: java.lang.String
|
||||||
|
inner class LocalClassWithCapturedParamsKt$localCaptured$A
|
||||||
|
public method <init>(p0: int, @Simple @org.jetbrains.annotations.NotNull p1: java.lang.String): void
|
||||||
|
public final method getX(): int
|
||||||
|
public final @org.jetbrains.annotations.NotNull method getZ(): java.lang.String
|
||||||
|
}
|
||||||
|
|
||||||
|
@kotlin.Metadata
|
||||||
|
public final class LocalClassWithCapturedParamsKt {
|
||||||
|
inner class LocalClassWithCapturedParamsKt$localCaptured$A
|
||||||
|
public final static @org.jetbrains.annotations.NotNull method localCaptured(): java.lang.Object
|
||||||
|
}
|
||||||
|
|
||||||
|
@java.lang.annotation.Retention
|
||||||
|
@kotlin.Metadata
|
||||||
|
public annotation class Simple {
|
||||||
|
public abstract method value(): java.lang.String
|
||||||
|
}
|
||||||
Vendored
+69
@@ -0,0 +1,69 @@
|
|||||||
|
@java.lang.annotation.Retention
|
||||||
|
@kotlin.Metadata
|
||||||
|
public annotation class Ann
|
||||||
|
|
||||||
|
@kotlin.Metadata
|
||||||
|
public final class Sealed$Derived {
|
||||||
|
inner class Sealed$Derived
|
||||||
|
private method <init>(p0: int): void
|
||||||
|
public synthetic @Ann method <init>(p0: int, p1: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||||
|
}
|
||||||
|
|
||||||
|
@kotlin.Metadata
|
||||||
|
public final class Sealed$Inner {
|
||||||
|
synthetic final field this$0: Sealed
|
||||||
|
private final field z2: int
|
||||||
|
inner class Sealed$Inner
|
||||||
|
public synthetic @Ann method <init>(p0: Sealed, p1: int, @Ann p2: int, @Ann p3: java.lang.String, p4: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||||
|
private method <init>(p0: Sealed, p1: int, p2: int, p3: java.lang.String): void
|
||||||
|
public final method getZ2(): int
|
||||||
|
}
|
||||||
|
|
||||||
|
@kotlin.Metadata
|
||||||
|
public abstract class Sealed {
|
||||||
|
private final field z: int
|
||||||
|
inner class Sealed$Derived
|
||||||
|
inner class Sealed$Inner
|
||||||
|
private @Ann method <init>(@Ann p0: int): void
|
||||||
|
public synthetic method <init>(p0: int, p1: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||||
|
public final method getZ(): int
|
||||||
|
}
|
||||||
|
|
||||||
|
@kotlin.Metadata
|
||||||
|
public final class Test$Inner {
|
||||||
|
synthetic final field this$0: Test
|
||||||
|
private final field z2: int
|
||||||
|
inner class Test$Inner
|
||||||
|
public synthetic @Ann method <init>(p0: Test, p1: int, @Ann p2: int, @Ann p3: java.lang.String, p4: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||||
|
private method <init>(p0: Test, p1: int, p2: int, p3: java.lang.String): void
|
||||||
|
public final method getZ2(): int
|
||||||
|
}
|
||||||
|
|
||||||
|
@kotlin.Metadata
|
||||||
|
public final class Test {
|
||||||
|
private final field z: int
|
||||||
|
inner class Test$Inner
|
||||||
|
public synthetic @Ann method <init>(@Ann p0: int, p1: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||||
|
private method <init>(p0: int): void
|
||||||
|
public synthetic @Ann method <init>(p0: int, @Ann p1: int, p2: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||||
|
private @Ann method <init>(p0: int, @Ann p1: java.lang.String): void
|
||||||
|
private method <init>(p0: int, p1: int): void
|
||||||
|
public final method getZ(): int
|
||||||
|
}
|
||||||
|
|
||||||
|
@kotlin.Metadata
|
||||||
|
public final class Z {
|
||||||
|
private final field x: int
|
||||||
|
private synthetic method <init>(p0: int): void
|
||||||
|
public synthetic final static @org.jetbrains.annotations.NotNull method box-impl(p0: int): Z
|
||||||
|
public static method constructor-impl(p0: int): int
|
||||||
|
public method equals(p0: java.lang.Object): boolean
|
||||||
|
public static method equals-impl(p0: int, @org.jetbrains.annotations.Nullable p1: java.lang.Object): boolean
|
||||||
|
public final static method equals-impl0(p0: int, p1: int): boolean
|
||||||
|
public final method getX(): int
|
||||||
|
public method hashCode(): int
|
||||||
|
public static method hashCode-impl(p0: int): int
|
||||||
|
public method toString(): java.lang.String
|
||||||
|
public static @org.jetbrains.annotations.NotNull method toString-impl(p0: int): java.lang.String
|
||||||
|
public synthetic final method unbox-impl(): int
|
||||||
|
}
|
||||||
+133
@@ -0,0 +1,133 @@
|
|||||||
|
@kotlin.Metadata
|
||||||
|
public final class ASimpleClass {
|
||||||
|
public method <init>(): void
|
||||||
|
public synthetic static @kotlin.jvm.JvmOverloads method showSnackbar$default(p0: ASimpleClass, p1: java.lang.String, p2: int, p3: int, p4: int, p5: java.lang.Object): void
|
||||||
|
public final @kotlin.jvm.JvmOverloads method showSnackbar(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int): void
|
||||||
|
public final @kotlin.jvm.JvmOverloads method showSnackbar(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int, p2: int): void
|
||||||
|
public synthetic static @kotlin.jvm.JvmOverloads method showSnackbarLong$default(p0: ASimpleClass, p1: java.lang.String, p2: int, p3: int, p4: long, p5: java.lang.String, p6: int, p7: java.lang.Object): void
|
||||||
|
public final @kotlin.jvm.JvmOverloads method showSnackbarLong(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int, @DefRes p2: int, @LongRes p3: long): void
|
||||||
|
public final @kotlin.jvm.JvmOverloads method showSnackbarLong(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int, @DefRes p2: int, @LongRes p3: long, @org.jetbrains.annotations.NotNull p4: java.lang.String): void
|
||||||
|
public final @kotlin.jvm.JvmOverloads method showSnackbarLong(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int, @LongRes p2: long): void
|
||||||
|
public synthetic static @kotlin.jvm.JvmOverloads method showSnackbarLongNoExtension$default(p0: ASimpleClass, p1: int, p2: int, p3: long, p4: java.lang.String, p5: int, p6: java.lang.Object): void
|
||||||
|
public final @kotlin.jvm.JvmOverloads method showSnackbarLongNoExtension(@StringRes p0: int, @DefRes p1: int, @LongRes p2: long): void
|
||||||
|
public final @kotlin.jvm.JvmOverloads method showSnackbarLongNoExtension(@StringRes p0: int, @DefRes p1: int, @LongRes p2: long, @org.jetbrains.annotations.NotNull p3: java.lang.String): void
|
||||||
|
public final @kotlin.jvm.JvmOverloads method showSnackbarLongNoExtension(@StringRes p0: int, @LongRes p1: long): void
|
||||||
|
public synthetic static @kotlin.jvm.JvmOverloads method showSnackbarNoExtension$default(p0: ASimpleClass, p1: int, p2: int, p3: int, p4: java.lang.Object): void
|
||||||
|
public final @kotlin.jvm.JvmOverloads method showSnackbarNoExtension(@StringRes p0: int): void
|
||||||
|
public final @kotlin.jvm.JvmOverloads method showSnackbarNoExtension(@StringRes p0: int, p1: int): void
|
||||||
|
}
|
||||||
|
|
||||||
|
@kotlin.Metadata
|
||||||
|
public final class BSimpleObject {
|
||||||
|
public final static field INSTANCE: BSimpleObject
|
||||||
|
static method <clinit>(): void
|
||||||
|
private method <init>(): void
|
||||||
|
public synthetic static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbar$default(p0: java.lang.String, p1: int, p2: int, p3: int, p4: java.lang.Object): void
|
||||||
|
public final static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbar(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int): void
|
||||||
|
public final static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbar(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int, p2: int): void
|
||||||
|
public synthetic static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarLong$default(p0: java.lang.String, p1: int, p2: int, p3: long, p4: java.lang.String, p5: int, p6: java.lang.Object): void
|
||||||
|
public final static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarLong(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int, @DefRes p2: int, @LongRes p3: long): void
|
||||||
|
public final static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarLong(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int, @DefRes p2: int, @LongRes p3: long, @org.jetbrains.annotations.NotNull p4: java.lang.String): void
|
||||||
|
public final static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarLong(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int, @LongRes p2: long): void
|
||||||
|
public synthetic static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarLongNoExtension$default(p0: int, p1: int, p2: long, p3: java.lang.String, p4: int, p5: java.lang.Object): void
|
||||||
|
public final static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarLongNoExtension(@StringRes p0: int, @DefRes p1: int, @LongRes p2: long): void
|
||||||
|
public final static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarLongNoExtension(@StringRes p0: int, @DefRes p1: int, @LongRes p2: long, @org.jetbrains.annotations.NotNull p3: java.lang.String): void
|
||||||
|
public final static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarLongNoExtension(@StringRes p0: int, @LongRes p1: long): void
|
||||||
|
public synthetic static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarNoExtension$default(p0: int, p1: int, p2: int, p3: java.lang.Object): void
|
||||||
|
public final static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarNoExtension(@StringRes p0: int): void
|
||||||
|
public final static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarNoExtension(@StringRes p0: int, p1: int): void
|
||||||
|
}
|
||||||
|
|
||||||
|
@kotlin.Metadata
|
||||||
|
public final class CClassWithCompanion$Companion {
|
||||||
|
inner class CClassWithCompanion$Companion
|
||||||
|
private method <init>(): void
|
||||||
|
public synthetic method <init>(p0: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||||
|
public synthetic static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbar$default(p0: CClassWithCompanion$Companion, p1: java.lang.String, p2: int, p3: int, p4: int, p5: java.lang.Object): void
|
||||||
|
public final @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbar(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int): void
|
||||||
|
public final @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbar(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int, p2: int): void
|
||||||
|
public synthetic static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarLong$default(p0: CClassWithCompanion$Companion, p1: java.lang.String, p2: int, p3: int, p4: long, p5: java.lang.String, p6: int, p7: java.lang.Object): void
|
||||||
|
public final @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarLong(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int, @DefRes p2: int, @LongRes p3: long): void
|
||||||
|
public final @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarLong(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int, @DefRes p2: int, @LongRes p3: long, @org.jetbrains.annotations.NotNull p4: java.lang.String): void
|
||||||
|
public final @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarLong(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int, @LongRes p2: long): void
|
||||||
|
public synthetic static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarLongNoExtension$default(p0: CClassWithCompanion$Companion, p1: int, p2: int, p3: long, p4: java.lang.String, p5: int, p6: java.lang.Object): void
|
||||||
|
public final @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarLongNoExtension(@StringRes p0: int, @DefRes p1: int, @LongRes p2: long): void
|
||||||
|
public final @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarLongNoExtension(@StringRes p0: int, @DefRes p1: int, @LongRes p2: long, @org.jetbrains.annotations.NotNull p3: java.lang.String): void
|
||||||
|
public final @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarLongNoExtension(@StringRes p0: int, @LongRes p1: long): void
|
||||||
|
public synthetic static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarNoExtension$default(p0: CClassWithCompanion$Companion, p1: int, p2: int, p3: int, p4: java.lang.Object): void
|
||||||
|
public final @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarNoExtension(@StringRes p0: int): void
|
||||||
|
public final @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarNoExtension(@StringRes p0: int, p1: int): void
|
||||||
|
}
|
||||||
|
|
||||||
|
@kotlin.Metadata
|
||||||
|
public final class CClassWithCompanion {
|
||||||
|
public final static field Companion: CClassWithCompanion$Companion
|
||||||
|
inner class CClassWithCompanion$Companion
|
||||||
|
static method <clinit>(): void
|
||||||
|
public method <init>(): void
|
||||||
|
public final static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbar(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int): void
|
||||||
|
public final static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbar(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int, p2: int): void
|
||||||
|
public final static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarLong(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int, @DefRes p2: int, @LongRes p3: long): void
|
||||||
|
public final static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarLong(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int, @DefRes p2: int, @LongRes p3: long, @org.jetbrains.annotations.NotNull p4: java.lang.String): void
|
||||||
|
public final static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarLong(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int, @LongRes p2: long): void
|
||||||
|
public final static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarLongNoExtension(@StringRes p0: int, @DefRes p1: int, @LongRes p2: long): void
|
||||||
|
public final static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarLongNoExtension(@StringRes p0: int, @DefRes p1: int, @LongRes p2: long, @org.jetbrains.annotations.NotNull p3: java.lang.String): void
|
||||||
|
public final static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarLongNoExtension(@StringRes p0: int, @LongRes p1: long): void
|
||||||
|
public final static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarNoExtension(@StringRes p0: int): void
|
||||||
|
public final static @kotlin.jvm.JvmStatic @kotlin.jvm.JvmOverloads method showSnackbarNoExtension(@StringRes p0: int, p1: int): void
|
||||||
|
}
|
||||||
|
|
||||||
|
@kotlin.Metadata
|
||||||
|
public final class DClassConstuctors$InnerClass {
|
||||||
|
synthetic final field this$0: DClassConstuctors
|
||||||
|
inner class DClassConstuctors$InnerClass
|
||||||
|
public @kotlin.jvm.JvmOverloads method <init>(p0: DClassConstuctors, @StringRes p1: int): void
|
||||||
|
public @kotlin.jvm.JvmOverloads method <init>(p0: DClassConstuctors, @StringRes p1: int, @DefRes p2: int, @LongRes p3: long): void
|
||||||
|
public @kotlin.jvm.JvmOverloads method <init>(p0: DClassConstuctors, @StringRes p1: int, @DefRes p2: int, @LongRes p3: long, @org.jetbrains.annotations.NotNull p4: java.lang.String): void
|
||||||
|
public @kotlin.jvm.JvmOverloads method <init>(p0: DClassConstuctors, @StringRes p1: int, @LongRes p2: long): void
|
||||||
|
public @kotlin.jvm.JvmOverloads method <init>(p0: DClassConstuctors, @StringRes p1: int, p2: int): void
|
||||||
|
public synthetic @kotlin.jvm.JvmOverloads method <init>(p0: DClassConstuctors, p1: int, p2: int, p3: int, p4: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||||
|
public synthetic @kotlin.jvm.JvmOverloads method <init>(p0: DClassConstuctors, p1: int, p2: int, p3: long, p4: java.lang.String, p5: int, p6: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||||
|
}
|
||||||
|
|
||||||
|
@kotlin.Metadata
|
||||||
|
public final class DClassConstuctors {
|
||||||
|
inner class DClassConstuctors$InnerClass
|
||||||
|
public @kotlin.jvm.JvmOverloads method <init>(@StringRes p0: int): void
|
||||||
|
public @kotlin.jvm.JvmOverloads method <init>(@StringRes p0: int, @DefRes p1: int, @LongRes p2: long): void
|
||||||
|
public @kotlin.jvm.JvmOverloads method <init>(@StringRes p0: int, @DefRes p1: int, @LongRes p2: long, @org.jetbrains.annotations.NotNull p3: java.lang.String): void
|
||||||
|
public @kotlin.jvm.JvmOverloads method <init>(@StringRes p0: int, @LongRes p1: long): void
|
||||||
|
public @kotlin.jvm.JvmOverloads method <init>(@StringRes p0: int, p1: int): void
|
||||||
|
public synthetic @kotlin.jvm.JvmOverloads method <init>(p0: int, p1: int, p2: int, p3: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||||
|
public synthetic @kotlin.jvm.JvmOverloads method <init>(p0: int, p1: int, p2: long, p3: java.lang.String, p4: int, p5: kotlin.jvm.internal.DefaultConstructorMarker): void
|
||||||
|
}
|
||||||
|
|
||||||
|
@java.lang.annotation.Retention
|
||||||
|
@kotlin.Metadata
|
||||||
|
public annotation class DefRes
|
||||||
|
|
||||||
|
@kotlin.Metadata
|
||||||
|
public final class JvmOverloadsAndParametersAnnotationsKt {
|
||||||
|
public synthetic static @kotlin.jvm.JvmOverloads method showSnackbar$default(p0: java.lang.String, p1: int, p2: int, p3: int, p4: java.lang.Object): void
|
||||||
|
public final static @kotlin.jvm.JvmOverloads method showSnackbar(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int): void
|
||||||
|
public final static @kotlin.jvm.JvmOverloads method showSnackbar(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int, p2: int): void
|
||||||
|
public synthetic static @kotlin.jvm.JvmOverloads method showSnackbarLong$default(p0: java.lang.String, p1: int, p2: int, p3: long, p4: java.lang.String, p5: int, p6: java.lang.Object): void
|
||||||
|
public final static @kotlin.jvm.JvmOverloads method showSnackbarLong(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int, @DefRes p2: int, @LongRes p3: long): void
|
||||||
|
public final static @kotlin.jvm.JvmOverloads method showSnackbarLong(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int, @DefRes p2: int, @LongRes p3: long, @org.jetbrains.annotations.NotNull p4: java.lang.String): void
|
||||||
|
public final static @kotlin.jvm.JvmOverloads method showSnackbarLong(@org.jetbrains.annotations.NotNull p0: java.lang.String, @StringRes p1: int, @LongRes p2: long): void
|
||||||
|
public synthetic static @kotlin.jvm.JvmOverloads method showSnackbarLongNoExtension$default(p0: int, p1: int, p2: long, p3: java.lang.String, p4: int, p5: java.lang.Object): void
|
||||||
|
public final static @kotlin.jvm.JvmOverloads method showSnackbarLongNoExtension(@StringRes p0: int, @DefRes p1: int, @LongRes p2: long): void
|
||||||
|
public final static @kotlin.jvm.JvmOverloads method showSnackbarLongNoExtension(@StringRes p0: int, @DefRes p1: int, @LongRes p2: long, @org.jetbrains.annotations.NotNull p3: java.lang.String): void
|
||||||
|
public final static @kotlin.jvm.JvmOverloads method showSnackbarLongNoExtension(@StringRes p0: int, @LongRes p1: long): void
|
||||||
|
public synthetic static @kotlin.jvm.JvmOverloads method showSnackbarNoExtension$default(p0: int, p1: int, p2: int, p3: java.lang.Object): void
|
||||||
|
public final static @kotlin.jvm.JvmOverloads method showSnackbarNoExtension(@StringRes p0: int): void
|
||||||
|
public final static @kotlin.jvm.JvmOverloads method showSnackbarNoExtension(@StringRes p0: int, p1: int): void
|
||||||
|
}
|
||||||
|
|
||||||
|
@java.lang.annotation.Retention
|
||||||
|
@kotlin.Metadata
|
||||||
|
public annotation class LongRes
|
||||||
|
|
||||||
|
@java.lang.annotation.Retention
|
||||||
|
@kotlin.Metadata
|
||||||
|
public annotation class StringRes
|
||||||
Vendored
+16
@@ -0,0 +1,16 @@
|
|||||||
|
package test;
|
||||||
|
|
||||||
|
class AnnotatedParameterInInnerClassConstructor {
|
||||||
|
|
||||||
|
public @interface Anno {
|
||||||
|
String value();
|
||||||
|
}
|
||||||
|
|
||||||
|
class Inner {
|
||||||
|
Inner(@Anno("a") String a , @Anno("b") String b) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
class InnerGeneric<T> {
|
||||||
|
InnerGeneric(@Anno("a") String a , @Anno("b") String b) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
Vendored
+18
@@ -0,0 +1,18 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
public/*package*/ open class AnnotatedParameterInInnerClassConstructor {
|
||||||
|
public/*package*/ constructor AnnotatedParameterInInnerClassConstructor()
|
||||||
|
|
||||||
|
public final annotation class Anno : kotlin.Annotation {
|
||||||
|
public constructor Anno(/*0*/ value: kotlin.String)
|
||||||
|
public final val value: kotlin.String
|
||||||
|
}
|
||||||
|
|
||||||
|
public/*package*/ open inner class Inner {
|
||||||
|
public/*package*/ constructor Inner(/*0*/ @test.AnnotatedParameterInInnerClassConstructor.Anno(value = "a") p0: kotlin.String!, /*1*/ @test.AnnotatedParameterInInnerClassConstructor.Anno(value = "b") p1: kotlin.String!)
|
||||||
|
}
|
||||||
|
|
||||||
|
public/*package*/ open inner class InnerGeneric</*0*/ T : kotlin.Any!> {
|
||||||
|
public/*package*/ constructor InnerGeneric</*0*/ T : kotlin.Any!>(/*0*/ @test.AnnotatedParameterInInnerClassConstructor.Anno(value = "a") p0: kotlin.String!, /*1*/ @test.AnnotatedParameterInInnerClassConstructor.Anno(value = "b") p1: kotlin.String!)
|
||||||
|
}
|
||||||
|
}
|
||||||
+16
-1
@@ -160,8 +160,12 @@ class BytecodeListingTextCollectingVisitor(val filter: Filter, val withSignature
|
|||||||
val parameterAnnotations = hashMapOf<Int, MutableList<String>>()
|
val parameterAnnotations = hashMapOf<Int, MutableList<String>>()
|
||||||
|
|
||||||
handleModifiers(access, methodAnnotations)
|
handleModifiers(access, methodAnnotations)
|
||||||
|
val methodParamCount = Type.getArgumentTypes(desc).size
|
||||||
|
|
||||||
return object : MethodVisitor(ASM5) {
|
return object : MethodVisitor(ASM5) {
|
||||||
|
private var visibleAnnotableParameterCount = methodParamCount
|
||||||
|
private var invisibleAnnotableParameterCount = methodParamCount
|
||||||
|
|
||||||
override fun visitAnnotation(desc: String, visible: Boolean): AnnotationVisitor? {
|
override fun visitAnnotation(desc: String, visible: Boolean): AnnotationVisitor? {
|
||||||
val type = Type.getType(desc).className
|
val type = Type.getType(desc).className
|
||||||
methodAnnotations += "@$type "
|
methodAnnotations += "@$type "
|
||||||
@@ -170,7 +174,9 @@ class BytecodeListingTextCollectingVisitor(val filter: Filter, val withSignature
|
|||||||
|
|
||||||
override fun visitParameterAnnotation(parameter: Int, desc: String, visible: Boolean): AnnotationVisitor? {
|
override fun visitParameterAnnotation(parameter: Int, desc: String, visible: Boolean): AnnotationVisitor? {
|
||||||
val type = Type.getType(desc).className
|
val type = Type.getType(desc).className
|
||||||
parameterAnnotations.getOrPut(parameter, { arrayListOf() }).add("@$type ")
|
parameterAnnotations.getOrPut(
|
||||||
|
parameter + methodParamCount - (if (visible) visibleAnnotableParameterCount else invisibleAnnotableParameterCount),
|
||||||
|
{ arrayListOf() }).add("@$type ")
|
||||||
return super.visitParameterAnnotation(parameter, desc, visible)
|
return super.visitParameterAnnotation(parameter, desc, visible)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -185,6 +191,15 @@ class BytecodeListingTextCollectingVisitor(val filter: Filter, val withSignature
|
|||||||
)
|
)
|
||||||
super.visitEnd()
|
super.visitEnd()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Suppress("NOTHING_TO_OVERRIDE")
|
||||||
|
override fun visitAnnotableParameterCount(parameterCount: Int, visible: Boolean) {
|
||||||
|
if (visible)
|
||||||
|
visibleAnnotableParameterCount = parameterCount
|
||||||
|
else {
|
||||||
|
invisibleAnnotableParameterCount = parameterCount
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+10
@@ -29,6 +29,16 @@ public class CompilerLightClassTestGenerated extends AbstractCompilerLightClassT
|
|||||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/asJava/lightClasses"), Pattern.compile("^([^.]+)\\.(kt|kts)$"), TargetBackend.ANY, true, "local", "ideRegression");
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/asJava/lightClasses"), Pattern.compile("^([^.]+)\\.(kt|kts)$"), TargetBackend.ANY, true, "local", "ideRegression");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("AnnotatedParameterInEnumConstructor.kt")
|
||||||
|
public void testAnnotatedParameterInEnumConstructor() throws Exception {
|
||||||
|
runTest("compiler/testData/asJava/lightClasses/AnnotatedParameterInEnumConstructor.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("AnnotatedParameterInInnerClassConstructor.kt")
|
||||||
|
public void testAnnotatedParameterInInnerClassConstructor() throws Exception {
|
||||||
|
runTest("compiler/testData/asJava/lightClasses/AnnotatedParameterInInnerClassConstructor.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("AnnotationClass.kt")
|
@TestMetadata("AnnotationClass.kt")
|
||||||
public void testAnnotationClass() throws Exception {
|
public void testAnnotationClass() throws Exception {
|
||||||
runTest("compiler/testData/asJava/lightClasses/AnnotationClass.kt");
|
runTest("compiler/testData/asJava/lightClasses/AnnotationClass.kt");
|
||||||
|
|||||||
+5
@@ -18934,6 +18934,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
runTest("compiler/testData/codegen/box/reflection/annotations/findAnnotation.kt");
|
runTest("compiler/testData/codegen/box/reflection/annotations/findAnnotation.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("localClassParameterAnnotation.kt")
|
||||||
|
public void testLocalClassParameterAnnotation() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/reflection/annotations/localClassParameterAnnotation.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("openSuspendFun.kt")
|
@TestMetadata("openSuspendFun.kt")
|
||||||
public void testOpenSuspendFun() throws Exception {
|
public void testOpenSuspendFun() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/reflection/annotations/openSuspendFun.kt");
|
runTest("compiler/testData/codegen/box/reflection/annotations/openSuspendFun.kt");
|
||||||
|
|||||||
+5
@@ -230,6 +230,11 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest {
|
|||||||
runTest("compiler/testData/codegen/bytecodeListing/annotations/literals.kt");
|
runTest("compiler/testData/codegen/bytecodeListing/annotations/literals.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("localClassWithCapturedParams.kt")
|
||||||
|
public void testLocalClassWithCapturedParams() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/bytecodeListing/annotations/localClassWithCapturedParams.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("noAdditionalAnnotationsInAccessors.kt")
|
@TestMetadata("noAdditionalAnnotationsInAccessors.kt")
|
||||||
public void testNoAdditionalAnnotationsInAccessors() throws Exception {
|
public void testNoAdditionalAnnotationsInAccessors() throws Exception {
|
||||||
runTest("compiler/testData/codegen/bytecodeListing/annotations/noAdditionalAnnotationsInAccessors.kt");
|
runTest("compiler/testData/codegen/bytecodeListing/annotations/noAdditionalAnnotationsInAccessors.kt");
|
||||||
|
|||||||
+5
@@ -18934,6 +18934,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
runTest("compiler/testData/codegen/box/reflection/annotations/findAnnotation.kt");
|
runTest("compiler/testData/codegen/box/reflection/annotations/findAnnotation.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("localClassParameterAnnotation.kt")
|
||||||
|
public void testLocalClassParameterAnnotation() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/reflection/annotations/localClassParameterAnnotation.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("openSuspendFun.kt")
|
@TestMetadata("openSuspendFun.kt")
|
||||||
public void testOpenSuspendFun() throws Exception {
|
public void testOpenSuspendFun() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/reflection/annotations/openSuspendFun.kt");
|
runTest("compiler/testData/codegen/box/reflection/annotations/openSuspendFun.kt");
|
||||||
|
|||||||
+5
@@ -18939,6 +18939,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
runTest("compiler/testData/codegen/box/reflection/annotations/findAnnotation.kt");
|
runTest("compiler/testData/codegen/box/reflection/annotations/findAnnotation.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("localClassParameterAnnotation.kt")
|
||||||
|
public void testLocalClassParameterAnnotation() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/reflection/annotations/localClassParameterAnnotation.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("openSuspendFun.kt")
|
@TestMetadata("openSuspendFun.kt")
|
||||||
public void testOpenSuspendFun() throws Exception {
|
public void testOpenSuspendFun() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/reflection/annotations/openSuspendFun.kt");
|
runTest("compiler/testData/codegen/box/reflection/annotations/openSuspendFun.kt");
|
||||||
|
|||||||
@@ -293,6 +293,11 @@ public class LoadJavaTestGenerated extends AbstractLoadJavaTest {
|
|||||||
runTest("compiler/testData/loadJava/compiledJava/annotations/AnnotatedMethod.java");
|
runTest("compiler/testData/loadJava/compiledJava/annotations/AnnotatedMethod.java");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("AnnotatedParameterInInnerClassConstructor.java")
|
||||||
|
public void testAnnotatedParameterInInnerClassConstructor() throws Exception {
|
||||||
|
runTest("compiler/testData/loadJava/compiledJava/annotations/AnnotatedParameterInInnerClassConstructor.java");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("AnnotatedValueParameter.java")
|
@TestMetadata("AnnotatedValueParameter.java")
|
||||||
public void testAnnotatedValueParameter() throws Exception {
|
public void testAnnotatedValueParameter() throws Exception {
|
||||||
runTest("compiler/testData/loadJava/compiledJava/annotations/AnnotatedValueParameter.java");
|
runTest("compiler/testData/loadJava/compiledJava/annotations/AnnotatedValueParameter.java");
|
||||||
|
|||||||
Generated
+5
@@ -291,6 +291,11 @@ public class LoadJavaWithFastClassReadingTestGenerated extends AbstractLoadJavaW
|
|||||||
runTest("compiler/testData/loadJava/compiledJava/annotations/AnnotatedMethod.java");
|
runTest("compiler/testData/loadJava/compiledJava/annotations/AnnotatedMethod.java");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("AnnotatedParameterInInnerClassConstructor.java")
|
||||||
|
public void testAnnotatedParameterInInnerClassConstructor() throws Exception {
|
||||||
|
runTest("compiler/testData/loadJava/compiledJava/annotations/AnnotatedParameterInInnerClassConstructor.java");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("AnnotatedValueParameter.java")
|
@TestMetadata("AnnotatedValueParameter.java")
|
||||||
public void testAnnotatedValueParameter() throws Exception {
|
public void testAnnotatedValueParameter() throws Exception {
|
||||||
runTest("compiler/testData/loadJava/compiledJava/annotations/AnnotatedValueParameter.java");
|
runTest("compiler/testData/loadJava/compiledJava/annotations/AnnotatedValueParameter.java");
|
||||||
|
|||||||
Generated
+5
@@ -293,6 +293,11 @@ public class LoadJavaUsingJavacTestGenerated extends AbstractLoadJavaUsingJavacT
|
|||||||
runTest("compiler/testData/loadJava/compiledJava/annotations/AnnotatedMethod.java");
|
runTest("compiler/testData/loadJava/compiledJava/annotations/AnnotatedMethod.java");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("AnnotatedParameterInInnerClassConstructor.java")
|
||||||
|
public void testAnnotatedParameterInInnerClassConstructor() throws Exception {
|
||||||
|
runTest("compiler/testData/loadJava/compiledJava/annotations/AnnotatedParameterInInnerClassConstructor.java");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("AnnotatedValueParameter.java")
|
@TestMetadata("AnnotatedValueParameter.java")
|
||||||
public void testAnnotatedValueParameter() throws Exception {
|
public void testAnnotatedValueParameter() throws Exception {
|
||||||
runTest("compiler/testData/loadJava/compiledJava/annotations/AnnotatedValueParameter.java");
|
runTest("compiler/testData/loadJava/compiledJava/annotations/AnnotatedValueParameter.java");
|
||||||
|
|||||||
+5
@@ -3174,6 +3174,11 @@ public class JvmRuntimeDescriptorLoaderTestGenerated extends AbstractJvmRuntimeD
|
|||||||
runTest("compiler/testData/loadJava/compiledJava/annotations/AnnotatedMethod.java");
|
runTest("compiler/testData/loadJava/compiledJava/annotations/AnnotatedMethod.java");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("AnnotatedParameterInInnerClassConstructor.java")
|
||||||
|
public void testAnnotatedParameterInInnerClassConstructor() throws Exception {
|
||||||
|
runTest("compiler/testData/loadJava/compiledJava/annotations/AnnotatedParameterInInnerClassConstructor.java");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("AnnotatedValueParameter.java")
|
@TestMetadata("AnnotatedValueParameter.java")
|
||||||
public void testAnnotatedValueParameter() throws Exception {
|
public void testAnnotatedValueParameter() throws Exception {
|
||||||
runTest("compiler/testData/loadJava/compiledJava/annotations/AnnotatedValueParameter.java");
|
runTest("compiler/testData/loadJava/compiledJava/annotations/AnnotatedValueParameter.java");
|
||||||
|
|||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
// IntelliJ API Decompiler stub source generated from a class file
|
||||||
|
// Implementation of methods is not available
|
||||||
|
|
||||||
|
package test
|
||||||
|
|
||||||
|
public final enum class AnnotatedParameterInEnumConstructor private constructor(@test.AnnoA a: kotlin.String, @test.AnnoB b: kotlin.String) : kotlin.Enum<test.AnnotatedParameterInEnumConstructor> {
|
||||||
|
A;
|
||||||
|
}
|
||||||
|
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
annotation class AnnoA
|
||||||
|
annotation class AnnoB
|
||||||
|
|
||||||
|
enum class AnnotatedParameterInEnumConstructor(@AnnoA a: String, @AnnoB b: String) {
|
||||||
|
A("1", "b")
|
||||||
|
}
|
||||||
Vendored
+13
@@ -0,0 +1,13 @@
|
|||||||
|
// IntelliJ API Decompiler stub source generated from a class file
|
||||||
|
// Implementation of methods is not available
|
||||||
|
|
||||||
|
package test
|
||||||
|
|
||||||
|
public final class AnnotatedParameterInInnerClassConstructor public constructor() {
|
||||||
|
public final inner class Inner public constructor(@test.AnnoA a: kotlin.String, @test.AnnoB b: kotlin.String) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public final inner class InnerGeneric<T> public constructor(@test.AnnoA a: T, @test.AnnoB b: kotlin.String) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
annotation class AnnoA
|
||||||
|
annotation class AnnoB
|
||||||
|
|
||||||
|
class AnnotatedParameterInInnerClassConstructor {
|
||||||
|
|
||||||
|
inner class Inner(@AnnoA a: String, @AnnoB b: String) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
inner class InnerGeneric<T>(@AnnoA a: T, @AnnoB b: String) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
annotation class AnnoA
|
||||||
|
annotation class AnnoB
|
||||||
|
|
||||||
|
enum class AnnotatedParameterInEnumConstructor(@AnnoA a: String, @AnnoB b: String) {
|
||||||
|
A("1", "b")
|
||||||
|
}
|
||||||
+53
@@ -0,0 +1,53 @@
|
|||||||
|
PsiJetFileStubImpl[package=test]
|
||||||
|
PACKAGE_DIRECTIVE
|
||||||
|
REFERENCE_EXPRESSION[referencedName=test]
|
||||||
|
IMPORT_LIST
|
||||||
|
CLASS[fqName=test.AnnotatedParameterInEnumConstructor, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=AnnotatedParameterInEnumConstructor, superNames=[Enum]]
|
||||||
|
MODIFIER_LIST[enum public final]
|
||||||
|
PRIMARY_CONSTRUCTOR
|
||||||
|
MODIFIER_LIST[private]
|
||||||
|
VALUE_PARAMETER_LIST
|
||||||
|
VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=a]
|
||||||
|
MODIFIER_LIST[]
|
||||||
|
ANNOTATION_ENTRY[hasValueArguments=false, shortName=AnnoA]
|
||||||
|
CONSTRUCTOR_CALLEE
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION[referencedName=test]
|
||||||
|
REFERENCE_EXPRESSION[referencedName=AnnoA]
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION[referencedName=kotlin]
|
||||||
|
REFERENCE_EXPRESSION[referencedName=String]
|
||||||
|
VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=b]
|
||||||
|
MODIFIER_LIST[]
|
||||||
|
ANNOTATION_ENTRY[hasValueArguments=false, shortName=AnnoB]
|
||||||
|
CONSTRUCTOR_CALLEE
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION[referencedName=test]
|
||||||
|
REFERENCE_EXPRESSION[referencedName=AnnoB]
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION[referencedName=kotlin]
|
||||||
|
REFERENCE_EXPRESSION[referencedName=String]
|
||||||
|
SUPER_TYPE_LIST
|
||||||
|
SUPER_TYPE_ENTRY
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION[referencedName=kotlin]
|
||||||
|
REFERENCE_EXPRESSION[referencedName=Enum]
|
||||||
|
TYPE_ARGUMENT_LIST
|
||||||
|
TYPE_PROJECTION[projectionKind=NONE]
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION[referencedName=test]
|
||||||
|
REFERENCE_EXPRESSION[referencedName=AnnotatedParameterInEnumConstructor]
|
||||||
|
CLASS_BODY
|
||||||
|
ENUM_ENTRY[fqName=test.AnnotatedParameterInEnumConstructor.A, isEnumEntry=true, isInterface=false, isLocal=false, isTopLevel=false, name=A, superNames=[]]
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
annotation class AnnoA
|
||||||
|
annotation class AnnoB
|
||||||
|
|
||||||
|
class AnnotatedParameterInInnerClassConstructor {
|
||||||
|
|
||||||
|
inner class Inner(@AnnoA a: String, @AnnoB b: String) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
inner class InnerGeneric<T>(@AnnoA a: T, @AnnoB
|
||||||
|
b: String) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
+78
@@ -0,0 +1,78 @@
|
|||||||
|
PsiJetFileStubImpl[package=test]
|
||||||
|
PACKAGE_DIRECTIVE
|
||||||
|
REFERENCE_EXPRESSION[referencedName=test]
|
||||||
|
IMPORT_LIST
|
||||||
|
CLASS[fqName=test.AnnotatedParameterInInnerClassConstructor, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=AnnotatedParameterInInnerClassConstructor, superNames=[]]
|
||||||
|
MODIFIER_LIST[public final]
|
||||||
|
PRIMARY_CONSTRUCTOR
|
||||||
|
MODIFIER_LIST[public]
|
||||||
|
VALUE_PARAMETER_LIST
|
||||||
|
CLASS_BODY
|
||||||
|
CLASS[fqName=test.AnnotatedParameterInInnerClassConstructor.Inner, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=false, name=Inner, superNames=[]]
|
||||||
|
MODIFIER_LIST[inner public final]
|
||||||
|
PRIMARY_CONSTRUCTOR
|
||||||
|
MODIFIER_LIST[public]
|
||||||
|
VALUE_PARAMETER_LIST
|
||||||
|
VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=a]
|
||||||
|
MODIFIER_LIST[]
|
||||||
|
ANNOTATION_ENTRY[hasValueArguments=false, shortName=AnnoA]
|
||||||
|
CONSTRUCTOR_CALLEE
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION[referencedName=test]
|
||||||
|
REFERENCE_EXPRESSION[referencedName=AnnoA]
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION[referencedName=kotlin]
|
||||||
|
REFERENCE_EXPRESSION[referencedName=String]
|
||||||
|
VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=b]
|
||||||
|
MODIFIER_LIST[]
|
||||||
|
ANNOTATION_ENTRY[hasValueArguments=false, shortName=AnnoB]
|
||||||
|
CONSTRUCTOR_CALLEE
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION[referencedName=test]
|
||||||
|
REFERENCE_EXPRESSION[referencedName=AnnoB]
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION[referencedName=kotlin]
|
||||||
|
REFERENCE_EXPRESSION[referencedName=String]
|
||||||
|
CLASS_BODY
|
||||||
|
CLASS[fqName=test.AnnotatedParameterInInnerClassConstructor.InnerGeneric, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=false, name=InnerGeneric, superNames=[]]
|
||||||
|
MODIFIER_LIST[inner public final]
|
||||||
|
TYPE_PARAMETER_LIST
|
||||||
|
TYPE_PARAMETER[fqName=null, isInVariance=false, isOutVariance=false, name=T]
|
||||||
|
PRIMARY_CONSTRUCTOR
|
||||||
|
MODIFIER_LIST[public]
|
||||||
|
VALUE_PARAMETER_LIST
|
||||||
|
VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=a]
|
||||||
|
MODIFIER_LIST[]
|
||||||
|
ANNOTATION_ENTRY[hasValueArguments=false, shortName=AnnoA]
|
||||||
|
CONSTRUCTOR_CALLEE
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION[referencedName=test]
|
||||||
|
REFERENCE_EXPRESSION[referencedName=AnnoA]
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION[referencedName=T]
|
||||||
|
VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=b]
|
||||||
|
MODIFIER_LIST[]
|
||||||
|
ANNOTATION_ENTRY[hasValueArguments=false, shortName=AnnoB]
|
||||||
|
CONSTRUCTOR_CALLEE
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION[referencedName=test]
|
||||||
|
REFERENCE_EXPRESSION[referencedName=AnnoB]
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION[referencedName=kotlin]
|
||||||
|
REFERENCE_EXPRESSION[referencedName=String]
|
||||||
|
CLASS_BODY
|
||||||
+10
@@ -29,6 +29,16 @@ public class UltraLightClassSanityTestGenerated extends AbstractUltraLightClassS
|
|||||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/asJava/lightClasses"), Pattern.compile("^(.+)\\.(kt|kts)$"), TargetBackend.ANY, true);
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/asJava/lightClasses"), Pattern.compile("^(.+)\\.(kt|kts)$"), TargetBackend.ANY, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("AnnotatedParameterInEnumConstructor.kt")
|
||||||
|
public void testAnnotatedParameterInEnumConstructor() throws Exception {
|
||||||
|
runTest("compiler/testData/asJava/lightClasses/AnnotatedParameterInEnumConstructor.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("AnnotatedParameterInInnerClassConstructor.kt")
|
||||||
|
public void testAnnotatedParameterInInnerClassConstructor() throws Exception {
|
||||||
|
runTest("compiler/testData/asJava/lightClasses/AnnotatedParameterInInnerClassConstructor.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("AnnotationClass.kt")
|
@TestMetadata("AnnotationClass.kt")
|
||||||
public void testAnnotationClass() throws Exception {
|
public void testAnnotationClass() throws Exception {
|
||||||
runTest("compiler/testData/asJava/lightClasses/AnnotationClass.kt");
|
runTest("compiler/testData/asJava/lightClasses/AnnotationClass.kt");
|
||||||
|
|||||||
Generated
+10
@@ -29,6 +29,16 @@ public class IdeCompiledLightClassTestGenerated extends AbstractIdeCompiledLight
|
|||||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/asJava/lightClasses"), Pattern.compile("^([^.]+)\\.(kt|kts)$"), TargetBackend.ANY, true, "local", "compilationErrors", "ideRegression");
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/asJava/lightClasses"), Pattern.compile("^([^.]+)\\.(kt|kts)$"), TargetBackend.ANY, true, "local", "compilationErrors", "ideRegression");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("AnnotatedParameterInEnumConstructor.kt")
|
||||||
|
public void testAnnotatedParameterInEnumConstructor() throws Exception {
|
||||||
|
runTest("compiler/testData/asJava/lightClasses/AnnotatedParameterInEnumConstructor.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("AnnotatedParameterInInnerClassConstructor.kt")
|
||||||
|
public void testAnnotatedParameterInInnerClassConstructor() throws Exception {
|
||||||
|
runTest("compiler/testData/asJava/lightClasses/AnnotatedParameterInInnerClassConstructor.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("AnnotationClass.kt")
|
@TestMetadata("AnnotationClass.kt")
|
||||||
public void testAnnotationClass() throws Exception {
|
public void testAnnotationClass() throws Exception {
|
||||||
runTest("compiler/testData/asJava/lightClasses/AnnotationClass.kt");
|
runTest("compiler/testData/asJava/lightClasses/AnnotationClass.kt");
|
||||||
|
|||||||
+10
@@ -29,6 +29,16 @@ public class IdeLightClassTestGenerated extends AbstractIdeLightClassTest {
|
|||||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/asJava/lightClasses"), Pattern.compile("^([^.]+)\\.(kt|kts)$"), TargetBackend.ANY, true, "delegation");
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/asJava/lightClasses"), Pattern.compile("^([^.]+)\\.(kt|kts)$"), TargetBackend.ANY, true, "delegation");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("AnnotatedParameterInEnumConstructor.kt")
|
||||||
|
public void testAnnotatedParameterInEnumConstructor() throws Exception {
|
||||||
|
runTest("compiler/testData/asJava/lightClasses/AnnotatedParameterInEnumConstructor.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("AnnotatedParameterInInnerClassConstructor.kt")
|
||||||
|
public void testAnnotatedParameterInInnerClassConstructor() throws Exception {
|
||||||
|
runTest("compiler/testData/asJava/lightClasses/AnnotatedParameterInInnerClassConstructor.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("AnnotationClass.kt")
|
@TestMetadata("AnnotationClass.kt")
|
||||||
public void testAnnotationClass() throws Exception {
|
public void testAnnotationClass() throws Exception {
|
||||||
runTest("compiler/testData/asJava/lightClasses/AnnotationClass.kt");
|
runTest("compiler/testData/asJava/lightClasses/AnnotationClass.kt");
|
||||||
|
|||||||
Generated
+10
@@ -34,6 +34,16 @@ public class ClsStubBuilderTestGenerated extends AbstractClsStubBuilderTest {
|
|||||||
runTest("idea/testData/decompiler/stubBuilder/AnnotatedFlexibleTypes/");
|
runTest("idea/testData/decompiler/stubBuilder/AnnotatedFlexibleTypes/");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("AnnotatedParameterInEnumConstructor")
|
||||||
|
public void testAnnotatedParameterInEnumConstructor() throws Exception {
|
||||||
|
runTest("idea/testData/decompiler/stubBuilder/AnnotatedParameterInEnumConstructor/");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("AnnotatedParameterInInnerClassConstructor")
|
||||||
|
public void testAnnotatedParameterInInnerClassConstructor() throws Exception {
|
||||||
|
runTest("idea/testData/decompiler/stubBuilder/AnnotatedParameterInInnerClassConstructor/");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("AnnotationClass")
|
@TestMetadata("AnnotationClass")
|
||||||
public void testAnnotationClass() throws Exception {
|
public void testAnnotationClass() throws Exception {
|
||||||
runTest("idea/testData/decompiler/stubBuilder/AnnotationClass/");
|
runTest("idea/testData/decompiler/stubBuilder/AnnotationClass/");
|
||||||
|
|||||||
+36
@@ -34,6 +34,16 @@ public class CommonDecompiledTextFromJsMetadataTestGenerated extends AbstractCom
|
|||||||
runTest("idea/testData/decompiler/decompiledText/AnnotatedEnumEntry/");
|
runTest("idea/testData/decompiler/decompiledText/AnnotatedEnumEntry/");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("AnnotatedParameterInEnumConstructor")
|
||||||
|
public void testAnnotatedParameterInEnumConstructor() throws Exception {
|
||||||
|
runTest("idea/testData/decompiler/decompiledText/AnnotatedParameterInEnumConstructor/");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("AnnotatedParameterInInnerClassConstructor")
|
||||||
|
public void testAnnotatedParameterInInnerClassConstructor() throws Exception {
|
||||||
|
runTest("idea/testData/decompiler/decompiledText/AnnotatedParameterInInnerClassConstructor/");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("Annotations")
|
@TestMetadata("Annotations")
|
||||||
public void testAnnotations() throws Exception {
|
public void testAnnotations() throws Exception {
|
||||||
runTest("idea/testData/decompiler/decompiledText/Annotations/");
|
runTest("idea/testData/decompiler/decompiledText/Annotations/");
|
||||||
@@ -137,6 +147,32 @@ public class CommonDecompiledTextFromJsMetadataTestGenerated extends AbstractCom
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("idea/testData/decompiler/decompiledText/AnnotatedParameterInEnumConstructor")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
public static class AnnotatedParameterInEnumConstructor extends AbstractCommonDecompiledTextFromJsMetadataTest {
|
||||||
|
private void runTest(String testDataFilePath) throws Exception {
|
||||||
|
KotlinTestUtils.runTest(this::doTest, TargetBackend.JS, testDataFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testAllFilesPresentInAnnotatedParameterInEnumConstructor() throws Exception {
|
||||||
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/decompiler/decompiledText/AnnotatedParameterInEnumConstructor"), Pattern.compile("^([^\\.]+)$"), TargetBackend.JS, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("idea/testData/decompiler/decompiledText/AnnotatedParameterInInnerClassConstructor")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
public static class AnnotatedParameterInInnerClassConstructor extends AbstractCommonDecompiledTextFromJsMetadataTest {
|
||||||
|
private void runTest(String testDataFilePath) throws Exception {
|
||||||
|
KotlinTestUtils.runTest(this::doTest, TargetBackend.JS, testDataFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testAllFilesPresentInAnnotatedParameterInInnerClassConstructor() throws Exception {
|
||||||
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/decompiler/decompiledText/AnnotatedParameterInInnerClassConstructor"), Pattern.compile("^([^\\.]+)$"), TargetBackend.JS, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("idea/testData/decompiler/decompiledText/Annotations")
|
@TestMetadata("idea/testData/decompiler/decompiledText/Annotations")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
@RunWith(JUnit3RunnerWithInners.class)
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
|||||||
Generated
+36
@@ -34,6 +34,16 @@ public class CommonDecompiledTextTestGenerated extends AbstractCommonDecompiledT
|
|||||||
runTest("idea/testData/decompiler/decompiledText/AnnotatedEnumEntry/");
|
runTest("idea/testData/decompiler/decompiledText/AnnotatedEnumEntry/");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("AnnotatedParameterInEnumConstructor")
|
||||||
|
public void testAnnotatedParameterInEnumConstructor() throws Exception {
|
||||||
|
runTest("idea/testData/decompiler/decompiledText/AnnotatedParameterInEnumConstructor/");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("AnnotatedParameterInInnerClassConstructor")
|
||||||
|
public void testAnnotatedParameterInInnerClassConstructor() throws Exception {
|
||||||
|
runTest("idea/testData/decompiler/decompiledText/AnnotatedParameterInInnerClassConstructor/");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("Annotations")
|
@TestMetadata("Annotations")
|
||||||
public void testAnnotations() throws Exception {
|
public void testAnnotations() throws Exception {
|
||||||
runTest("idea/testData/decompiler/decompiledText/Annotations/");
|
runTest("idea/testData/decompiler/decompiledText/Annotations/");
|
||||||
@@ -142,6 +152,32 @@ public class CommonDecompiledTextTestGenerated extends AbstractCommonDecompiledT
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("idea/testData/decompiler/decompiledText/AnnotatedParameterInEnumConstructor")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
public static class AnnotatedParameterInEnumConstructor extends AbstractCommonDecompiledTextTest {
|
||||||
|
private void runTest(String testDataFilePath) throws Exception {
|
||||||
|
KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testAllFilesPresentInAnnotatedParameterInEnumConstructor() throws Exception {
|
||||||
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/decompiler/decompiledText/AnnotatedParameterInEnumConstructor"), Pattern.compile("^([^\\.]+)$"), TargetBackend.ANY, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("idea/testData/decompiler/decompiledText/AnnotatedParameterInInnerClassConstructor")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
public static class AnnotatedParameterInInnerClassConstructor extends AbstractCommonDecompiledTextTest {
|
||||||
|
private void runTest(String testDataFilePath) throws Exception {
|
||||||
|
KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testAllFilesPresentInAnnotatedParameterInInnerClassConstructor() throws Exception {
|
||||||
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/decompiler/decompiledText/AnnotatedParameterInInnerClassConstructor"), Pattern.compile("^([^\\.]+)$"), TargetBackend.ANY, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("idea/testData/decompiler/decompiledText/Annotations")
|
@TestMetadata("idea/testData/decompiler/decompiledText/Annotations")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
@RunWith(JUnit3RunnerWithInners.class)
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
|||||||
+5
@@ -16474,6 +16474,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/reflection/annotations/findAnnotation.kt");
|
runTest("compiler/testData/codegen/box/reflection/annotations/findAnnotation.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("localClassParameterAnnotation.kt")
|
||||||
|
public void testLocalClassParameterAnnotation() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/reflection/annotations/localClassParameterAnnotation.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("openSuspendFun.kt")
|
@TestMetadata("openSuspendFun.kt")
|
||||||
public void testOpenSuspendFun() throws Exception {
|
public void testOpenSuspendFun() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/reflection/annotations/openSuspendFun.kt");
|
runTest("compiler/testData/codegen/box/reflection/annotations/openSuspendFun.kt");
|
||||||
|
|||||||
+5
@@ -17519,6 +17519,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/reflection/annotations/findAnnotation.kt");
|
runTest("compiler/testData/codegen/box/reflection/annotations/findAnnotation.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("localClassParameterAnnotation.kt")
|
||||||
|
public void testLocalClassParameterAnnotation() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/reflection/annotations/localClassParameterAnnotation.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("openSuspendFun.kt")
|
@TestMetadata("openSuspendFun.kt")
|
||||||
public void testOpenSuspendFun() throws Exception {
|
public void testOpenSuspendFun() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/reflection/annotations/openSuspendFun.kt");
|
runTest("compiler/testData/codegen/box/reflection/annotations/openSuspendFun.kt");
|
||||||
|
|||||||
+4
-3
@@ -382,7 +382,7 @@ class ClassFileToSourceStubConverter(
|
|||||||
if (it.name == "valueOf" && it.desc == "(Ljava/lang/String;)L${clazz.name};") return@mapJList null
|
if (it.name == "valueOf" && it.desc == "(Ljava/lang/String;)L${clazz.name};") return@mapJList null
|
||||||
}
|
}
|
||||||
|
|
||||||
convertMethod(it, clazz, lineMappings, packageFqName)
|
convertMethod(it, clazz, lineMappings, packageFqName, isInner)
|
||||||
}
|
}
|
||||||
|
|
||||||
val nestedClasses = mapJList<InnerClassNode, JCTree>(clazz.innerClasses) { innerClass ->
|
val nestedClasses = mapJList<InnerClassNode, JCTree>(clazz.innerClasses) { innerClass ->
|
||||||
@@ -626,7 +626,8 @@ class ClassFileToSourceStubConverter(
|
|||||||
method: MethodNode,
|
method: MethodNode,
|
||||||
containingClass: ClassNode,
|
containingClass: ClassNode,
|
||||||
lineMappings: KaptLineMappingCollector,
|
lineMappings: KaptLineMappingCollector,
|
||||||
packageFqName: String
|
packageFqName: String,
|
||||||
|
isInner: Boolean
|
||||||
): JCMethodDecl? {
|
): JCMethodDecl? {
|
||||||
if (isIgnored(method.invisibleAnnotations)) return null
|
if (isIgnored(method.invisibleAnnotations)) return null
|
||||||
val descriptor = kaptContext.origins[method]?.descriptor as? CallableDescriptor ?: return null
|
val descriptor = kaptContext.origins[method]?.descriptor as? CallableDescriptor ?: return null
|
||||||
@@ -659,7 +660,7 @@ class ClassFileToSourceStubConverter(
|
|||||||
val asmReturnType = Type.getReturnType(method.desc)
|
val asmReturnType = Type.getReturnType(method.desc)
|
||||||
val jcReturnType = if (isConstructor) null else treeMaker.Type(asmReturnType)
|
val jcReturnType = if (isConstructor) null else treeMaker.Type(asmReturnType)
|
||||||
|
|
||||||
val parametersInfo = method.getParametersInfo(containingClass)
|
val parametersInfo = method.getParametersInfo(containingClass, isInner)
|
||||||
|
|
||||||
if (!checkIfValidTypeName(containingClass, asmReturnType)
|
if (!checkIfValidTypeName(containingClass, asmReturnType)
|
||||||
|| parametersInfo.any { !checkIfValidTypeName(containingClass, it.type) }
|
|| parametersInfo.any { !checkIfValidTypeName(containingClass, it.type) }
|
||||||
|
|||||||
+8
-4
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.kapt3.stubs
|
package org.jetbrains.kotlin.kapt3.stubs
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.codegen.AsmUtil
|
||||||
import org.jetbrains.kotlin.kapt3.util.isAbstract
|
import org.jetbrains.kotlin.kapt3.util.isAbstract
|
||||||
import org.jetbrains.kotlin.kapt3.util.isEnum
|
import org.jetbrains.kotlin.kapt3.util.isEnum
|
||||||
import org.jetbrains.kotlin.kapt3.util.isJvmOverloadsGenerated
|
import org.jetbrains.kotlin.kapt3.util.isJvmOverloadsGenerated
|
||||||
@@ -34,7 +35,7 @@ internal class ParameterInfo(
|
|||||||
val invisibleAnnotations: List<AnnotationNode>?
|
val invisibleAnnotations: List<AnnotationNode>?
|
||||||
)
|
)
|
||||||
|
|
||||||
internal fun MethodNode.getParametersInfo(containingClass: ClassNode): List<ParameterInfo> {
|
internal fun MethodNode.getParametersInfo(containingClass: ClassNode, isInnerClassMember: Boolean): List<ParameterInfo> {
|
||||||
val localVariables = this.localVariables ?: emptyList()
|
val localVariables = this.localVariables ?: emptyList()
|
||||||
val parameters = this.parameters ?: emptyList()
|
val parameters = this.parameters ?: emptyList()
|
||||||
val isStatic = isStatic(access)
|
val isStatic = isStatic(access)
|
||||||
@@ -42,7 +43,9 @@ internal fun MethodNode.getParametersInfo(containingClass: ClassNode): List<Para
|
|||||||
|
|
||||||
// First and second parameters in enum constructors are synthetic, we should ignore them
|
// First and second parameters in enum constructors are synthetic, we should ignore them
|
||||||
val isEnumConstructor = (name == "<init>") && containingClass.isEnum()
|
val isEnumConstructor = (name == "<init>") && containingClass.isEnum()
|
||||||
val startParameterIndex = if (isEnumConstructor) 2 else 0
|
val startParameterIndex =
|
||||||
|
if (isEnumConstructor) 2 else
|
||||||
|
if (isInnerClassMember && name == "<init>") 1 else 0
|
||||||
|
|
||||||
val parameterTypes = Type.getArgumentTypes(desc)
|
val parameterTypes = Type.getArgumentTypes(desc)
|
||||||
|
|
||||||
@@ -71,8 +74,9 @@ internal fun MethodNode.getParametersInfo(containingClass: ClassNode): List<Para
|
|||||||
name = "p${index - startParameterIndex}"
|
name = "p${index - startParameterIndex}"
|
||||||
}
|
}
|
||||||
|
|
||||||
val visibleAnnotations = visibleParameterAnnotations?.get(index)
|
val indexForAnnotation = if (AsmUtil.IS_BUILT_WITH_ASM6) index else index - startParameterIndex
|
||||||
val invisibleAnnotations = invisibleParameterAnnotations?.get(index)
|
val visibleAnnotations = visibleParameterAnnotations?.get(indexForAnnotation)
|
||||||
|
val invisibleAnnotations = invisibleParameterAnnotations?.get(indexForAnnotation)
|
||||||
parameterInfos += ParameterInfo(0, name, type, visibleAnnotations, invisibleAnnotations)
|
parameterInfos += ParameterInfo(0, name, type, visibleAnnotations, invisibleAnnotations)
|
||||||
}
|
}
|
||||||
return parameterInfos
|
return parameterInfos
|
||||||
|
|||||||
Reference in New Issue
Block a user