diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirInheritorsProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirInheritorsProvider.kt index 2810b384232..9879c14ec13 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirInheritorsProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirInheritorsProvider.kt @@ -35,7 +35,7 @@ internal class KtFirInheritorsProvider( override fun getEnumEntries(classSymbol: KtNamedClassOrObjectSymbol): List { require(classSymbol.classKind == KtClassKind.ENUM_CLASS) return with(analysisSession) { - classSymbol.getDeclaredMemberScope().getCallableSymbols().filterIsInstance().toList() + classSymbol.getStaticDeclaredMemberScope().getCallableSymbols().filterIsInstance().toList() } } diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/SymbolByFqName.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/SymbolByFqName.kt index ec6265060c2..5d138fd6123 100644 --- a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/SymbolByFqName.kt +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/SymbolByFqName.kt @@ -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()) { diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/declarations/bodies/KtRendererBodyMemberScopeProvider.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/declarations/bodies/KtRendererBodyMemberScopeProvider.kt index 7590b42ac4f..30744f3be4d 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/declarations/bodies/KtRendererBodyMemberScopeProvider.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/declarations/bodies/KtRendererBodyMemberScopeProvider.kt @@ -16,14 +16,14 @@ public interface KtRendererBodyMemberScopeProvider { public object ALL : KtRendererBodyMemberScopeProvider { context(KtAnalysisSession) override fun getMemberScope(symbol: KtSymbolWithMembers): List { - return symbol.getDeclaredMemberScope().getAllSymbols().toList() + return symbol.getCombinedDeclaredMemberScope().getAllSymbols().toList() } } public object ALL_DECLARED : KtRendererBodyMemberScopeProvider { context(KtAnalysisSession) override fun getMemberScope(symbol: KtSymbolWithMembers): List { - return symbol.getDeclaredMemberScope().getAllSymbols() + return symbol.getCombinedDeclaredMemberScope().getAllSymbols() .filter { member -> val origin = member.origin origin != KtSymbolOrigin.DELEGATED && diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassOrObject.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassOrObject.kt index 6c5fd045025..23e67d58ddf 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassOrObject.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassOrObject.kt @@ -109,7 +109,8 @@ internal open class SymbolLightClassForClassOrObject : SymbolLightClassForNamedC withClassOrObjectSymbol { classOrObjectSymbol -> val result = mutableListOf() - 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, classOrObjectSymbol: KtNamedClassOrObjectSymbol) { if (!isEnum) return - classOrObjectSymbol.getDeclaredMemberScope().getCallableSymbols() + classOrObjectSymbol.getStaticDeclaredMemberScope().getCallableSymbols() .filterIsInstance() .mapNotNullTo(result) { val enumEntry = it.psiSafe() diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt index e2326060579..905fc362da2 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt @@ -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().mapTo(result) { + getStaticDeclaredMemberScope().getClassifierSymbols().filterIsInstance().mapTo(result) { val classOrObjectDeclaration = it.psiSafe() 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() .applyIf(symbolWithMembers is KtClassOrObjectSymbol && symbolWithMembers.classKind == KtClassKind.COMPANION_OBJECT) { // All fields for companion object of classes are generated to the containing class diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt index 7a56b56f11b..fa3f1ff785a 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt @@ -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.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()