Minor: extract val FirTowerConsumer.resultCollection
This commit is contained in:
+20
-17
@@ -19,16 +19,18 @@ import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind
|
||||
import org.jetbrains.kotlin.types.AbstractTypeChecker
|
||||
|
||||
abstract class TowerDataConsumer {
|
||||
abstract val resultCollector: CandidateCollector
|
||||
|
||||
abstract fun consume(
|
||||
kind: TowerDataKind,
|
||||
towerScopeLevel: TowerScopeLevel,
|
||||
// resultCollector: CandidateCollector,
|
||||
group: Int
|
||||
): ProcessorAction
|
||||
|
||||
private var stopGroup = Int.MAX_VALUE
|
||||
fun skipGroup(group: Int, resultCollector: CandidateCollector): Boolean {
|
||||
if (resultCollector.isSuccess() && stopGroup == Int.MAX_VALUE) {
|
||||
|
||||
fun skipGroup(group: Int): Boolean {
|
||||
if (stopGroup == Int.MAX_VALUE && resultCollector.isSuccess()) {
|
||||
stopGroup = group
|
||||
}
|
||||
if (group >= stopGroup) return true
|
||||
@@ -42,14 +44,14 @@ class QualifiedReceiverTowerDataConsumer<T : AbstractFirBasedSymbol<*>>(
|
||||
val token: TowerScopeLevel.Token<T>,
|
||||
val explicitReceiver: ExpressionReceiverValue,
|
||||
val candidateFactory: CandidateFactory,
|
||||
val resultCollector: CandidateCollector
|
||||
override val resultCollector: CandidateCollector
|
||||
) : TowerDataConsumer() {
|
||||
override fun consume(
|
||||
kind: TowerDataKind,
|
||||
towerScopeLevel: TowerScopeLevel,
|
||||
group: Int
|
||||
): ProcessorAction {
|
||||
if (skipGroup(group, resultCollector)) return ProcessorAction.NEXT
|
||||
if (skipGroup(group)) return ProcessorAction.NEXT
|
||||
if (kind != TowerDataKind.EMPTY) return ProcessorAction.NEXT
|
||||
|
||||
return QualifiedReceiverTowerLevel(session, candidateFactory.bodyResolveComponents).processElementsByName(
|
||||
@@ -83,19 +85,18 @@ class QualifiedReceiverTowerDataConsumer<T : AbstractFirBasedSymbol<*>>(
|
||||
}
|
||||
|
||||
class PrioritizedTowerDataConsumer(
|
||||
val resultCollector: CandidateCollector,
|
||||
vararg val consumers: TowerDataConsumer
|
||||
override val resultCollector: CandidateCollector,
|
||||
private vararg val consumers: TowerDataConsumer
|
||||
) : TowerDataConsumer() {
|
||||
override fun consume(
|
||||
kind: TowerDataKind,
|
||||
towerScopeLevel: TowerScopeLevel,
|
||||
group: Int
|
||||
): ProcessorAction {
|
||||
if (skipGroup(group, resultCollector)) return ProcessorAction.NEXT
|
||||
if (skipGroup(group)) return ProcessorAction.NEXT
|
||||
var empty = true
|
||||
for ((index, consumer) in consumers.withIndex()) {
|
||||
val action = consumer.consume(kind, towerScopeLevel, group * consumers.size + index)
|
||||
when (action) {
|
||||
when (val action = consumer.consume(kind, towerScopeLevel, group * consumers.size + index)) {
|
||||
ProcessorAction.STOP -> return action
|
||||
ProcessorAction.NEXT -> empty = false
|
||||
}
|
||||
@@ -108,9 +109,10 @@ class PrioritizedTowerDataConsumer(
|
||||
// - initialConsumer consumes property which is invoke receiver
|
||||
// - additionalConsumers consume invoke calls themselves
|
||||
class AccumulatingTowerDataConsumer(
|
||||
private val resultCollector: CandidateCollector
|
||||
override val resultCollector: CandidateCollector
|
||||
) : TowerDataConsumer() {
|
||||
lateinit var initialConsumer: TowerDataConsumer
|
||||
|
||||
private val additionalConsumers = mutableListOf<TowerDataConsumer>()
|
||||
|
||||
private data class TowerData(val kind: TowerDataKind, val level: TowerScopeLevel, val group: Int)
|
||||
@@ -122,7 +124,7 @@ class AccumulatingTowerDataConsumer(
|
||||
towerScopeLevel: TowerScopeLevel,
|
||||
group: Int
|
||||
): ProcessorAction {
|
||||
if (skipGroup(group, resultCollector)) return ProcessorAction.NEXT
|
||||
if (skipGroup(group)) return ProcessorAction.NEXT
|
||||
accumulatedTowerData += TowerData(kind, towerScopeLevel, group)
|
||||
|
||||
var empty = true
|
||||
@@ -156,7 +158,7 @@ class ExplicitReceiverTowerDataConsumer<T : AbstractFirBasedSymbol<*>>(
|
||||
val token: TowerScopeLevel.Token<T>,
|
||||
val explicitReceiver: ExpressionReceiverValue,
|
||||
val candidateFactory: CandidateFactory,
|
||||
val resultCollector: CandidateCollector
|
||||
override val resultCollector: CandidateCollector
|
||||
) : TowerDataConsumer() {
|
||||
|
||||
companion object {
|
||||
@@ -168,11 +170,12 @@ class ExplicitReceiverTowerDataConsumer<T : AbstractFirBasedSymbol<*>>(
|
||||
towerScopeLevel: TowerScopeLevel,
|
||||
group: Int
|
||||
): ProcessorAction {
|
||||
if (skipGroup(group, resultCollector)) return ProcessorAction.NEXT
|
||||
if (skipGroup(group)) return ProcessorAction.NEXT
|
||||
return when (kind) {
|
||||
TowerDataKind.EMPTY ->
|
||||
MemberScopeTowerLevel(
|
||||
session, resultCollector.components, explicitReceiver, scopeSession = candidateFactory.bodyResolveComponents.scopeSession
|
||||
session, resultCollector.components, explicitReceiver,
|
||||
scopeSession = candidateFactory.bodyResolveComponents.scopeSession
|
||||
).processElementsByName(
|
||||
token,
|
||||
name,
|
||||
@@ -259,14 +262,14 @@ class NoExplicitReceiverTowerDataConsumer<T : AbstractFirBasedSymbol<*>>(
|
||||
val name: Name,
|
||||
val token: TowerScopeLevel.Token<T>,
|
||||
val candidateFactory: CandidateFactory,
|
||||
val resultCollector: CandidateCollector
|
||||
override val resultCollector: CandidateCollector
|
||||
) : TowerDataConsumer() {
|
||||
override fun consume(
|
||||
kind: TowerDataKind,
|
||||
towerScopeLevel: TowerScopeLevel,
|
||||
group: Int
|
||||
): ProcessorAction {
|
||||
if (skipGroup(group, resultCollector)) return ProcessorAction.NEXT
|
||||
if (skipGroup(group)) return ProcessorAction.NEXT
|
||||
return when (kind) {
|
||||
|
||||
TowerDataKind.TOWER_LEVEL -> {
|
||||
|
||||
Reference in New Issue
Block a user