[FIR] Improve symbol rendering in *_NOT_IMPLEMENTED diagnostics

This commit is contained in:
Kirill Rakhman
2023-09-22 13:41:53 +02:00
committed by Space Team
parent 44a4498ee5
commit 2613a337ae
6 changed files with 25 additions and 16 deletions
@@ -1,3 +1,3 @@
/enum.kt:(506,508): error: 'static enum entry E2: EnumClass = object : EnumClass' does not implement abstract members: [fun foo(): Int, val bar: String].
/enum.kt:(506,508): error: Enum entry 'EnumClass.E2' does not implement abstract members: [fun foo(): Int, val bar: String].
/enum.kt:(524,526): error: 'static enum entry E3: EnumClass = object : EnumClass' does not implement abstract members: [fun foo(): Int, val bar: String].
/enum.kt:(524,526): error: Enum entry 'EnumClass.E3' does not implement abstract members: [fun foo(): Int, val bar: String].
@@ -109,7 +109,15 @@ object FirDiagnosticRenderers {
ClassKind.INTERFACE -> "Interface"
else -> "Class"
}
"$classOrObject $name"
"$classOrObject '$name'"
}
val RENDER_ENUM_ENTRY = Renderer { enumEntry: FirEnumEntrySymbol ->
var name = enumEntry.callableId.callableName.asString()
enumEntry.callableId.classId?.let {
name = "${it.shortClassName.asString()}.$name"
}
"Enum entry '$name'"
}
val RENDER_CLASS_OR_OBJECT_NAME = Renderer { firClassLike: FirClassLikeSymbol<*> ->
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.OPTI
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.RENDER_CLASS_OR_OBJECT
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.RENDER_CLASS_OR_OBJECT_NAME
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.RENDER_COLLECTION_OF_TYPES
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.RENDER_ENUM_ENTRY
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.RENDER_TYPE
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.REQUIRE_KOTLIN_VERSION
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.SYMBOL
@@ -1600,19 +1601,19 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
map.put(
ABSTRACT_MEMBER_NOT_IMPLEMENTED,
"''{0}'' is not abstract and does not implement abstract member ''{1}''.",
"{0} is not abstract and does not implement abstract member ''{1}''.",
RENDER_CLASS_OR_OBJECT,
DECLARATION_NAME
)
map.put(
ABSTRACT_MEMBER_NOT_IMPLEMENTED_BY_ENUM_ENTRY,
"''{0}'' does not implement abstract members: {1}.",
SYMBOL,
"{0} does not implement abstract members: {1}.",
RENDER_ENUM_ENTRY,
SYMBOLS,
)
map.put(
ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED,
"''{0}'' is not abstract and does not implement abstract base class member ''{1}''.",
"{0} is not abstract and does not implement abstract base class member ''{1}''.",
RENDER_CLASS_OR_OBJECT,
DECLARATION_NAME
)
@@ -1625,13 +1626,13 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
map.put(AMBIGUOUS_ANONYMOUS_TYPE_INFERRED, "Right-hand side has an anonymous type. Please specify the type explicitly.", NOT_RENDERED)
map.put(
MANY_IMPL_MEMBER_NOT_IMPLEMENTED,
"''{0}'' must override ''{1}'' because it inherits multiple implementations for it.",
"{0} must override ''{1}'' because it inherits multiple implementations for it.",
RENDER_CLASS_OR_OBJECT,
DECLARATION_NAME
)
map.put(
MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED,
"''{0}'' must override ''{1}'' because it inherits multiple interface methods for it.",
"{0} must override ''{1}'' because it inherits multiple interface methods for it.",
RENDER_CLASS_OR_OBJECT,
DECLARATION_NAME
)
@@ -1663,7 +1664,7 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
)
map.put(
VAR_IMPLEMENTED_BY_INHERITED_VAL,
"''{0}'' overrides ''var'' property ''{1}'' with inherited ''val'' property ''{2}''.",
"{0} overrides ''var'' property ''{1}'' with inherited ''val'' property ''{2}''.",
RENDER_CLASS_OR_OBJECT,
DECLARATION_NAME,
FQ_NAMES_IN_TYPES
@@ -1,4 +1,4 @@
compiler/testData/cli/jvm/internalArgEnableLanguageFeature.kt:9:1: error: 'Class Impl' overrides 'var' property 'a' with inherited 'val' property 'public final val /Open.a: kotlin/String
compiler/testData/cli/jvm/internalArgEnableLanguageFeature.kt:9:1: error: class 'Impl' overrides 'var' property 'a' with inherited 'val' property 'public final val /Open.a: kotlin/String
public get(): kotlin/String'.
class Impl : Open(), Interface
^
@@ -1,4 +1,4 @@
compiler/testData/cli/jvm/twoDiagnosticsOnSingleElement.kt:11:1: error: 'Class C' is not abstract and does not implement abstract member 'foo'.
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.
@@ -23,8 +23,8 @@ abstract class D {
abstract val d: @An Int
}
<!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED("Class E; d")!>class E<!> : D(), A
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED("Class F; a")!>class F<!> : A
<!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED("Class 'E'; d")!>class E<!> : D(), A
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED("Class 'F'; a")!>class F<!> : A
@An
interface G {
@@ -44,5 +44,5 @@ interface GI : G {
override fun a(@An arg: @An Int) {}
}
<!MANY_IMPL_MEMBER_NOT_IMPLEMENTED("Class AG1; a")!>class AG1<!>(val a: A, val g: G) : A by a, G by g
<!MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED("Class AG2; a")!>class AG2<!>() : AI, GI
<!MANY_IMPL_MEMBER_NOT_IMPLEMENTED("Class 'AG1'; a")!>class AG1<!>(val a: A, val g: G) : A by a, G by g
<!MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED("Class 'AG2'; a")!>class AG2<!>() : AI, GI