FIR: Simplify resolution for qualifier receiver

Seems there's no need anymore in ClassifierPrioritized group
This commit is contained in:
Denis.Zharkov
2021-09-03 10:08:52 +03:00
committed by teamcityserver
parent 9fa3e2eb13
commit 69f7c2278d
7 changed files with 22 additions and 35 deletions
+10
View File
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
</set>
</option>
</component>
</project>
@@ -167,9 +167,6 @@ class FirCallResolver(
name, name,
explicitReceiver, explicitReceiver,
argumentList, argumentList,
isPotentialQualifierPart = qualifiedAccess !is FirFunctionCall &&
qualifiedAccess.explicitReceiver is FirResolvedQualifier &&
qualifiedResolver.isPotentialQualifierPartPosition(),
isImplicitInvoke = qualifiedAccess is FirImplicitInvokeCall, isImplicitInvoke = qualifiedAccess is FirImplicitInvokeCall,
typeArguments, typeArguments,
session, session,
@@ -450,7 +447,6 @@ class FirCallResolver(
name, name,
explicitReceiver = null, explicitReceiver = null,
delegatedConstructorCall.argumentList, delegatedConstructorCall.argumentList,
isPotentialQualifierPart = false,
isImplicitInvoke = false, isImplicitInvoke = false,
typeArguments = typeArguments, typeArguments = typeArguments,
session, session,
@@ -499,7 +495,6 @@ class FirCallResolver(
name = reference.name, name = reference.name,
explicitReceiver = null, explicitReceiver = null,
annotation.argumentList, annotation.argumentList,
isPotentialQualifierPart = false,
isImplicitInvoke = false, isImplicitInvoke = false,
typeArguments = emptyList(), typeArguments = emptyList(),
session, session,
@@ -610,7 +605,6 @@ class FirCallResolver(
callableReferenceAccess.calleeReference.name, callableReferenceAccess.calleeReference.name,
callableReferenceAccess.explicitReceiver, callableReferenceAccess.explicitReceiver,
FirEmptyArgumentList, FirEmptyArgumentList,
isPotentialQualifierPart = false,
isImplicitInvoke = false, isImplicitInvoke = false,
emptyList(), emptyList(),
session, session,
@@ -43,7 +43,6 @@ data class CallInfo(
val explicitReceiver: FirExpression?, val explicitReceiver: FirExpression?,
val argumentList: FirArgumentList, val argumentList: FirArgumentList,
val isPotentialQualifierPart: Boolean,
val isImplicitInvoke: Boolean, val isImplicitInvoke: Boolean,
val typeArguments: List<FirTypeProjection>, val typeArguments: List<FirTypeProjection>,
@@ -162,16 +162,8 @@ internal open class FirTowerResolveTask(
) { ) {
val qualifierReceiver = createQualifierReceiver(resolvedQualifier, session, components.scopeSession) val qualifierReceiver = createQualifierReceiver(resolvedQualifier, session, components.scopeSession)
when { processQualifierScopes(info, qualifierReceiver)
info.isPotentialQualifierPart -> { processClassifierScope(info, qualifierReceiver)
processClassifierScope(info, qualifierReceiver, prioritized = true)
processQualifierScopes(info, qualifierReceiver)
}
else -> {
processQualifierScopes(info, qualifierReceiver)
processClassifierScope(info, qualifierReceiver, prioritized = false)
}
}
if (resolvedQualifier.symbol != null) { if (resolvedQualifier.symbol != null) {
val typeRef = resolvedQualifier.typeRef val typeRef = resolvedQualifier.typeRef
@@ -208,7 +200,7 @@ internal open class FirTowerResolveTask(
} }
private suspend fun processClassifierScope( private suspend fun processClassifierScope(
info: CallInfo, qualifierReceiver: QualifierReceiver?, prioritized: Boolean info: CallInfo, qualifierReceiver: QualifierReceiver?
) { ) {
if (qualifierReceiver == null) return if (qualifierReceiver == null) return
if (info.callKind != CallKind.CallableReference && if (info.callKind != CallKind.CallableReference &&
@@ -216,10 +208,9 @@ internal open class FirTowerResolveTask(
qualifierReceiver.classSymbol != qualifierReceiver.originalSymbol qualifierReceiver.classSymbol != qualifierReceiver.originalSymbol
) return ) return
val scope = qualifierReceiver.classifierScope() ?: return val scope = qualifierReceiver.classifierScope() ?: return
val group = if (prioritized) TowerGroup.ClassifierPrioritized else TowerGroup.Classifier
processLevel( processLevel(
scope.toScopeTowerLevel(includeInnerConstructors = false), info, scope.toScopeTowerLevel(includeInnerConstructors = false), info,
group TowerGroup.Classifier
) )
} }
@@ -28,23 +28,21 @@ sealed class TowerGroupKind(val index: Byte) : Comparable<TowerGroupKind> {
object Start : TowerGroupKind(0b0) object Start : TowerGroupKind(0b0)
object ClassifierPrioritized : TowerGroupKind(1) object Qualifier : TowerGroupKind(1)
object Qualifier : TowerGroupKind(2) object Classifier : TowerGroupKind(2)
object Classifier : TowerGroupKind(3) class TopPrioritized(depth: Int) : WithDepth(3, depth)
class TopPrioritized(depth: Int) : WithDepth(4, depth) object Member : TowerGroupKind(4)
object Member : TowerGroupKind(5) class Local(depth: Int) : WithDepth(5, depth)
class Local(depth: Int) : WithDepth(6, depth) class ImplicitOrNonLocal(depth: Int, val kindForDebugSake: String) : WithDepth(6, depth)
class ImplicitOrNonLocal(depth: Int, val kindForDebugSake: String) : WithDepth(7, depth) object InvokeExtension : TowerGroupKind(7)
object InvokeExtension : TowerGroupKind(8) object QualifierValue : TowerGroupKind(8)
object QualifierValue : TowerGroupKind(9)
object Last : TowerGroupKind(0b1111) object Last : TowerGroupKind(0b1111)
@@ -151,8 +149,6 @@ private constructor(
val Start = kindOf(TowerGroupKind.Start) val Start = kindOf(TowerGroupKind.Start)
val ClassifierPrioritized = kindOf(TowerGroupKind.ClassifierPrioritized)
val Qualifier = kindOf(TowerGroupKind.Qualifier) val Qualifier = kindOf(TowerGroupKind.Qualifier)
val Classifier = kindOf(TowerGroupKind.Classifier) val Classifier = kindOf(TowerGroupKind.Classifier)
@@ -210,7 +210,6 @@ class FirSyntheticCallGenerator(
name = name, name = name,
explicitReceiver = null, explicitReceiver = null,
argumentList = argumentList, argumentList = argumentList,
isPotentialQualifierPart = false,
isImplicitInvoke = false, isImplicitInvoke = false,
typeArguments = emptyList(), typeArguments = emptyList(),
session = session, session = session,
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.declarations.FirVariable import org.jetbrains.kotlin.fir.declarations.FirVariable
import org.jetbrains.kotlin.fir.resolve.calls.* import org.jetbrains.kotlin.fir.resolve.calls.*
import org.jetbrains.kotlin.fir.resolve.inference.receiverType import org.jetbrains.kotlin.fir.resolve.inference.receiverType
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
import org.jetbrains.kotlin.fir.types.coneType import org.jetbrains.kotlin.fir.types.coneType
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind
@@ -48,7 +47,6 @@ abstract class AbstractCandidateInfoProvider(
typeArguments = typeArgumentList, typeArguments = typeArgumentList,
containingDeclarations = emptyList(), // TODO - maybe we should pass declarations from context here (no visible differences atm) containingDeclarations = emptyList(), // TODO - maybe we should pass declarations from context here (no visible differences atm)
containingFile = firFile, containingFile = firFile,
isPotentialQualifierPart = false,
isImplicitInvoke = false, isImplicitInvoke = false,
session = firSession, session = firSession,
) )