From 1626057f75845a8cbf93119806662d16e12439ac Mon Sep 17 00:00:00 2001 From: Kirill Rakhman Date: Fri, 26 Jan 2024 14:34:34 +0100 Subject: [PATCH] [FIR] Improve rendering of override related diagnostics Render symbols completely and add containing declaration. --- .../diagnostics/FirDiagnosticRenderers.kt | 4 ++ .../diagnostics/FirErrorsDefaultMessages.kt | 45 ++++++++++--------- .../cli/jvm/twoDiagnosticsOnSingleElement.out | 2 +- .../rendering/notImplementedMembers.fir.kt | 2 +- 4 files changed, 29 insertions(+), 24 deletions(-) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticRenderers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticRenderers.kt index 0d9cc3d1491..d777ed7c955 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticRenderers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticRenderers.kt @@ -211,4 +211,8 @@ object FirDiagnosticRenderers { val FOR_OPTIONAL_OPERATOR = Renderer { it: String? -> if (!it.isNullOrBlank()) " for operator '$it'" else "" } + + val SYMBOL_WITH_CONTAINING_DECLARATION = Renderer { symbol: FirCallableSymbol<*> -> + "'${SYMBOL.render(symbol)}' defined in ${NAME_OF_CONTAINING_DECLARATION_OR_FILE.render(symbol.callableId)}" + } } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt index 3c843640f37..abcdd298eca 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt @@ -43,6 +43,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.REQU import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.SYMBOL import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.SYMBOLS import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.SYMBOLS_ON_NEWLINE_WITH_INDENT +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.SYMBOL_WITH_CONTAINING_DECLARATION import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.VARIABLE_NAME import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.WHEN_MISSING_CASES import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.ABBREVIATED_NOTHING_PROPERTY_TYPE @@ -1743,58 +1744,58 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() { map.put( RETURN_TYPE_MISMATCH_ON_INHERITANCE, - "''{0}'' clashes with ''{1}'': return types are incompatible.", - DECLARATION_NAME, - DECLARATION_NAME + "{0} clashes with {1}: return types are incompatible.", + SYMBOL_WITH_CONTAINING_DECLARATION, + SYMBOL_WITH_CONTAINING_DECLARATION ) map.put( PROPERTY_TYPE_MISMATCH_ON_INHERITANCE, - "''{0}'' clashes with ''{1}'': property types are incompatible.", - DECLARATION_NAME, - DECLARATION_NAME + "{0} clashes with {1}: property types are incompatible.", + SYMBOL_WITH_CONTAINING_DECLARATION, + SYMBOL_WITH_CONTAINING_DECLARATION ) map.put( VAR_TYPE_MISMATCH_ON_INHERITANCE, - "''{0}'' clashes with ''{1}'': property types do not match.", - DECLARATION_NAME, - DECLARATION_NAME + "{0} clashes with {1}: property types do not match.", + SYMBOL_WITH_CONTAINING_DECLARATION, + SYMBOL_WITH_CONTAINING_DECLARATION ) map.put( RETURN_TYPE_MISMATCH_BY_DELEGATION, - "''{0}'' clashes with ''{1}'' from delegation: return types are incompatible.", - DECLARATION_NAME, - DECLARATION_NAME + "{0} clashes with {1} from delegation: return types are incompatible.", + SYMBOL_WITH_CONTAINING_DECLARATION, + SYMBOL_WITH_CONTAINING_DECLARATION ) map.put( PROPERTY_TYPE_MISMATCH_BY_DELEGATION, - "''{0}'' clashes with ''{1}'' from delegation: property types are incompatible.", - DECLARATION_NAME, - DECLARATION_NAME + "{0} clashes with {1} from delegation: property types are incompatible.", + SYMBOL_WITH_CONTAINING_DECLARATION, + SYMBOL_WITH_CONTAINING_DECLARATION ) map.put( OVERRIDING_FINAL_MEMBER_BY_DELEGATION, - "''{0}'' implicitly overrides a final member ''{1}'' by delegation.", - DECLARATION_NAME, - DECLARATION_NAME + "{0} implicitly overrides a final member {1} by delegation.", + SYMBOL_WITH_CONTAINING_DECLARATION, + SYMBOL_WITH_CONTAINING_DECLARATION ) map.put( VAR_OVERRIDDEN_BY_VAL_BY_DELEGATION, - "''val'' property ''{0}'' implicitly overrides a ''var'' property ''{1}'' by delegation.", - DECLARATION_NAME, - DECLARATION_NAME + "''val'' property {0} implicitly overrides a ''var'' property {1} by delegation.", + SYMBOL_WITH_CONTAINING_DECLARATION, + SYMBOL_WITH_CONTAINING_DECLARATION ) map.put( CONFLICTING_INHERITED_MEMBERS, "''{0}'' inherits conflicting members: {1}.", DECLARATION_NAME, - commaSeparated(DECLARATION_NAME) + commaSeparated(SYMBOL_WITH_CONTAINING_DECLARATION) ) // Redeclarations diff --git a/compiler/testData/cli/jvm/twoDiagnosticsOnSingleElement.out b/compiler/testData/cli/jvm/twoDiagnosticsOnSingleElement.out index a4004d4732a..23d913ac7b9 100644 --- a/compiler/testData/cli/jvm/twoDiagnosticsOnSingleElement.out +++ b/compiler/testData/cli/jvm/twoDiagnosticsOnSingleElement.out @@ -1,7 +1,7 @@ compiler/testData/cli/jvm/twoDiagnosticsOnSingleElement.kt:11:1: error: class 'C' is not abstract and does not implement abstract member 'foo'. class C : I1, I2 ^ -compiler/testData/cli/jvm/twoDiagnosticsOnSingleElement.kt:11:1: error: 'C' inherits conflicting members: foo, foo. +compiler/testData/cli/jvm/twoDiagnosticsOnSingleElement.kt:11:1: error: 'C' inherits conflicting members: 'fun foo(): Unit' defined in 'test/I1', 'fun foo(): Unit' defined in 'test/I2'. class C : I1, I2 ^ COMPILATION_ERROR \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/annotations/rendering/notImplementedMembers.fir.kt b/compiler/testData/diagnostics/tests/annotations/rendering/notImplementedMembers.fir.kt index e2808e339da..11f6723d79c 100644 --- a/compiler/testData/diagnostics/tests/annotations/rendering/notImplementedMembers.fir.kt +++ b/compiler/testData/diagnostics/tests/annotations/rendering/notImplementedMembers.fir.kt @@ -15,7 +15,7 @@ interface B { fun a(@An arg: @An Int) } -interface C : A, B + a(@An() arg: @An() Int): Unit' defined in '/B'")!>interface C : A, B @An abstract class D {