[FIR] Remove or replace whole expressions in FIR diagnostic messages

FIR expressions rendered by FirRenderer don't look very nice in error
messages anyway, and additionally, they can become arbitrarily large,
so we shouldn't use them in messages.

#KT-59449 Fixed
This commit is contained in:
Kirill Rakhman
2023-06-20 17:06:58 +02:00
committed by Space Team
parent 0f0f0d604f
commit 6318da0f02
21 changed files with 110 additions and 47 deletions
@@ -3586,8 +3586,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
}
add(FirErrors.SENSELESS_COMPARISON) { firDiagnostic ->
SenselessComparisonImpl(
firDiagnostic.a.source!!.psi as KtExpression,
firDiagnostic.b,
firDiagnostic.a,
firDiagnostic as KtPsiDiagnostic,
token,
)
@@ -3621,18 +3620,20 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
}
add(FirErrors.UNSAFE_INFIX_CALL) { firDiagnostic ->
UnsafeInfixCallImpl(
firDiagnostic.a.source!!.psi as KtExpression,
firDiagnostic.b,
firDiagnostic.c.source!!.psi as KtExpression,
firSymbolBuilder.typeBuilder.buildKtType(firDiagnostic.a),
firDiagnostic.b.source!!.psi as KtExpression,
firDiagnostic.c,
firDiagnostic.d.source!!.psi as KtExpression,
firDiagnostic as KtPsiDiagnostic,
token,
)
}
add(FirErrors.UNSAFE_OPERATOR_CALL) { firDiagnostic ->
UnsafeOperatorCallImpl(
firDiagnostic.a.source!!.psi as KtExpression,
firDiagnostic.b,
firDiagnostic.c.source!!.psi as KtExpression,
firSymbolBuilder.typeBuilder.buildKtType(firDiagnostic.a),
firDiagnostic.b.source!!.psi as KtExpression,
firDiagnostic.c,
firDiagnostic.d.source!!.psi as KtExpression,
firDiagnostic as KtPsiDiagnostic,
token,
)
@@ -4315,8 +4316,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
}
add(FirErrors.INVALID_DEFAULT_FUNCTIONAL_PARAMETER_FOR_INLINE) { firDiagnostic ->
InvalidDefaultFunctionalParameterForInlineImpl(
firDiagnostic.a.source!!.psi as KtExpression,
firSymbolBuilder.buildSymbol(firDiagnostic.b),
firSymbolBuilder.buildSymbol(firDiagnostic.a),
firDiagnostic as KtPsiDiagnostic,
token,
)
@@ -2506,7 +2506,6 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
interface SenselessComparison : KtFirDiagnostic<KtExpression> {
override val diagnosticClass get() = SenselessComparison::class
val expression: KtExpression
val compareResult: Boolean
}
@@ -2531,6 +2530,7 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
interface UnsafeInfixCall : KtFirDiagnostic<KtExpression> {
override val diagnosticClass get() = UnsafeInfixCall::class
val receiverType: KtType
val receiverExpression: KtExpression
val operator: String
val argumentExpression: KtExpression
@@ -2538,6 +2538,7 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
interface UnsafeOperatorCall : KtFirDiagnostic<KtExpression> {
override val diagnosticClass get() = UnsafeOperatorCall::class
val receiverType: KtType
val receiverExpression: KtExpression
val operator: String
val argumentExpression: KtExpression
@@ -3011,7 +3012,6 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
interface InvalidDefaultFunctionalParameterForInline : KtFirDiagnostic<KtElement> {
override val diagnosticClass get() = InvalidDefaultFunctionalParameterForInline::class
val defaultValue: KtExpression
val parameter: KtSymbol
}
@@ -3018,7 +3018,6 @@ internal class UnreachableCodeImpl(
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.UnreachableCode
internal class SenselessComparisonImpl(
override val expression: KtExpression,
override val compareResult: Boolean,
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
@@ -3048,6 +3047,7 @@ internal class UnsafeImplicitInvokeCallImpl(
) : KtAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KtFirDiagnostic.UnsafeImplicitInvokeCall
internal class UnsafeInfixCallImpl(
override val receiverType: KtType,
override val receiverExpression: KtExpression,
override val operator: String,
override val argumentExpression: KtExpression,
@@ -3056,6 +3056,7 @@ internal class UnsafeInfixCallImpl(
) : KtAbstractFirDiagnostic<KtExpression>(firDiagnostic, token), KtFirDiagnostic.UnsafeInfixCall
internal class UnsafeOperatorCallImpl(
override val receiverType: KtType,
override val receiverExpression: KtExpression,
override val operator: String,
override val argumentExpression: KtExpression,
@@ -3629,7 +3630,6 @@ internal class NonInternalPublishedApiImpl(
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.NonInternalPublishedApi
internal class InvalidDefaultFunctionalParameterForInlineImpl(
override val defaultValue: KtExpression,
override val parameter: KtSymbol,
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
@@ -29742,6 +29742,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/senselessComparison"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true, "multiplatform");
}
@Test
@TestMetadata("complexExpression.kt")
public void testComplexExpression() throws Exception {
runTest("compiler/testData/diagnostics/tests/senselessComparison/complexExpression.kt");
}
@Test
@TestMetadata("noExplicitType.kt")
public void testNoExplicitType() throws Exception {
@@ -29742,6 +29742,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/senselessComparison"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true, "multiplatform");
}
@Test
@TestMetadata("complexExpression.kt")
public void testComplexExpression() throws Exception {
runTest("compiler/testData/diagnostics/tests/senselessComparison/complexExpression.kt");
}
@Test
@TestMetadata("noExplicitType.kt")
public void testNoExplicitType() throws Exception {