[FIR] Improve rendering of override related diagnostics

Render symbols completely and add containing declaration.
This commit is contained in:
Kirill Rakhman
2024-01-26 14:34:34 +01:00
committed by Space Team
parent 1238f081b7
commit 1626057f75
4 changed files with 29 additions and 24 deletions
@@ -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)}"
}
}
@@ -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
@@ -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 <T> foo(): Unit' defined in 'test/I1', 'fun foo(): Unit' defined in 'test/I2'.
class C : I1, I2
^
COMPILATION_ERROR
@@ -15,7 +15,7 @@ interface B {
fun <T> a(@An arg: @An Int)
}
<!CONFLICTING_INHERITED_MEMBERS("C; a, a")!>interface C<!> : A, B
<!CONFLICTING_INHERITED_MEMBERS("C; '@An() fun a(@An() arg: @An() Int): Unit' defined in '/A', '@An() fun <T> a(@An() arg: @An() Int): Unit' defined in '/B'")!>interface C<!> : A, B
@An
abstract class D {