FirClassDeclaredMemberScope: use just Name instead of ClassId/CallableId
This should decrease amount of created garbage a little bit
This commit is contained in:
+7
-12
@@ -13,32 +13,27 @@ import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
|||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.STOP
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.STOP
|
||||||
import org.jetbrains.kotlin.fir.symbols.*
|
import org.jetbrains.kotlin.fir.symbols.*
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class FirClassDeclaredMemberScope(
|
class FirClassDeclaredMemberScope(klass: FirRegularClass) : FirScope {
|
||||||
klass: FirRegularClass
|
|
||||||
) : FirScope {
|
|
||||||
private val classId = klass.symbol.classId
|
|
||||||
private val callablesIndex by lazy {
|
private val callablesIndex by lazy {
|
||||||
klass.declarations.filterIsInstance<FirCallableDeclaration>()
|
klass.declarations.filterIsInstance<FirCallableDeclaration>()
|
||||||
.map { it.symbol }.groupBy { it.callableId }
|
.map { it.symbol }.groupBy { it.callableId.callableName }
|
||||||
}
|
}
|
||||||
private val classIndex by lazy {
|
private val classIndex by lazy {
|
||||||
klass.declarations.filterIsInstance<FirRegularClass>()
|
klass.declarations.filterIsInstance<FirRegularClass>()
|
||||||
.map { it.symbol }.associateBy { it.classId }
|
.map { it.symbol }.associateBy { it.fir.name }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun processFunctionsByName(name: Name, processor: (ConeFunctionSymbol) -> ProcessorAction): ProcessorAction {
|
override fun processFunctionsByName(name: Name, processor: (ConeFunctionSymbol) -> ProcessorAction): ProcessorAction {
|
||||||
val matchedClass = classIndex[ClassId(classId.packageFqName, classId.relativeClassName.child(name), false)]
|
val matchedClass = classIndex[name]
|
||||||
|
|
||||||
if (matchedClass != null) {
|
if (matchedClass != null) {
|
||||||
if (FirClassDeclaredMemberScope(matchedClass.fir).processFunctionsByName(name, processor) == STOP) {
|
if (FirClassDeclaredMemberScope(matchedClass.fir).processFunctionsByName(name, processor) == STOP) {
|
||||||
return STOP
|
return STOP
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val symbols = callablesIndex[CallableId(classId.packageFqName, classId.relativeClassName, name)] ?: emptyList()
|
val symbols = callablesIndex[name] ?: emptyList()
|
||||||
for (symbol in symbols) {
|
for (symbol in symbols) {
|
||||||
if (symbol is ConeFunctionSymbol && !processor(symbol)) {
|
if (symbol is ConeFunctionSymbol && !processor(symbol)) {
|
||||||
return STOP
|
return STOP
|
||||||
@@ -48,7 +43,7 @@ class FirClassDeclaredMemberScope(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction {
|
override fun processPropertiesByName(name: Name, processor: (ConeVariableSymbol) -> ProcessorAction): ProcessorAction {
|
||||||
val symbols = callablesIndex[CallableId(classId.packageFqName, classId.relativeClassName, name)] ?: emptyList()
|
val symbols = callablesIndex[name] ?: emptyList()
|
||||||
for (symbol in symbols) {
|
for (symbol in symbols) {
|
||||||
if (symbol is ConePropertySymbol && !processor(symbol)) {
|
if (symbol is ConePropertySymbol && !processor(symbol)) {
|
||||||
return STOP
|
return STOP
|
||||||
@@ -58,7 +53,7 @@ class FirClassDeclaredMemberScope(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun processClassifiersByName(name: Name, position: FirPosition, processor: (ConeClassifierSymbol) -> Boolean): Boolean {
|
override fun processClassifiersByName(name: Name, position: FirPosition, processor: (ConeClassifierSymbol) -> Boolean): Boolean {
|
||||||
val matchedClass = classIndex[classId.createNestedClassId(name)]
|
val matchedClass = classIndex[name]
|
||||||
if (matchedClass != null && !processor(matchedClass)) {
|
if (matchedClass != null && !processor(matchedClass)) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user