[Analysis API] Hide FIR-specific diagnostic details.
Change the public-facing KtFirDiagnostic to be an interface, not a class, and change the internal implementations to be classes, not interfaces. This allows hiding access to the KtPsiDiagnostic underlying the AA diagnostic class.
This commit is contained in:
committed by
Ilya Kirillov
parent
3eeb867f56
commit
dd9e127d2c
+4
-4
@@ -32,17 +32,17 @@ object KtDiagnosticClassImplementationRenderer : AbstractDiagnosticsDataClassRen
|
||||
withIndent {
|
||||
printParameters(diagnostic, diagnosticList)
|
||||
}
|
||||
print(") : KtFirDiagnostic.${diagnostic.className}(), KtAbstractFirDiagnostic<")
|
||||
print(") : KtAbstractFirDiagnostic<")
|
||||
printTypeWithShortNames(diagnostic.original.psiType)
|
||||
println(">")
|
||||
println(">(firDiagnostic, token), KtFirDiagnostic.${diagnostic.className}")
|
||||
}
|
||||
|
||||
private fun SmartPrinter.printParameters(diagnostic: HLDiagnostic, diagnosticList: HLDiagnosticList) {
|
||||
for (parameter in diagnostic.parameters) {
|
||||
printParameter(parameter, diagnosticList)
|
||||
}
|
||||
println("override val firDiagnostic: KtPsiDiagnostic,")
|
||||
println("override val token: KtLifetimeToken,")
|
||||
println("firDiagnostic: KtPsiDiagnostic,")
|
||||
println("token: KtLifetimeToken,")
|
||||
}
|
||||
|
||||
private fun SmartPrinter.printParameter(parameter: HLDiagnosticParameter, diagnosticList: HLDiagnosticList) {
|
||||
|
||||
+4
-4
@@ -18,7 +18,7 @@ object KtDiagnosticClassRenderer : AbstractDiagnosticsDataClassRenderer() {
|
||||
}
|
||||
|
||||
private fun SmartPrinter.printDiagnosticClasses(diagnosticList: HLDiagnosticList) {
|
||||
inBracketsWithIndent("sealed class KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI>") {
|
||||
inBracketsWithIndent("sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI>") {
|
||||
for (diagnostic in diagnosticList.diagnostics) {
|
||||
printDiagnosticClass(diagnostic, diagnosticList)
|
||||
println()
|
||||
@@ -27,9 +27,9 @@ object KtDiagnosticClassRenderer : AbstractDiagnosticsDataClassRenderer() {
|
||||
}
|
||||
|
||||
private fun SmartPrinter.printDiagnosticClass(diagnostic: HLDiagnostic, diagnosticList: HLDiagnosticList) {
|
||||
print("abstract class ${diagnostic.className} : KtFirDiagnostic<")
|
||||
print("interface ${diagnostic.className} : KtFirDiagnostic<")
|
||||
printTypeWithShortNames(diagnostic.original.psiType)
|
||||
print(">()")
|
||||
print(">")
|
||||
inBracketsWithIndent {
|
||||
println("override val diagnosticClass get() = ${diagnostic.className}::class")
|
||||
printDiagnosticParameters(diagnostic, diagnosticList)
|
||||
@@ -38,7 +38,7 @@ object KtDiagnosticClassRenderer : AbstractDiagnosticsDataClassRenderer() {
|
||||
|
||||
private fun SmartPrinter.printDiagnosticParameters(diagnostic: HLDiagnostic, diagnosticList: HLDiagnosticList) {
|
||||
diagnostic.parameters.forEach { parameter ->
|
||||
print("abstract val ${parameter.name}: ")
|
||||
print("val ${parameter.name}: ")
|
||||
printTypeWithShortNames(parameter.type) { type ->
|
||||
diagnosticList.containsClashingBySimpleNameType(type)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user