[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
|
package org.jetbrains.kotlin.fir.analysis.jvm.checkers.declaration
|
||||||
|
|
||||||
import org.jetbrains.kotlin.builtins.StandardNames
|
import org.jetbrains.kotlin.builtins.StandardNames
|
||||||
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
|
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.isInline
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.isOverridable
|
import org.jetbrains.kotlin.fir.declarations.utils.isOverridable
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.isOverride
|
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.expressions.FirLiteralExpression
|
||||||
import org.jetbrains.kotlin.fir.java.findJvmNameAnnotation
|
import org.jetbrains.kotlin.fir.java.findJvmNameAnnotation
|
||||||
import org.jetbrains.kotlin.fir.resolve.getContainingClass
|
import org.jetbrains.kotlin.fir.resolve.getContainingClass
|
||||||
@@ -47,7 +49,7 @@ object FirJvmNameChecker : FirBasicDeclarationChecker(MppCheckerKind.Common) {
|
|||||||
|
|
||||||
if (
|
if (
|
||||||
declaration.isOverride ||
|
declaration.isOverride ||
|
||||||
declaration.isOverridable ||
|
containingClass != null && containingClass.modality != Modality.FINAL && declaration.isOverridable ||
|
||||||
containingClass?.isValueClassThatRequiresMangling() == true
|
containingClass?.isValueClassThatRequiresMangling() == true
|
||||||
) {
|
) {
|
||||||
reporter.reportOn(jvmName.source, FirJvmErrors.INAPPLICABLE_JVM_NAME, context)
|
reporter.reportOn(jvmName.source, FirJvmErrors.INAPPLICABLE_JVM_NAME, context)
|
||||||
|
|||||||
+6
-1
@@ -10,4 +10,9 @@ fun foo() {}
|
|||||||
fun fooSlash() {}
|
fun fooSlash() {}
|
||||||
|
|
||||||
<!ILLEGAL_JVM_NAME!>@JvmName("<")<!>
|
<!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 foo(/*0*/ a: kotlin.Any): kotlin.Unit
|
||||||
@kotlin.jvm.JvmName(name = "<") public fun fooLT(): kotlin.Unit
|
@kotlin.jvm.JvmName(name = "<") public fun fooLT(): kotlin.Unit
|
||||||
@kotlin.jvm.JvmName(name = "/") public fun fooSlash(): 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