[FIR] Improve rendering of override related diagnostics
Render symbols completely and add containing declaration.
This commit is contained in:
committed by
Space Team
parent
1238f081b7
commit
1626057f75
+4
@@ -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)}"
|
||||
}
|
||||
}
|
||||
|
||||
+23
-22
@@ -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
|
||||
+1
-1
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user