FIR IDE: resolve ambiguity & inapplicable references

This commit is contained in:
Ilya Kirillov
2020-08-26 15:07:25 +03:00
parent 4fa2dd85b4
commit ebafd0fb51
@@ -11,6 +11,9 @@ import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.references.* import org.jetbrains.kotlin.fir.references.*
import org.jetbrains.kotlin.fir.resolve.calls.SyntheticPropertySymbol import org.jetbrains.kotlin.fir.resolve.calls.SyntheticPropertySymbol
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeAmbiguityError
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableCandidateError
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeOperatorAmbiguityError
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
@@ -218,7 +221,13 @@ internal object FirReferenceResolveHelper {
} else emptyList() } else emptyList()
} }
is FirErrorNamedReference -> { is FirErrorNamedReference -> {
return emptyList() val candidates = when (val diagnostic = fir.diagnostic) {
is ConeAmbiguityError -> diagnostic.candidates
is ConeOperatorAmbiguityError -> diagnostic.candidates
is ConeInapplicableCandidateError -> listOf(diagnostic.candidateSymbol)
else -> emptyList()
}
return candidates.mapNotNull { it.fir.buildSymbol(symbolBuilder) }
} }
else -> { else -> {
// Handle situation when we're in the middle/beginning of qualifier // Handle situation when we're in the middle/beginning of qualifier