~~ Fix caching for VaraibleAccess scopes Without this change they ignore caching even when they could've not. With it some scopes may still be cached, but the ones we don't want, will not. The result of `processObjectsByName` was simply weird. This code is never executed since objects are only checked for ScopeTowerLevels
diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/FirTowerResolveTask.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/FirTowerResolveTask.kt index b4441ca..7db2662 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/FirTowerResolveTask.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/FirTowerResolveTask.kt
@@ -68,21 +68,6 @@ open fun interceptTowerGroup(towerGroup: TowerGroup) = towerGroup open fun onSuccessfulLevel(towerGroup: TowerGroup) {} - protected suspend fun <T> processLevelWithoutCheck( - towerLevel: TowerScopeLevel, - callInfo: CallInfo, - group: TowerGroup, - explicitReceiverKind: ExplicitReceiverKind = ExplicitReceiverKind.NO_EXPLICIT_RECEIVER, - levelProducer: T, - cache: MutableSet<T>, - ) { - val isEmpty = processLevel(towerLevel, callInfo, group, explicitReceiverKind) - - if (isEmpty) { - cache.add(levelProducer) - } - } - protected suspend inline fun processLevelStupid( towerLevel: TowerScopeLevel, callInfo: CallInfo, @@ -375,11 +360,7 @@ enumerateTowerLevels( onScope = l@{ scope, group -> - // NB: this check does not work for variables - // because we do not search for objects if we have extension receiver - if (info.callKind != CallKind.VariableAccess && scope in emptyScopesCache.emptyScopes) return@l - - processLevelWithoutCheck( + processLevel( scope.toScopeTowerLevel(), info, group, levelProducer = scope, cache = emptyScopesCache.emptyScopes,
diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevelHandler.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevelHandler.kt index f6e0d20..4bc89e5 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevelHandler.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevelHandler.kt
@@ -46,8 +46,12 @@ CallKind.VariableAccess -> { processResult += towerLevel.processPropertiesByName(info, processor) - if (!collector.isSuccess && towerLevel is ScopeTowerLevel && !towerLevel.areThereExtensionReceiverOptions()) { - processResult += towerLevel.processObjectsByName(info, processor) + if (!collector.isSuccess && towerLevel is ScopeTowerLevel) { + processResult += if (!towerLevel.areThereExtensionReceiverOptions()) { + towerLevel.processObjectsByName(info, processor) + } else { + ProcessResult.FOUND + } } } CallKind.Function -> {
diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevels.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevels.kt index 6f19803..22764fd 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevels.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevels.kt
@@ -268,7 +268,7 @@ info: CallInfo, processor: TowerScopeLevelProcessor<FirBasedSymbol<*>> ): ProcessResult { - return ProcessResult.FOUND + return ProcessResult.SCOPE_EMPTY } private inline fun withMemberCallLookup(