[AA] Update usages of declared member scopes
- Now that non-static declared member scopes don't contain static callables anymore, we have to update some usages in the Analysis API. - In symbol light classes, many usages of `getDeclaredMemberScope` can be kept as-is because Kotlin classes/objects generally cannot declare static callables (and we do not need to create symbol light classes for Java classes). The only exception are enum classes, which implicitly declare some static callables. ^KT-61800
This commit is contained in:
committed by
Space Team
parent
21efd6aff3
commit
df54540a81
+1
-1
@@ -35,7 +35,7 @@ internal class KtFirInheritorsProvider(
|
||||
override fun getEnumEntries(classSymbol: KtNamedClassOrObjectSymbol): List<KtEnumEntrySymbol> {
|
||||
require(classSymbol.classKind == KtClassKind.ENUM_CLASS)
|
||||
return with(analysisSession) {
|
||||
classSymbol.getDeclaredMemberScope().getCallableSymbols().filterIsInstance<KtEnumEntrySymbol>().toList()
|
||||
classSymbol.getStaticDeclaredMemberScope().getCallableSymbols().filterIsInstance<KtEnumEntrySymbol>().toList()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -9,8 +9,8 @@ import com.intellij.openapi.util.io.FileUtil
|
||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtClassKind
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol
|
||||
import org.jetbrains.kotlin.name.CallableId
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||
import org.jetbrains.kotlin.name.CallableId
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
@@ -75,7 +75,7 @@ sealed class SymbolData {
|
||||
val classSymbol =
|
||||
getClassOrObjectSymbolByClassId(classId)
|
||||
?: error("Class $classId is not found")
|
||||
classSymbol.getDeclaredMemberScope().getCallableSymbols(callableId.callableName)
|
||||
classSymbol.getCombinedDeclaredMemberScope().getCallableSymbols(callableId.callableName)
|
||||
.toList()
|
||||
}
|
||||
if (symbols.isEmpty()) {
|
||||
|
||||
+2
-2
@@ -16,14 +16,14 @@ public interface KtRendererBodyMemberScopeProvider {
|
||||
public object ALL : KtRendererBodyMemberScopeProvider {
|
||||
context(KtAnalysisSession)
|
||||
override fun getMemberScope(symbol: KtSymbolWithMembers): List<KtDeclarationSymbol> {
|
||||
return symbol.getDeclaredMemberScope().getAllSymbols().toList()
|
||||
return symbol.getCombinedDeclaredMemberScope().getAllSymbols().toList()
|
||||
}
|
||||
}
|
||||
|
||||
public object ALL_DECLARED : KtRendererBodyMemberScopeProvider {
|
||||
context(KtAnalysisSession)
|
||||
override fun getMemberScope(symbol: KtSymbolWithMembers): List<KtDeclarationSymbol> {
|
||||
return symbol.getDeclaredMemberScope().getAllSymbols()
|
||||
return symbol.getCombinedDeclaredMemberScope().getAllSymbols()
|
||||
.filter { member ->
|
||||
val origin = member.origin
|
||||
origin != KtSymbolOrigin.DELEGATED &&
|
||||
|
||||
+3
-2
@@ -109,7 +109,8 @@ internal open class SymbolLightClassForClassOrObject : SymbolLightClassForNamedC
|
||||
withClassOrObjectSymbol { classOrObjectSymbol ->
|
||||
val result = mutableListOf<KtLightMethod>()
|
||||
|
||||
val declaredMemberScope = classOrObjectSymbol.getDeclaredMemberScope()
|
||||
// We should use the combined declared member scope here because an enum class may contain static callables.
|
||||
val declaredMemberScope = classOrObjectSymbol.getCombinedDeclaredMemberScope()
|
||||
|
||||
val visibleDeclarations = declaredMemberScope.getCallableSymbols()
|
||||
.applyIf(classKind().isObject) {
|
||||
@@ -263,7 +264,7 @@ internal open class SymbolLightClassForClassOrObject : SymbolLightClassForNamedC
|
||||
private fun addFieldsForEnumEntries(result: MutableList<KtLightField>, classOrObjectSymbol: KtNamedClassOrObjectSymbol) {
|
||||
if (!isEnum) return
|
||||
|
||||
classOrObjectSymbol.getDeclaredMemberScope().getCallableSymbols()
|
||||
classOrObjectSymbol.getStaticDeclaredMemberScope().getCallableSymbols()
|
||||
.filterIsInstance<KtEnumEntrySymbol>()
|
||||
.mapNotNullTo(result) {
|
||||
val enumEntry = it.psiSafe<KtEnumEntry>()
|
||||
|
||||
+2
-2
@@ -541,7 +541,7 @@ internal fun KtSymbolWithMembers.createInnerClasses(
|
||||
// inner classes with null names can't be searched for and can't be used from java anyway
|
||||
// we can't prohibit creating light classes with null names either since they can contain members
|
||||
|
||||
getDeclaredMemberScope().getClassifierSymbols().filterIsInstance<KtNamedClassOrObjectSymbol>().mapTo(result) {
|
||||
getStaticDeclaredMemberScope().getClassifierSymbols().filterIsInstance<KtNamedClassOrObjectSymbol>().mapTo(result) {
|
||||
val classOrObjectDeclaration = it.psiSafe<KtClassOrObject>()
|
||||
if (classOrObjectDeclaration != null) {
|
||||
createLightClassNoCache(classOrObjectDeclaration, containingClass.ktModule)
|
||||
@@ -622,7 +622,7 @@ internal fun SymbolLightClassBase.addPropertyBackingFields(
|
||||
symbolWithMembers: KtSymbolWithMembers,
|
||||
forceIsStaticTo: Boolean? = null,
|
||||
) {
|
||||
val propertySymbols = symbolWithMembers.getDeclaredMemberScope().getCallableSymbols()
|
||||
val propertySymbols = symbolWithMembers.getCombinedDeclaredMemberScope().getCallableSymbols()
|
||||
.filterIsInstance<KtPropertySymbol>()
|
||||
.applyIf(symbolWithMembers is KtClassOrObjectSymbol && symbolWithMembers.classKind == KtClassKind.COMPANION_OBJECT) {
|
||||
// All fields for companion object of classes are generated to the containing class
|
||||
|
||||
+3
-3
@@ -23,7 +23,6 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.types.*
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||
import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker
|
||||
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightElement
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightMember
|
||||
import org.jetbrains.kotlin.asJava.elements.psiType
|
||||
@@ -39,6 +38,7 @@ import org.jetbrains.kotlin.light.classes.symbol.classes.modificationTrackerForC
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.SpecialNames
|
||||
import org.jetbrains.kotlin.psi.KtTypeParameterListOwner
|
||||
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
|
||||
import java.util.*
|
||||
|
||||
internal fun <L : Any> L.invalidAccess(): Nothing =
|
||||
@@ -87,7 +87,7 @@ internal fun KtClassOrObjectSymbol.enumClassModality(): String? {
|
||||
return PsiModifier.ABSTRACT
|
||||
}
|
||||
|
||||
if (getDeclaredMemberScope().getCallableSymbols().none { it is KtEnumEntrySymbol && it.requiresSubClass() }) {
|
||||
if (getStaticDeclaredMemberScope().getCallableSymbols().none { it is KtEnumEntrySymbol && it.requiresSubClass() }) {
|
||||
return PsiModifier.FINAL
|
||||
}
|
||||
|
||||
@@ -97,7 +97,7 @@ internal fun KtClassOrObjectSymbol.enumClassModality(): String? {
|
||||
context(KtAnalysisSession)
|
||||
private fun KtEnumEntrySymbol.requiresSubClass(): Boolean {
|
||||
val initializer = enumEntryInitializer ?: return false
|
||||
return initializer.getDeclaredMemberScope().getAllSymbols().any { it !is KtConstructorSymbol }
|
||||
return initializer.getCombinedDeclaredMemberScope().getAllSymbols().any { it !is KtConstructorSymbol }
|
||||
}
|
||||
|
||||
internal fun KtSymbolWithVisibility.toPsiVisibilityForMember(): String = visibility.toPsiVisibilityForMember()
|
||||
|
||||
Reference in New Issue
Block a user