FIR: Simplify resolution for qualifier receiver
Seems there's no need anymore in ClassifierPrioritized group
This commit is contained in:
committed by
teamcityserver
parent
9fa3e2eb13
commit
69f7c2278d
Generated
+10
@@ -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>,
|
||||
|
||||
+4
-13
@@ -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
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+8
-12
@@ -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)
|
||||
|
||||
-1
@@ -210,7 +210,6 @@ class FirSyntheticCallGenerator(
|
||||
name = name,
|
||||
explicitReceiver = null,
|
||||
argumentList = argumentList,
|
||||
isPotentialQualifierPart = false,
|
||||
isImplicitInvoke = false,
|
||||
typeArguments = emptyList(),
|
||||
session = session,
|
||||
|
||||
-2
@@ -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,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user