[FIR] Rewrite casts to reduce performance dispersion
This commit is contained in:
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.cast
|
|||||||
interface TowerScopeLevel {
|
interface TowerScopeLevel {
|
||||||
|
|
||||||
sealed class Token<out T : AbstractFirBasedSymbol<*>> {
|
sealed class Token<out T : AbstractFirBasedSymbol<*>> {
|
||||||
object Properties : Token<FirPropertySymbol>()
|
object Properties : Token<FirVariableSymbol<*>>()
|
||||||
|
|
||||||
object Functions : Token<FirFunctionSymbol<*>>()
|
object Functions : Token<FirFunctionSymbol<*>>()
|
||||||
object Objects : Token<AbstractFirBasedSymbol<*>>()
|
object Objects : Token<AbstractFirBasedSymbol<*>>()
|
||||||
@@ -121,17 +121,30 @@ class MemberScopeTowerLevel(
|
|||||||
return ProcessorAction.NEXT
|
return ProcessorAction.NEXT
|
||||||
}
|
}
|
||||||
return when (token) {
|
return when (token) {
|
||||||
TowerScopeLevel.Token.Properties -> processMembers(processor) { symbol ->
|
is TowerScopeLevel.Token.Properties -> processMembers(processor) { consumer ->
|
||||||
this.processPropertiesByName(name, symbol.cast())
|
this.processPropertiesByName(name) {
|
||||||
|
// WARNING, DO NOT CAST FUNCTIONAL TYPE ITSELF
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
consumer(it as T)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
TowerScopeLevel.Token.Functions -> processMembers(processor) { symbol ->
|
TowerScopeLevel.Token.Functions -> processMembers(processor) { consumer ->
|
||||||
this.processFunctionsAndConstructorsByName(
|
this.processFunctionsAndConstructorsByName(
|
||||||
name, session, bodyResolveComponents,
|
name, session, bodyResolveComponents,
|
||||||
noInnerConstructors = false, processor = symbol.cast()
|
noInnerConstructors = false,
|
||||||
|
processor = {
|
||||||
|
// WARNING, DO NOT CAST FUNCTIONAL TYPE ITSELF
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
consumer(it as T)
|
||||||
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
TowerScopeLevel.Token.Objects -> processMembers(processor) { symbol ->
|
TowerScopeLevel.Token.Objects -> processMembers(processor) { consumer ->
|
||||||
this.processClassifiersByName(name, symbol.cast())
|
this.processClassifiersByName(name) {
|
||||||
|
// WARNING, DO NOT CAST FUNCTIONAL TYPE ITSELF
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
consumer(it as T)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -55,11 +55,11 @@ abstract class FirAbstractImportingScope(
|
|||||||
when (token) {
|
when (token) {
|
||||||
TowerScopeLevel.Token.Functions -> scope.processFunctionsByName(
|
TowerScopeLevel.Token.Functions -> scope.processFunctionsByName(
|
||||||
callableId.callableName,
|
callableId.callableName,
|
||||||
processor.cast()
|
processor
|
||||||
)
|
)
|
||||||
TowerScopeLevel.Token.Properties -> scope.processPropertiesByName(
|
TowerScopeLevel.Token.Properties -> scope.processPropertiesByName(
|
||||||
callableId.callableName,
|
callableId.callableName,
|
||||||
processor.cast()
|
processor
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} else if (name.isSpecial || name.identifier.isNotEmpty()) {
|
} else if (name.isSpecial || name.identifier.isNotEmpty()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user