[FIR] Create FirResolvedErrorReference for error reference with single candidate
Note that this reference won't be created for hidden candidates, because they are designed to be truly invisible from the user side
This commit is contained in:
committed by
Space Team
parent
9e4e5eed68
commit
dde64c10ea
+15
-2
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isLocal
|
||||
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
|
||||
import org.jetbrains.kotlin.fir.references.*
|
||||
@@ -675,12 +676,16 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
|
||||
|
||||
override fun visitNamedReference(namedReference: FirNamedReference, data: StringBuilder) {
|
||||
if (namedReference is FirErrorNamedReference) {
|
||||
data.append("[ERROR : ${namedReference.diagnostic.reason}]")
|
||||
data.append(namedReference.diagnostic.dump())
|
||||
return
|
||||
}
|
||||
visitElement(namedReference, data)
|
||||
}
|
||||
|
||||
private fun ConeDiagnostic.dump(): String {
|
||||
return "[ERROR : ${reason}]"
|
||||
}
|
||||
|
||||
override fun visitResolvedNamedReference(resolvedNamedReference: FirResolvedNamedReference, data: StringBuilder) {
|
||||
val symbol = resolvedNamedReference.resolvedSymbol
|
||||
renderImplicitReceiver(symbol, resolvedNamedReference.source.psi)
|
||||
@@ -698,6 +703,11 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitResolvedErrorReference(resolvedErrorReference: FirResolvedErrorReference, data: StringBuilder) {
|
||||
visitResolvedNamedReference(resolvedErrorReference, data)
|
||||
data.append(resolvedErrorReference.diagnostic.dump())
|
||||
}
|
||||
|
||||
override fun visitResolvedCallableReference(resolvedCallableReference: FirResolvedCallableReference, data: StringBuilder) {
|
||||
when (val symbol = resolvedCallableReference.resolvedSymbol) {
|
||||
is FirPropertySymbol -> renderPropertySymbol(symbol, data)
|
||||
@@ -772,8 +782,11 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
|
||||
is FirConstructorSymbol -> visitConstructor(callee.resolvedSymbol.fir as FirConstructor, data)
|
||||
else -> renderFunctionSymbol(callee.resolvedSymbol as FirNamedFunctionSymbol, data, functionCall)
|
||||
}
|
||||
if (callee is FirResolvedErrorReference) {
|
||||
data.append(callee.diagnostic.dump())
|
||||
}
|
||||
}
|
||||
is FirErrorNamedReference -> data.append("[ERROR : ${callee.diagnostic.reason}]")
|
||||
is FirErrorNamedReference -> data.append(callee.diagnostic.dump())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user