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