FIR: keep names for error references

This commit is contained in:
Simon Ogorodnik
2019-04-12 21:32:36 +03:00
committed by Mikhail Glukhikh
parent 5bf41594ec
commit 32e941cb53
3 changed files with 12 additions and 6 deletions
@@ -377,7 +377,8 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn
FirErrorNamedReference(
namedReference.session,
namedReference.psi,
"Inapplicable($applicability): ${candidates.map { describeSymbol(it.symbol) }}"
"Inapplicable($applicability): ${candidates.map { describeSymbol(it.symbol) }}",
namedReference.name
)
}
candidates.size == 1 -> FirNamedReferenceWithCandidate(
@@ -385,7 +386,8 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn
name, candidates.single()
)
else -> FirErrorNamedReference(
namedReference.session, namedReference.psi, "Ambiguity: $name, ${candidates.map { describeSymbol(it.symbol) }}"
namedReference.session, namedReference.psi, "Ambiguity: $name, ${candidates.map { describeSymbol(it.symbol) }}",
namedReference.name
)
}
}
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition
import org.jetbrains.kotlin.fir.expressions.impl.FirExpressionStub
import org.jetbrains.kotlin.fir.expressions.impl.FirUnitExpression
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
@@ -761,7 +762,11 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
}
override fun visitNamedReference(namedReference: FirNamedReference) {
print("${namedReference.name}#")
if (namedReference is FirErrorNamedReference) {
print("<${namedReference.errorReason}>#")
} else {
print("${namedReference.name}#")
}
}
override fun visitResolvedCallableReference(resolvedCallableReference: FirResolvedCallableReference) {
@@ -14,7 +14,6 @@ import org.jetbrains.kotlin.name.Name
class FirErrorNamedReference(
session: FirSession,
psi: PsiElement?,
val errorReason: String
) : FirAbstractElement(session, psi), FirNamedReference {
val errorReason: String,
override val name: Name = Name.special("<$errorReason>")
}
) : FirAbstractElement(session, psi), FirNamedReference