[FIR] FirJvmNameChecker: take into account effective modality
^KT-65604 Fixed Required for: KT-61798 Review: https://jetbrains.team/p/kt/reviews/14230/timeline Related tests: - DiagnosticCompilerTestFirTestdataTestGenerated$ResolveWithStdlib.testAnnotationUseSites
This commit is contained in:
+3
-1
@@ -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)
|
||||
|
||||
+6
-1
@@ -10,4 +10,9 @@ fun foo() {}
|
||||
fun fooSlash() {}
|
||||
|
||||
<!ILLEGAL_JVM_NAME!>@JvmName("<")<!>
|
||||
fun fooLT() {}
|
||||
fun fooLT() {}
|
||||
|
||||
class Foo {
|
||||
@JvmName("getFoo")
|
||||
<!NON_FINAL_MEMBER_IN_FINAL_CLASS!>open<!> fun foo() {}
|
||||
}
|
||||
|
||||
+9
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user