[SLC] SymbolLightClassForNamedClassLike: cleanup addMethodsFromCompanionIfNeeded function

^KT-54051
This commit is contained in:
Dmitrii Gridin
2022-11-28 12:50:32 +01:00
committed by Space Team
parent ef9412e0aa
commit c9d1e2b0a2
3 changed files with 18 additions and 13 deletions
@@ -157,7 +157,7 @@ internal open class SymbolLightClassForClassOrObject : SymbolLightClassForNamedC
createConstructors(declaredMemberScope.getConstructors(), result) createConstructors(declaredMemberScope.getConstructors(), result)
addMethodsFromCompanionIfNeeded(result) addMethodsFromCompanionIfNeeded(result, classOrObjectSymbol)
addMethodsFromDataClass(result, classOrObjectSymbol) addMethodsFromDataClass(result, classOrObjectSymbol)
addDelegatesToInterfaceMethods(result, classOrObjectSymbol) addDelegatesToInterfaceMethods(result, classOrObjectSymbol)
@@ -346,5 +346,6 @@ internal open class SymbolLightClassForClassOrObject : SymbolLightClassForNamedC
override fun isAnnotationType(): Boolean = false override fun isAnnotationType(): Boolean = false
override fun copy(): SymbolLightClassForClassOrObject = SymbolLightClassForClassOrObject(classOrObjectDeclaration, classOrObjectSymbolPointer, ktModule, manager) override fun copy(): SymbolLightClassForClassOrObject =
SymbolLightClassForClassOrObject(classOrObjectDeclaration, classOrObjectSymbolPointer, ktModule, manager)
} }
@@ -59,7 +59,7 @@ internal open class SymbolLightClassForInterface : SymbolLightClassForInterfaceO
.filterNot { it is KtFunctionSymbol && it.visibility.isPrivateOrPrivateToThis() } .filterNot { it is KtFunctionSymbol && it.visibility.isPrivateOrPrivateToThis() }
createMethods(visibleDeclarations, result) createMethods(visibleDeclarations, result)
addMethodsFromCompanionIfNeeded(result) addMethodsFromCompanionIfNeeded(result, classOrObjectSymbol)
result result
} }
@@ -47,26 +47,30 @@ abstract class SymbolLightClassForNamedClassLike : SymbolLightClassForClassLike<
manager = manager manager = manager
) )
context(KtAnalysisSession)
protected fun addMethodsFromCompanionIfNeeded( protected fun addMethodsFromCompanionIfNeeded(
result: MutableList<KtLightMethod>, result: MutableList<KtLightMethod>,
): Unit = withClassOrObjectSymbol { classOrObjectSymbol -> classOrObjectSymbol: KtNamedClassOrObjectSymbol,
classOrObjectSymbol.companionObject?.run { ) {
val methods = getDeclaredMemberScope().getCallableSymbols() val companionObjectSymbol = classOrObjectSymbol.companionObject ?: return
.filterIsInstance<KtFunctionSymbol>() val methods = companionObjectSymbol.getDeclaredMemberScope()
.filter { it.hasJvmStaticAnnotation() } .getCallableSymbols()
.filterIsInstance<KtFunctionSymbol>()
.filter { it.hasJvmStaticAnnotation() }
createMethods(methods, result) createMethods(methods, result)
val properties = getDeclaredMemberScope().getCallableSymbols().filterIsInstance<KtPropertySymbol>() companionObjectSymbol.getDeclaredMemberScope()
properties.forEach { property -> .getCallableSymbols()
.filterIsInstance<KtPropertySymbol>()
.forEach { property ->
createPropertyAccessors( createPropertyAccessors(
result, result,
property, property,
isTopLevel = false, isTopLevel = false,
onlyJvmStatic = true onlyJvmStatic = true,
) )
} }
}
} }
private val KtPropertySymbol.isConstOrJvmField: Boolean get() = isConst || hasJvmFieldAnnotation() private val KtPropertySymbol.isConstOrJvmField: Boolean get() = isConst || hasJvmFieldAnnotation()