K2: add ACCIDENTAL_OVERRIDE_CLASH_BY_JVM_SIGNATURE for clashing functions

This diagnostic is reported on an explicitly-declared function which
overrides a regular Java function with the same signature as a hidden
one from the same scope.

#KT-64846 Fixed
This commit is contained in:
Mikhail Glukhikh
2024-01-22 18:41:45 +01:00
committed by Space Team
parent 8f9614c1fb
commit 7615d863d5
19 changed files with 138 additions and 4 deletions
@@ -5099,6 +5099,15 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirJvmErrors.ACCIDENTAL_OVERRIDE_CLASH_BY_JVM_SIGNATURE) { firDiagnostic ->
AccidentalOverrideClashByJvmSignatureImpl(
firSymbolBuilder.functionLikeBuilder.buildFunctionSymbol(firDiagnostic.a),
firDiagnostic.b,
firSymbolBuilder.functionLikeBuilder.buildFunctionSymbol(firDiagnostic.c),
firDiagnostic as KtPsiDiagnostic,
token,
)
}
add(FirJvmErrors.JAVA_TYPE_MISMATCH) { firDiagnostic ->
JavaTypeMismatchImpl(
firSymbolBuilder.typeBuilder.buildKtType(firDiagnostic.a),
@@ -3548,6 +3548,13 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
val base: KtCallableSymbol
}
interface AccidentalOverrideClashByJvmSignature : KtFirDiagnostic<KtNamedFunction> {
override val diagnosticClass get() = AccidentalOverrideClashByJvmSignature::class
val hidden: KtFunctionLikeSymbol
val overrideDescription: String
val regular: KtFunctionLikeSymbol
}
interface JavaTypeMismatch : KtFirDiagnostic<KtExpression> {
override val diagnosticClass get() = JavaTypeMismatch::class
val expectedType: KtType
@@ -4281,6 +4281,14 @@ internal class WrongNullabilityForJavaOverrideImpl(
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KtFirDiagnostic.WrongNullabilityForJavaOverride
internal class AccidentalOverrideClashByJvmSignatureImpl(
override val hidden: KtFunctionLikeSymbol,
override val overrideDescription: String,
override val regular: KtFunctionLikeSymbol,
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtNamedFunction>(firDiagnostic, token), KtFirDiagnostic.AccidentalOverrideClashByJvmSignature
internal class JavaTypeMismatchImpl(
override val expectedType: KtType,
override val actualType: KtType,