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 0cc7ded84cd..5912506b72c 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 @@ -23,7 +23,7 @@ import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.util.OperatorNameConventions -interface TowerScopeLevel { +abstract class TowerScopeLevel { sealed class Token> { object Properties : Token>() @@ -31,11 +31,11 @@ interface TowerScopeLevel { object Objects : Token>() } - fun processFunctionsByName(name: Name, processor: TowerScopeLevelProcessor>): ProcessorAction + abstract fun processFunctionsByName(name: Name, processor: TowerScopeLevelProcessor>): ProcessorAction - fun processPropertiesByName(name: Name, processor: TowerScopeLevelProcessor>): ProcessorAction + abstract fun processPropertiesByName(name: Name, processor: TowerScopeLevelProcessor>): ProcessorAction - fun processObjectsByName(name: Name, processor: TowerScopeLevelProcessor>): ProcessorAction + abstract fun processObjectsByName(name: Name, processor: TowerScopeLevelProcessor>): ProcessorAction interface TowerScopeLevelProcessor> { fun consumeCandidate( @@ -48,7 +48,7 @@ interface TowerScopeLevel { } } -abstract class SessionBasedTowerLevel(val session: FirSession) : TowerScopeLevel { +abstract class SessionBasedTowerLevel(val session: FirSession) : TowerScopeLevel() { protected fun FirCallableSymbol<*>.hasConsistentExtensionReceiver(extensionReceiver: Receiver?): Boolean { return (extensionReceiver != null) == hasExtensionReceiver() } @@ -71,7 +71,7 @@ class MemberScopeTowerLevel( private val scopeSession: ScopeSession ) : SessionBasedTowerLevel(session) { private fun > processMembers( - output: TowerScopeLevel.TowerScopeLevelProcessor, + output: TowerScopeLevelProcessor, processScopeMembers: FirScope.(processor: (T) -> Unit) -> Unit ): ProcessorAction { var empty = true @@ -117,7 +117,7 @@ class MemberScopeTowerLevel( override fun processFunctionsByName( name: Name, - processor: TowerScopeLevel.TowerScopeLevelProcessor> + processor: TowerScopeLevelProcessor> ): ProcessorAction { val isInvoke = name == OperatorNameConventions.INVOKE if (implicitExtensionInvokeMode && !isInvoke) { @@ -138,7 +138,7 @@ class MemberScopeTowerLevel( override fun processPropertiesByName( name: Name, - processor: TowerScopeLevel.TowerScopeLevelProcessor> + processor: TowerScopeLevelProcessor> ): ProcessorAction { return processMembers(processor) { consumer -> this.processPropertiesByName(name) { @@ -151,7 +151,7 @@ class MemberScopeTowerLevel( override fun processObjectsByName( name: Name, - processor: TowerScopeLevel.TowerScopeLevelProcessor> + processor: TowerScopeLevelProcessor> ): ProcessorAction { return ProcessorAction.NEXT } @@ -217,7 +217,7 @@ class ScopeTowerLevel( private fun > consumeCallableCandidate( candidate: FirCallableSymbol<*>, - processor: TowerScopeLevel.TowerScopeLevelProcessor + processor: TowerScopeLevelProcessor ) { if (candidate.hasConsistentReceivers(extensionReceiver)) { val dispatchReceiverValue = dispatchReceiverValue(candidate) @@ -233,7 +233,7 @@ class ScopeTowerLevel( override fun processFunctionsByName( name: Name, - processor: TowerScopeLevel.TowerScopeLevelProcessor> + processor: TowerScopeLevelProcessor> ): ProcessorAction { var empty = true scope.processFunctionsAndConstructorsByName( @@ -250,7 +250,7 @@ class ScopeTowerLevel( override fun processPropertiesByName( name: Name, - processor: TowerScopeLevel.TowerScopeLevelProcessor> + processor: TowerScopeLevelProcessor> ): ProcessorAction { var empty = true scope.processPropertiesByName(name) { candidate -> @@ -262,7 +262,7 @@ class ScopeTowerLevel( override fun processObjectsByName( name: Name, - processor: TowerScopeLevel.TowerScopeLevelProcessor> + processor: TowerScopeLevelProcessor> ): ProcessorAction { var empty = true scope.processClassifiersByName(name) {