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,
explicitReceiver,
argumentList,
isPotentialQualifierPart = qualifiedAccess !is FirFunctionCall &&
qualifiedAccess.explicitReceiver is FirResolvedQualifier &&
qualifiedResolver.isPotentialQualifierPartPosition(),
isImplicitInvoke = qualifiedAccess is FirImplicitInvokeCall,
typeArguments,
session,
@@ -450,7 +447,6 @@ class FirCallResolver(
name,
explicitReceiver = null,
delegatedConstructorCall.argumentList,
isPotentialQualifierPart = false,
isImplicitInvoke = false,
typeArguments = typeArguments,
session,
@@ -499,7 +495,6 @@ class FirCallResolver(
name = reference.name,
explicitReceiver = null,
annotation.argumentList,
isPotentialQualifierPart = false,
isImplicitInvoke = false,
typeArguments = emptyList(),
session,
@@ -610,7 +605,6 @@ class FirCallResolver(
callableReferenceAccess.calleeReference.name,
callableReferenceAccess.explicitReceiver,
FirEmptyArgumentList,
isPotentialQualifierPart = false,
isImplicitInvoke = false,
emptyList(),
session,
@@ -43,7 +43,6 @@ data class CallInfo(
val explicitReceiver: FirExpression?,
val argumentList: FirArgumentList,
val isPotentialQualifierPart: Boolean,
val isImplicitInvoke: Boolean,
val typeArguments: List<FirTypeProjection>,
@@ -162,16 +162,8 @@ internal open class FirTowerResolveTask(
) {
val qualifierReceiver = createQualifierReceiver(resolvedQualifier, session, components.scopeSession)
when {
info.isPotentialQualifierPart -> {
processClassifierScope(info, qualifierReceiver, prioritized = true)
processQualifierScopes(info, qualifierReceiver)
}
else -> {
processQualifierScopes(info, qualifierReceiver)
processClassifierScope(info, qualifierReceiver, prioritized = false)
}
}
processQualifierScopes(info, qualifierReceiver)
processClassifierScope(info, qualifierReceiver)
if (resolvedQualifier.symbol != null) {
val typeRef = resolvedQualifier.typeRef
@@ -208,7 +200,7 @@ internal open class FirTowerResolveTask(
}
private suspend fun processClassifierScope(
info: CallInfo, qualifierReceiver: QualifierReceiver?, prioritized: Boolean
info: CallInfo, qualifierReceiver: QualifierReceiver?
) {
if (qualifierReceiver == null) return
if (info.callKind != CallKind.CallableReference &&
@@ -216,10 +208,9 @@ internal open class FirTowerResolveTask(
qualifierReceiver.classSymbol != qualifierReceiver.originalSymbol
) return
val scope = qualifierReceiver.classifierScope() ?: return
val group = if (prioritized) TowerGroup.ClassifierPrioritized else TowerGroup.Classifier
processLevel(
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 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(9)
object QualifierValue : TowerGroupKind(8)
object Last : TowerGroupKind(0b1111)
@@ -151,8 +149,6 @@ private constructor(
val Start = kindOf(TowerGroupKind.Start)
val ClassifierPrioritized = kindOf(TowerGroupKind.ClassifierPrioritized)
val Qualifier = kindOf(TowerGroupKind.Qualifier)
val Classifier = kindOf(TowerGroupKind.Classifier)
@@ -210,7 +210,6 @@ class FirSyntheticCallGenerator(
name = name,
explicitReceiver = null,
argumentList = argumentList,
isPotentialQualifierPart = false,
isImplicitInvoke = false,
typeArguments = emptyList(),
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.resolve.calls.*
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.resolve.calls.tasks.ExplicitReceiverKind
@@ -48,7 +47,6 @@ abstract class AbstractCandidateInfoProvider(
typeArguments = typeArgumentList,
containingDeclarations = emptyList(), // TODO - maybe we should pass declarations from context here (no visible differences atm)
containingFile = firFile,
isPotentialQualifierPart = false,
isImplicitInvoke = false,
session = firSession,
)