[FIR] Additional errors to distinguish resolution to classifier cases
When a call is resolved to a classifier, only a single error message was being used for multiple cases. This lead to confusion as the default message may not be applicable to a given error case. Added additional errors and messages to distinguish between these error cases. #KT-57251 Fixed
This commit is contained in:
+21
@@ -389,6 +389,27 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.INTERFACE_AS_FUNCTION) { firDiagnostic ->
|
||||
InterfaceAsFunctionImpl(
|
||||
firSymbolBuilder.classifierBuilder.buildClassLikeSymbol(firDiagnostic.a),
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.EXPECT_CLASS_AS_FUNCTION) { firDiagnostic ->
|
||||
ExpectClassAsFunctionImpl(
|
||||
firSymbolBuilder.classifierBuilder.buildClassLikeSymbol(firDiagnostic.a),
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.INNER_CLASS_CONSTRUCTOR_NO_RECEIVER) { firDiagnostic ->
|
||||
InnerClassConstructorNoReceiverImpl(
|
||||
firSymbolBuilder.classifierBuilder.buildClassLikeSymbol(firDiagnostic.a),
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.RESOLUTION_TO_CLASSIFIER) { firDiagnostic ->
|
||||
ResolutionToClassifierImpl(
|
||||
firSymbolBuilder.classifierBuilder.buildClassLikeSymbol(firDiagnostic.a),
|
||||
|
||||
+15
@@ -313,6 +313,21 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
|
||||
val type: KtType
|
||||
}
|
||||
|
||||
interface InterfaceAsFunction : KtFirDiagnostic<PsiElement> {
|
||||
override val diagnosticClass get() = InterfaceAsFunction::class
|
||||
val classSymbol: KtClassLikeSymbol
|
||||
}
|
||||
|
||||
interface ExpectClassAsFunction : KtFirDiagnostic<PsiElement> {
|
||||
override val diagnosticClass get() = ExpectClassAsFunction::class
|
||||
val classSymbol: KtClassLikeSymbol
|
||||
}
|
||||
|
||||
interface InnerClassConstructorNoReceiver : KtFirDiagnostic<PsiElement> {
|
||||
override val diagnosticClass get() = InnerClassConstructorNoReceiver::class
|
||||
val classSymbol: KtClassLikeSymbol
|
||||
}
|
||||
|
||||
interface ResolutionToClassifier : KtFirDiagnostic<PsiElement> {
|
||||
override val diagnosticClass get() = ResolutionToClassifier::class
|
||||
val classSymbol: KtClassLikeSymbol
|
||||
|
||||
+18
@@ -361,6 +361,24 @@ internal class FunctionExpectedImpl(
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KtFirDiagnostic.FunctionExpected
|
||||
|
||||
internal class InterfaceAsFunctionImpl(
|
||||
override val classSymbol: KtClassLikeSymbol,
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KtFirDiagnostic.InterfaceAsFunction
|
||||
|
||||
internal class ExpectClassAsFunctionImpl(
|
||||
override val classSymbol: KtClassLikeSymbol,
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KtFirDiagnostic.ExpectClassAsFunction
|
||||
|
||||
internal class InnerClassConstructorNoReceiverImpl(
|
||||
override val classSymbol: KtClassLikeSymbol,
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KtFirDiagnostic.InnerClassConstructorNoReceiver
|
||||
|
||||
internal class ResolutionToClassifierImpl(
|
||||
override val classSymbol: KtClassLikeSymbol,
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
|
||||
Reference in New Issue
Block a user