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,
|
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>,
|
||||||
|
|||||||
+4
-13
@@ -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
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+8
-12
@@ -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)
|
||||||
|
|||||||
-1
@@ -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,
|
||||||
|
|||||||
-2
@@ -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,
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user