diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/DefaultParameterValueSubstitutor.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/DefaultParameterValueSubstitutor.kt index f2ccfb0db3c..a2fab9004f4 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/DefaultParameterValueSubstitutor.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/DefaultParameterValueSubstitutor.kt @@ -121,7 +121,10 @@ class DefaultParameterValueSubstitutor(val state: GenerationState) { ) { val typeMapper = state.typeMapper val isStatic = AsmUtil.isStaticMethod(contextKind, functionDescriptor) - val flags = AsmUtil.getCommonCallableFlags(functionDescriptor) or (if (isStatic) Opcodes.ACC_STATIC else 0) + val flags = AsmUtil.getCommonCallableFlags(functionDescriptor) or + (if (isStatic) Opcodes.ACC_STATIC else 0) or + (if (functionDescriptor.modality == Modality.FINAL && functionDescriptor !is ConstructorDescriptor) Opcodes.ACC_FINAL else 0) + val remainingParameters = getRemainingParameters(functionDescriptor.original, substituteCount) val signature = typeMapper.mapSignature(functionDescriptor, contextKind, remainingParameters, false) val mv = classBuilder.newMethod(OtherOrigin(methodElement, functionDescriptor), flags, diff --git a/compiler/testData/asJava/lightClasses/nullabilityAnnotations/JvmOverloads.java b/compiler/testData/asJava/lightClasses/nullabilityAnnotations/JvmOverloads.java index 8faae74ef77..b3915cdfa59 100644 --- a/compiler/testData/asJava/lightClasses/nullabilityAnnotations/JvmOverloads.java +++ b/compiler/testData/asJava/lightClasses/nullabilityAnnotations/JvmOverloads.java @@ -5,11 +5,11 @@ public final class C { @kotlin.jvm.JvmOverloads @org.jetbrains.annotations.NotNull - public java.lang.String foo(@org.jetbrains.annotations.NotNull java.lang.String o, @org.jetbrains.annotations.NotNull java.lang.String o1, @org.jetbrains.annotations.Nullable java.lang.String o4) { /* compiled code */ } + public final java.lang.String foo(@org.jetbrains.annotations.NotNull java.lang.String o, @org.jetbrains.annotations.NotNull java.lang.String o1, @org.jetbrains.annotations.Nullable java.lang.String o4) { /* compiled code */ } @kotlin.jvm.JvmOverloads @org.jetbrains.annotations.NotNull - public java.lang.String foo(@org.jetbrains.annotations.NotNull java.lang.String o1, @org.jetbrains.annotations.Nullable java.lang.String o4) { /* compiled code */ } + public final java.lang.String foo(@org.jetbrains.annotations.NotNull java.lang.String o1, @org.jetbrains.annotations.Nullable java.lang.String o4) { /* compiled code */ } public C() { /* compiled code */ } } \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeListing/annotations/deprecatedJvmOverloads.kt b/compiler/testData/codegen/bytecodeListing/annotations/deprecatedJvmOverloads.kt new file mode 100644 index 00000000000..4f1e3679454 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/annotations/deprecatedJvmOverloads.kt @@ -0,0 +1,4 @@ +class Foo { + @JvmOverloads @Deprecated(message = "Foo") fun bar(x: String = "") { + } +} diff --git a/compiler/testData/codegen/bytecodeListing/annotations/deprecatedJvmOverloads.txt b/compiler/testData/codegen/bytecodeListing/annotations/deprecatedJvmOverloads.txt new file mode 100644 index 00000000000..8b4d98a5c5c --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/annotations/deprecatedJvmOverloads.txt @@ -0,0 +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 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/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java index 444c56f1409..3baf0e536b3 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java @@ -122,6 +122,12 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest { doTest(fileName); } + @TestMetadata("deprecatedJvmOverloads.kt") + public void testDeprecatedJvmOverloads() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeListing/annotations/deprecatedJvmOverloads.kt"); + doTest(fileName); + } + @TestMetadata("JvmSynthetic.kt") public void testJvmSynthetic() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeListing/annotations/JvmSynthetic.kt"); diff --git a/plugins/annotation-processing/testData/wrappers/kotlinWrappers/kotlinAnnotations.txt b/plugins/annotation-processing/testData/wrappers/kotlinWrappers/kotlinAnnotations.txt index 4cd7a94c13f..17045e27fa6 100644 --- a/plugins/annotation-processing/testData/wrappers/kotlinWrappers/kotlinAnnotations.txt +++ b/plugins/annotation-processing/testData/wrappers/kotlinWrappers/kotlinAnnotations.txt @@ -16,10 +16,10 @@ public final class Test { public final void c(int a, java.lang.String b) @kotlin.jvm.JvmOverloads - public void c(int a) + public final void c(int a) @kotlin.jvm.JvmOverloads - public void c() + public final void c() @java.lang.Deprecated public final void d()