FIR resolve: support synthetics discrimination
This commit is contained in:
committed by
Mikhail Glukhikh
parent
49883d1d87
commit
8d4cbd84e3
@@ -79,6 +79,14 @@ internal object CheckArguments : CheckerStage() {
|
||||
sink.reportApplicability(CandidateApplicability.INAPPLICABLE)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal object DiscriminateSynthetics : CheckerStage() {
|
||||
override fun check(candidate: Candidate, sink: CheckerSink, callInfo: CallInfo) {
|
||||
if (candidate.symbol is SyntheticSymbol) {
|
||||
sink.reportApplicability(CandidateApplicability.SYNTHETIC_RESOLVED)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -90,6 +98,6 @@ internal fun functionCallResolutionSequence() = listOf(
|
||||
|
||||
|
||||
internal fun qualifiedAccessResolutionSequence() = listOf(
|
||||
CheckExplicitReceiverConsistency, CheckReceivers.Dispatch, CheckReceivers.Extension,
|
||||
DiscriminateSynthetics, CheckExplicitReceiverConsistency, CheckReceivers.Dispatch, CheckReceivers.Extension,
|
||||
CreateFreshTypeVariableSubstitutorStage
|
||||
)
|
||||
@@ -14,13 +14,14 @@ import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.firSafeNullable
|
||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeVariableSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.*
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
interface SyntheticSymbol : ConeSymbol
|
||||
|
||||
class SyntheticPropertySymbol(callableId: CallableId) : FirPropertySymbol(callableId), SyntheticSymbol
|
||||
|
||||
class FirSyntheticPropertiesScope(val session: FirSession, val baseScope: FirScope, val typeCalculator: ReturnTypeCalculator) : FirScope {
|
||||
|
||||
val synthetic: MutableMap<ConeCallableSymbol, ConeVariableSymbol> = mutableMapOf()
|
||||
@@ -36,7 +37,7 @@ class FirSyntheticPropertiesScope(val session: FirSession, val baseScope: FirSco
|
||||
if (fir.typeParameters.isNotEmpty()) return ProcessorAction.NEXT
|
||||
if (fir.valueParameters.isNotEmpty()) return ProcessorAction.NEXT
|
||||
|
||||
val synthetic = FirPropertySymbol(CallableId(symbol.callableId.packageName, symbol.callableId.className, name))
|
||||
val synthetic = SyntheticPropertySymbol(CallableId(symbol.callableId.packageName, symbol.callableId.className, name))
|
||||
|
||||
val returnTypeRef = typeCalculator.tryCalculateReturnType(fir)
|
||||
FirMemberPropertyImpl(
|
||||
|
||||
+1
-1
@@ -373,7 +373,7 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn
|
||||
candidates.isEmpty() -> FirErrorNamedReference(
|
||||
namedReference.session, namedReference.psi, "Unresolved name: $name"
|
||||
)
|
||||
applicability < CandidateApplicability.RESOLVED -> {
|
||||
applicability < CandidateApplicability.SYNTHETIC_RESOLVED -> {
|
||||
FirErrorNamedReference(
|
||||
namedReference.session,
|
||||
namedReference.psi,
|
||||
|
||||
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeVariableSymbol
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
class FirPropertySymbol(callableId: CallableId) : FirVariableSymbol(callableId), ConePropertySymbol
|
||||
open class FirPropertySymbol(callableId: CallableId) : FirVariableSymbol(callableId), ConePropertySymbol
|
||||
|
||||
open class FirVariableSymbol(override val callableId: CallableId) : ConeVariableSymbol, FirCallableSymbol() {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user