Introduce TowerResolver.Task class
Its main purpose is code simplification: ImplicitScopeTower::run contains a lot of local functions that are needed because of lots of shared state So, we're moving the state to the Task class instead NB: This change doesn't change the code of `run`, it will be done in further commits
This commit is contained in:
@@ -93,11 +93,21 @@ class TowerResolver {
|
|||||||
): Collection<C>
|
): Collection<C>
|
||||||
= scopeTower.run(processor, AllCandidatesCollector(), false, name)
|
= scopeTower.run(processor, AllCandidatesCollector(), false, name)
|
||||||
|
|
||||||
|
fun <C : Candidate> ImplicitScopeTower.run(
|
||||||
|
processor: ScopeTowerProcessor<C>,
|
||||||
|
resultCollector: ResultCollector<C>,
|
||||||
|
useOrder: Boolean,
|
||||||
|
name: Name
|
||||||
|
): Collection<C> = with(Task()) {
|
||||||
|
this@run.run(processor, resultCollector, useOrder, name)
|
||||||
|
}
|
||||||
|
|
||||||
private data class ScopeLevelsAndSkippedForLookups(
|
private data class ScopeLevelsAndSkippedForLookups(
|
||||||
val levelsToProcess: Collection<ScopeTowerLevel>,
|
val levelsToProcess: Collection<ScopeTowerLevel>,
|
||||||
val levelsToSkip: Collection<ScopeTowerLevel>
|
val levelsToSkip: Collection<ScopeTowerLevel>
|
||||||
)
|
)
|
||||||
|
|
||||||
|
private inner class Task {
|
||||||
private fun ImplicitScopeTower.createNonLocalLevels(name: Name): ScopeLevelsAndSkippedForLookups {
|
private fun ImplicitScopeTower.createNonLocalLevels(name: Name): ScopeLevelsAndSkippedForLookups {
|
||||||
val mainResult = mutableListOf<ScopeTowerLevel>()
|
val mainResult = mutableListOf<ScopeTowerLevel>()
|
||||||
val skippedLevels = mutableListOf<ScopeTowerLevel>()
|
val skippedLevels = mutableListOf<ScopeTowerLevel>()
|
||||||
@@ -138,7 +148,7 @@ class TowerResolver {
|
|||||||
return ScopeLevelsAndSkippedForLookups(mainResult, skippedLevels)
|
return ScopeLevelsAndSkippedForLookups(mainResult, skippedLevels)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun <C : Candidate> ImplicitScopeTower.run(
|
fun <C : Candidate> ImplicitScopeTower.run(
|
||||||
processor: ScopeTowerProcessor<C>,
|
processor: ScopeTowerProcessor<C>,
|
||||||
resultCollector: ResultCollector<C>,
|
resultCollector: ResultCollector<C>,
|
||||||
useOrder: Boolean,
|
useOrder: Boolean,
|
||||||
@@ -253,6 +263,7 @@ class TowerResolver {
|
|||||||
|
|
||||||
private fun ResolutionScope.mayFitForName(name: Name) =
|
private fun ResolutionScope.mayFitForName(name: Name) =
|
||||||
!definitelyDoesNotContainName(name) || !definitelyDoesNotContainName(OperatorNameConventions.INVOKE)
|
!definitelyDoesNotContainName(name) || !definitelyDoesNotContainName(OperatorNameConventions.INVOKE)
|
||||||
|
}
|
||||||
|
|
||||||
fun <C : Candidate> runWithEmptyTowerData(
|
fun <C : Candidate> runWithEmptyTowerData(
|
||||||
processor: ScopeTowerProcessor<C>,
|
processor: ScopeTowerProcessor<C>,
|
||||||
|
|||||||
Reference in New Issue
Block a user