diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/declarationCheckers.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/declarationCheckers.kt index 2060f6f40a8..7041075f017 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/declarationCheckers.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/declarationCheckers.kt @@ -152,10 +152,7 @@ class JvmNameAnnotationChecker : DeclarationChecker { if (descriptor is CallableMemberDescriptor) { if (DescriptorUtils.isOverride(descriptor) || descriptor.isOverridable) { diagnosticHolder.report(ErrorsJvm.INAPPLICABLE_JVM_NAME.on(annotationEntry)) - } else if (descriptor.containingDeclaration.isInlineClassThatRequiresMangling() || - requiresFunctionNameManglingForParameterTypes(descriptor) || - requiresFunctionNameManglingForReturnType(descriptor) - ) { + } else if (descriptor.containingDeclaration.isInlineClassThatRequiresMangling()) { diagnosticHolder.report(ErrorsJvm.INAPPLICABLE_JVM_NAME.on(annotationEntry)) } } diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/jvmName.kt b/compiler/testData/codegen/bytecodeListing/inlineClasses/jvmName.kt new file mode 100644 index 00000000000..fa631b19278 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/jvmName.kt @@ -0,0 +1,29 @@ +// !LANGUAGE: +InlineClasses +// WITH_RUNTIME + +inline class Foo(val a: Any) + +@JvmName("bar") +fun bar(f: Foo) {} + +@JvmName("baz") +fun baz(r: Result) {} + +@JvmName("test") +fun returnsInlineClass() = Foo(1) + +@JvmName("test") +@Suppress("RESULT_CLASS_IN_RETURN_TYPE") +fun returnsKotlinResult(a: Result): Result = a + +class C { + @JvmName("test") + fun returnsInlineClass() = Foo(1) + + @JvmName("test") + @Suppress("RESULT_CLASS_IN_RETURN_TYPE") + fun returnsKotlinResult(a: Result): Result = a +} + +@JvmName("extensionFun") +fun Foo.extensionFun() {} diff --git a/compiler/testData/codegen/bytecodeListing/inlineClasses/jvmName.txt b/compiler/testData/codegen/bytecodeListing/inlineClasses/jvmName.txt new file mode 100644 index 00000000000..6f47578950e --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/inlineClasses/jvmName.txt @@ -0,0 +1,35 @@ +@kotlin.Metadata +public final class C { + // source: 'jvmName.kt' + public method (): void + public final @kotlin.jvm.JvmName @org.jetbrains.annotations.NotNull method test(): java.lang.Object + public final @kotlin.jvm.JvmName @org.jetbrains.annotations.NotNull method test(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object +} + +@kotlin.Metadata +public final class Foo { + // source: 'jvmName.kt' + private final @org.jetbrains.annotations.NotNull field a: java.lang.Object + private synthetic method (p0: java.lang.Object): void + public synthetic final static method box-impl(p0: java.lang.Object): Foo + public static @org.jetbrains.annotations.NotNull method constructor-impl(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object + public method equals(p0: java.lang.Object): boolean + public static method equals-impl(p0: java.lang.Object, p1: java.lang.Object): boolean + public final static method equals-impl0(p0: java.lang.Object, p1: java.lang.Object): boolean + public final @org.jetbrains.annotations.NotNull method getA(): java.lang.Object + public method hashCode(): int + public static method hashCode-impl(p0: java.lang.Object): int + public method toString(): java.lang.String + public static method toString-impl(p0: java.lang.Object): java.lang.String + public synthetic final method unbox-impl(): java.lang.Object +} + +@kotlin.Metadata +public final class JvmNameKt { + // source: 'jvmName.kt' + public final static @kotlin.jvm.JvmName method bar(@org.jetbrains.annotations.NotNull p0: java.lang.Object): void + public final static @kotlin.jvm.JvmName method baz(@org.jetbrains.annotations.NotNull p0: java.lang.Object): void + public final static @kotlin.jvm.JvmName method extensionFun(@org.jetbrains.annotations.NotNull p0: java.lang.Object): void + public final static @kotlin.jvm.JvmName @org.jetbrains.annotations.NotNull method test(): java.lang.Object + public final static @kotlin.jvm.JvmName @org.jetbrains.annotations.NotNull method test(@org.jetbrains.annotations.NotNull p0: java.lang.Object): java.lang.Object +} diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationApplicability/jvmNameOnMangledNames.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationApplicability/jvmNameOnMangledNames.kt index 2422426f648..6842cfb2732 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationApplicability/jvmNameOnMangledNames.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationApplicability/jvmNameOnMangledNames.kt @@ -6,7 +6,7 @@ inline class Foo(val x: Int) { fun simple() {} } -@JvmName("bad") +@JvmName("bad") fun bar(f: Foo) {} @JvmName("good") @@ -19,12 +19,12 @@ fun returnsInlineClass() = Foo(1) fun returnsKotlinResult(a: Result): Result = a class C { - @JvmName("test") + @JvmName("test") fun returnsInlineClass() = Foo(1) - @JvmName("test") + @JvmName("test") fun returnsKotlinResult(a: Result): Result = a } -@JvmName("extensionFun") +@JvmName("extensionFun") fun Foo.extensionFun() {} diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java index 3819622fa50..50083f9262c 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/BytecodeListingTestGenerated.java @@ -982,6 +982,11 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest { runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithManyKindsOfMembers.kt"); } + @TestMetadata("jvmName.kt") + public void testJvmName() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/jvmName.kt"); + } + @TestMetadata("jvmOverloadsOnTopLevelFunctionReturningInlineClassValue.kt") public void testJvmOverloadsOnTopLevelFunctionReturningInlineClassValue() throws Exception { runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/jvmOverloadsOnTopLevelFunctionReturningInlineClassValue.kt"); diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java index cd94d0bd371..16284c09f95 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBytecodeListingTestGenerated.java @@ -952,6 +952,11 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithManyKindsOfMembers.kt"); } + @TestMetadata("jvmName.kt") + public void testJvmName() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/jvmName.kt"); + } + @TestMetadata("jvmOverloadsOnTopLevelFunctionReturningInlineClassValue.kt") public void testJvmOverloadsOnTopLevelFunctionReturningInlineClassValue() throws Exception { runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/jvmOverloadsOnTopLevelFunctionReturningInlineClassValue.kt");