diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmNameChecker.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmNameChecker.kt index 8e26c92e4e0..165f447de12 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmNameChecker.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmNameChecker.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.analysis.jvm.checkers.declaration import org.jetbrains.kotlin.builtins.StandardNames +import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.diagnostics.reportOn import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind @@ -17,6 +18,7 @@ import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.utils.isInline import org.jetbrains.kotlin.fir.declarations.utils.isOverridable import org.jetbrains.kotlin.fir.declarations.utils.isOverride +import org.jetbrains.kotlin.fir.declarations.utils.modality import org.jetbrains.kotlin.fir.expressions.FirLiteralExpression import org.jetbrains.kotlin.fir.java.findJvmNameAnnotation import org.jetbrains.kotlin.fir.resolve.getContainingClass @@ -47,7 +49,7 @@ object FirJvmNameChecker : FirBasicDeclarationChecker(MppCheckerKind.Common) { if ( declaration.isOverride || - declaration.isOverridable || + containingClass != null && containingClass.modality != Modality.FINAL && declaration.isOverridable || containingClass?.isValueClassThatRequiresMangling() == true ) { reporter.reportOn(jvmName.source, FirJvmErrors.INAPPLICABLE_JVM_NAME, context) diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationApplicability/illegalPlatformName.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationApplicability/illegalPlatformName.kt index 4fc6a40dab4..ef5ac0d90db 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationApplicability/illegalPlatformName.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationApplicability/illegalPlatformName.kt @@ -10,4 +10,9 @@ fun foo() {} fun fooSlash() {} @JvmName("<") -fun fooLT() {} \ No newline at end of file +fun fooLT() {} + +class Foo { + @JvmName("getFoo") + open fun foo() {} +} diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationApplicability/illegalPlatformName.txt b/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationApplicability/illegalPlatformName.txt index 68d3341b9d1..7244fd94113 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationApplicability/illegalPlatformName.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/annotationApplicability/illegalPlatformName.txt @@ -4,3 +4,12 @@ package @kotlin.jvm.JvmName(name = "") public fun foo(/*0*/ a: kotlin.Any): kotlin.Unit @kotlin.jvm.JvmName(name = "<") public fun fooLT(): kotlin.Unit @kotlin.jvm.JvmName(name = "/") public fun fooSlash(): kotlin.Unit + +public final class Foo { + public constructor Foo() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + @kotlin.jvm.JvmName(name = "getFoo") public open fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} +