diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java index 4f2e73f555e..5ef82aea9ab 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java @@ -1208,10 +1208,6 @@ public class FunctionCodegen { getThrownExceptions(functionDescriptor, typeMapper) ); - // Only method annotations are copied to the $default method. Parameter annotations are not copied until there are valid use cases; - // enum constructors have two additional synthetic parameters which somewhat complicate this task - AnnotationCodegen.forMethod(mv, memberCodegen, state).genAnnotations(functionDescriptor, defaultMethod.getReturnType()); - if (!state.getClassBuilderMode().generateBodies) { if (this.owner instanceof MultifileClassFacadeContext) endVisit(mv, "default method delegation", getSourceFromDescriptor(functionDescriptor)); diff --git a/compiler/testData/codegen/box/annotations/annotationsOnDefault.kt b/compiler/testData/codegen/box/annotations/annotationsOnDefault.kt index 8414bf7f7a1..86bf61f1156 100644 --- a/compiler/testData/codegen/box/annotations/annotationsOnDefault.kt +++ b/compiler/testData/codegen/box/annotations/annotationsOnDefault.kt @@ -18,22 +18,26 @@ fun test(name: String, annotations: Array) { assertEquals(1, annotations.filterIsInstance().single().x, "$name[0]") } +fun testAbsence(name: String, annotations: Array) { + assertEquals(0, annotations.filterIsInstance().size, "$name") +} + fun box(): String { val foo = A::class.java.getDeclaredMethods().first { it.getName() == "foo" } test("foo", foo.getDeclaredAnnotations()) val fooDefault = A::class.java.getDeclaredMethods().first { it.getName() == "foo\$default" } - test("foo", foo.getDeclaredAnnotations()) + testAbsence("foo\$default", fooDefault.getDeclaredAnnotations()) val (secondary, secondaryDefault) = A::class.java.getDeclaredConstructors().partition { it.getParameterTypes().size == 3 } test("secondary", secondary[0].getDeclaredAnnotations()) - test("secondary\$default", secondaryDefault[0].getDeclaredAnnotations()) + testAbsence("secondary\$default", secondaryDefault[0].getDeclaredAnnotations()) val (primary, primaryDefault) = B::class.java.getConstructors().partition { it.getParameterTypes().size == 3 } test("primary", primary[0].getDeclaredAnnotations()) - test("primary\$default", primaryDefault[0].getDeclaredAnnotations()) + testAbsence("primary\$default", primaryDefault[0].getDeclaredAnnotations()) return "OK" } diff --git a/compiler/testData/codegen/bytecodeListing/annotations/deprecatedJvmOverloads.txt b/compiler/testData/codegen/bytecodeListing/annotations/deprecatedJvmOverloads.txt index 8b4d98a5c5c..75fe8b0aa8f 100644 --- a/compiler/testData/codegen/bytecodeListing/annotations/deprecatedJvmOverloads.txt +++ b/compiler/testData/codegen/bytecodeListing/annotations/deprecatedJvmOverloads.txt @@ -1,7 +1,7 @@ @kotlin.Metadata public final class Foo { public method (): void - public synthetic deprecated static @kotlin.Deprecated @kotlin.jvm.JvmOverloads method bar$default(p0: Foo, p1: java.lang.String, p2: int, p3: java.lang.Object): void + public synthetic deprecated static method bar$default(p0: Foo, p1: java.lang.String, p2: int, p3: java.lang.Object): void public deprecated final @kotlin.Deprecated @kotlin.jvm.JvmOverloads method bar(): void public deprecated final @kotlin.Deprecated @kotlin.jvm.JvmOverloads method bar(@org.jetbrains.annotations.NotNull p0: java.lang.String): void } \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/annotations/kt27895.txt b/compiler/testData/codegen/bytecodeListing/annotations/kt27895.txt index 6bf19f0e55c..51a7f63c10f 100644 --- a/compiler/testData/codegen/bytecodeListing/annotations/kt27895.txt +++ b/compiler/testData/codegen/bytecodeListing/annotations/kt27895.txt @@ -10,7 +10,7 @@ public final class C { private final field x: int public method (p0: int): void public final method component1(): int - public synthetic static @org.jetbrains.annotations.NotNull method copy$default(p0: C, p1: int, p2: int, p3: java.lang.Object): C + public synthetic static method copy$default(p0: C, p1: int, p2: int, p3: java.lang.Object): C public final @org.jetbrains.annotations.NotNull method copy(): C public final @org.jetbrains.annotations.NotNull method copy(p0: int): C public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean diff --git a/compiler/testData/codegen/bytecodeListing/jvmOverloadsAndParametersAnnotations.txt b/compiler/testData/codegen/bytecodeListing/jvmOverloadsAndParametersAnnotations.txt index 3ef26525862..3759a5489d3 100644 --- a/compiler/testData/codegen/bytecodeListing/jvmOverloadsAndParametersAnnotations.txt +++ b/compiler/testData/codegen/bytecodeListing/jvmOverloadsAndParametersAnnotations.txt @@ -1,18 +1,18 @@ @kotlin.Metadata public final class ASimpleClass { public method (): 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 synthetic static 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 synthetic static 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 synthetic static 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 synthetic static 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 } @@ -22,18 +22,18 @@ public final class BSimpleObject { public final static field INSTANCE: BSimpleObject static method (): void private method (): 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 synthetic static 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 synthetic static 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 synthetic static 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 synthetic static 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 } @@ -43,18 +43,18 @@ public final class CClassWithCompanion$Companion { inner class CClassWithCompanion$Companion private method (): void public synthetic method (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 synthetic static 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 synthetic static 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 synthetic static 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 synthetic static 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 } @@ -86,8 +86,8 @@ public final class DClassConstuctors$InnerClass { public @kotlin.jvm.JvmOverloads method (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 (p0: DClassConstuctors, @StringRes p1: int, @LongRes p2: long): void public @kotlin.jvm.JvmOverloads method (p0: DClassConstuctors, @StringRes p1: int, p2: int): void - public synthetic @kotlin.jvm.JvmOverloads method (p0: DClassConstuctors, p1: int, p2: int, p3: int, p4: kotlin.jvm.internal.DefaultConstructorMarker): void - public synthetic @kotlin.jvm.JvmOverloads method (p0: DClassConstuctors, p1: int, p2: int, p3: long, p4: java.lang.String, p5: int, p6: kotlin.jvm.internal.DefaultConstructorMarker): void + public synthetic method (p0: DClassConstuctors, p1: int, p2: int, p3: int, p4: kotlin.jvm.internal.DefaultConstructorMarker): void + public synthetic method (p0: DClassConstuctors, p1: int, p2: int, p3: long, p4: java.lang.String, p5: int, p6: kotlin.jvm.internal.DefaultConstructorMarker): void } @kotlin.Metadata @@ -98,8 +98,8 @@ public final class DClassConstuctors { public @kotlin.jvm.JvmOverloads method (@StringRes p0: int, @DefRes p1: int, @LongRes p2: long, @org.jetbrains.annotations.NotNull p3: java.lang.String): void public @kotlin.jvm.JvmOverloads method (@StringRes p0: int, @LongRes p1: long): void public @kotlin.jvm.JvmOverloads method (@StringRes p0: int, p1: int): void - public synthetic @kotlin.jvm.JvmOverloads method (p0: int, p1: int, p2: int, p3: kotlin.jvm.internal.DefaultConstructorMarker): void - public synthetic @kotlin.jvm.JvmOverloads method (p0: int, p1: int, p2: long, p3: java.lang.String, p4: int, p5: kotlin.jvm.internal.DefaultConstructorMarker): void + public synthetic method (p0: int, p1: int, p2: int, p3: kotlin.jvm.internal.DefaultConstructorMarker): void + public synthetic method (p0: int, p1: int, p2: long, p3: java.lang.String, p4: int, p5: kotlin.jvm.internal.DefaultConstructorMarker): void } @java.lang.annotation.Retention @@ -108,18 +108,18 @@ 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 synthetic static 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 synthetic static 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 synthetic static 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 synthetic static 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 } diff --git a/compiler/testData/codegen/kapt/dataClass.txt b/compiler/testData/codegen/kapt/dataClass.txt index 59494139879..5a187fce7c9 100644 --- a/compiler/testData/codegen/kapt/dataClass.txt +++ b/compiler/testData/codegen/kapt/dataClass.txt @@ -5,7 +5,7 @@ public final class User { public method (@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: int): void public final @org.jetbrains.annotations.NotNull method component1(): java.lang.String public final method component2(): int - public synthetic static @org.jetbrains.annotations.NotNull method copy$default(p0: User, p1: java.lang.String, p2: int, p3: int, p4: java.lang.Object): User + public synthetic static method copy$default(p0: User, p1: java.lang.String, p2: int, p3: int, p4: java.lang.Object): User public final @org.jetbrains.annotations.NotNull method copy(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: int): User public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean public final method getAge(): int diff --git a/compiler/testData/codegen/kapt/jvmOverloads.txt b/compiler/testData/codegen/kapt/jvmOverloads.txt index a057da8c866..a4cc72e1f97 100644 --- a/compiler/testData/codegen/kapt/jvmOverloads.txt +++ b/compiler/testData/codegen/kapt/jvmOverloads.txt @@ -1,7 +1,7 @@ @kotlin.Metadata public final class Test { public method (): void - public synthetic static @kotlin.jvm.JvmOverloads method b$default(p0: Test, p1: java.lang.String, p2: int, p3: char, p4: int, p5: java.lang.Object): void + public synthetic static method b$default(p0: Test, p1: java.lang.String, p2: int, p3: char, p4: int, p5: java.lang.Object): void public final @kotlin.jvm.JvmOverloads @synthetic.kotlin.jvm.GeneratedByJvmOverloads method b(): void public final @kotlin.jvm.JvmOverloads @synthetic.kotlin.jvm.GeneratedByJvmOverloads method b(@org.jetbrains.annotations.NotNull p0: java.lang.String): void public final @kotlin.jvm.JvmOverloads @synthetic.kotlin.jvm.GeneratedByJvmOverloads method b(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: int): void