diff --git a/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirIconProvider.kt b/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirIconProvider.kt index 636c92ed317..bc0b7992d18 100644 --- a/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirIconProvider.kt +++ b/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirIconProvider.kt @@ -28,7 +28,7 @@ internal object KotlinFirIconProvider { } if (symbol is KtClassOrObjectSymbol) { - val isAbstract = symbol.modality == KtCommonSymbolModality.ABSTRACT + val isAbstract = (symbol as? KtNamedClassOrObjectSymbol)?.modality == KtCommonSymbolModality.ABSTRACT return when (symbol.classKind) { KtClassKind.CLASS -> if (isAbstract) KotlinIcons.ABSTRACT_CLASS else KotlinIcons.CLASS @@ -36,6 +36,7 @@ internal object KotlinFirIconProvider { KtClassKind.ANNOTATION_CLASS -> KotlinIcons.ANNOTATION KtClassKind.OBJECT, KtClassKind.COMPANION_OBJECT -> KotlinIcons.OBJECT KtClassKind.INTERFACE -> KotlinIcons.INTERFACE + KtClassKind.ANONYMOUS_OBJECT -> KotlinIcons.OBJECT } } diff --git a/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirLookupElementFactory.kt b/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirLookupElementFactory.kt index 3ceba7d35c8..7314b8cf2e6 100644 --- a/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirLookupElementFactory.kt +++ b/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirLookupElementFactory.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtTypeArgumentList import org.jetbrains.kotlin.psi.psiUtil.endOffset @@ -94,7 +95,8 @@ private data class VariableLookupObject( private class ClassLookupElementFactory { fun createLookup(symbol: KtClassLikeSymbol): LookupElementBuilder { - return LookupElementBuilder.create(ClassifierLookupObject(symbol.name, symbol.classIdIfNonLocal), symbol.name.asString()) + val name = symbol.nameOrAnonymous + return LookupElementBuilder.create(ClassifierLookupObject(name, symbol.classIdIfNonLocal), name.asString()) .withInsertHandler(ClassifierInsertionHandler) } } diff --git a/idea/idea-fir/src/org/jetbrains/kotlin/idea/findUsages/KotlinFindUsagesSupportFirImpl.kt b/idea/idea-fir/src/org/jetbrains/kotlin/idea/findUsages/KotlinFindUsagesSupportFirImpl.kt index 10027386a2f..1a8d560232f 100644 --- a/idea/idea-fir/src/org/jetbrains/kotlin/idea/findUsages/KotlinFindUsagesSupportFirImpl.kt +++ b/idea/idea-fir/src/org/jetbrains/kotlin/idea/findUsages/KotlinFindUsagesSupportFirImpl.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtNamedSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolWithKind import org.jetbrains.kotlin.idea.refactoring.CHECK_SUPER_METHODS_YES_NO_DIALOG import org.jetbrains.kotlin.idea.refactoring.formatPsiClass +import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext class KotlinFindUsagesSupportFirImpl : KotlinFindUsagesSupport { @@ -81,7 +82,7 @@ class KotlinFindUsagesSupportFirImpl : KotlinFindUsagesSupport { val filteredDeclarations = if (ignore != null) renderToPsi.filter { ignore.contains(it.first) } else renderToPsi - val renderedClass = containingClass.name.asString() //TODO render class + val renderedClass = containingClass.name?.asString() ?: SpecialNames.ANONYMOUS //TODO render class AnalyzedModel(renderedClass, filteredDeclarations.toMap()) } diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/components/KtTypeProvider.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/components/KtTypeProvider.kt index f701df11bcd..c2daba64ab2 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/components/KtTypeProvider.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/components/KtTypeProvider.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.frontend.api.components import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassOrObjectSymbol +import org.jetbrains.kotlin.idea.frontend.api.symbols.KtNamedClassOrObjectSymbol import org.jetbrains.kotlin.idea.frontend.api.types.KtType abstract class KtTypeProvider : KtAnalysisSessionComponent() { @@ -14,7 +15,7 @@ abstract class KtTypeProvider : KtAnalysisSessionComponent() { abstract fun approximateToSuperPublicDenotableType(type: KtType): KtType? - abstract fun buildSelfClassType(symbol: KtClassOrObjectSymbol): KtType + abstract fun buildSelfClassType(symbol: KtNamedClassOrObjectSymbol): KtType } interface KtTypeProviderMixIn : KtAnalysisSessionMixIn { @@ -30,7 +31,7 @@ interface KtTypeProviderMixIn : KtAnalysisSessionMixIn { fun KtType.approximateToSuperPublicDenotable(): KtType? = analysisSession.typeProvider.approximateToSuperPublicDenotableType(this) - fun KtClassOrObjectSymbol.buildSelfClassType(): KtType = + fun KtNamedClassOrObjectSymbol.buildSelfClassType(): KtType = analysisSession.typeProvider.buildSelfClassType(this) } diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtAnonymousObjectSymbol.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtAnonymousObjectSymbol.kt deleted file mode 100644 index 149a72e7d72..00000000000 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtAnonymousObjectSymbol.kt +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.idea.frontend.api.symbols - -import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotatedSymbol -import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolWithMembers -import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolWithKind -import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtTypeAndAnnotations -import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer -import org.jetbrains.kotlin.idea.frontend.api.types.KtType - -abstract class KtAnonymousObjectSymbol : KtSymbolWithKind, KtAnnotatedSymbol, KtSymbolWithMembers { - abstract val superTypes: List - - abstract override fun createPointer(): KtSymbolPointer -} \ No newline at end of file diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtClassLikeSymbol.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtClassLikeSymbol.kt index de9ce655f18..59068ea77c8 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtClassLikeSymbol.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtClassLikeSymbol.kt @@ -9,9 +9,14 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.* import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.types.Variance -sealed class KtClassifierSymbol : KtSymbol, KtNamedSymbol +sealed class KtClassifierSymbol : KtSymbol, KtPossiblyNamedSymbol + +val KtClassifierSymbol.nameOrAnonymous: Name + get() = name ?: SpecialNames.ANONYMOUS_FUNCTION abstract class KtTypeParameterSymbol : KtClassifierSymbol(), KtNamedSymbol { abstract override fun createPointer(): KtSymbolPointer @@ -21,13 +26,13 @@ abstract class KtTypeParameterSymbol : KtClassifierSymbol(), KtNamedSymbol { abstract val isReified: Boolean } -sealed class KtClassLikeSymbol : KtClassifierSymbol(), KtNamedSymbol, KtSymbolWithKind { +sealed class KtClassLikeSymbol : KtClassifierSymbol(), KtSymbolWithKind { abstract val classIdIfNonLocal: ClassId? abstract override fun createPointer(): KtSymbolPointer } -abstract class KtTypeAliasSymbol : KtClassLikeSymbol() { +abstract class KtTypeAliasSymbol : KtClassLikeSymbol(), KtNamedSymbol { abstract override val classIdIfNonLocal: ClassId final override val symbolKind: KtSymbolKind get() = KtSymbolKind.TOP_LEVEL @@ -35,13 +40,30 @@ abstract class KtTypeAliasSymbol : KtClassLikeSymbol() { abstract override fun createPointer(): KtSymbolPointer } -abstract class KtClassOrObjectSymbol : KtClassLikeSymbol(), +sealed class KtClassOrObjectSymbol : KtClassLikeSymbol(), + KtAnnotatedSymbol, + KtSymbolWithMembers { + + abstract val classKind: KtClassKind + abstract val superTypes: List + + abstract override fun createPointer(): KtSymbolPointer +} + +abstract class KtAnonymousObjectSymbol : KtClassOrObjectSymbol() { + final override val classKind: KtClassKind get() = KtClassKind.ANONYMOUS_OBJECT + final override val classIdIfNonLocal: ClassId? get() = null + final override val symbolKind: KtSymbolKind get() = KtSymbolKind.LOCAL + final override val name: Name? get() = null + + abstract override fun createPointer(): KtSymbolPointer +} + +abstract class KtNamedClassOrObjectSymbol : KtClassOrObjectSymbol(), KtSymbolWithTypeParameters, KtSymbolWithModality, KtSymbolWithVisibility, - KtAnnotatedSymbol, - KtSymbolWithMembers { - abstract val classKind: KtClassKind + KtNamedSymbol { abstract val isInner: Boolean abstract val isData: Boolean @@ -50,13 +72,11 @@ abstract class KtClassOrObjectSymbol : KtClassLikeSymbol(), abstract val isExternal: Boolean - abstract val companionObject: KtClassOrObjectSymbol? + abstract val companionObject: KtNamedClassOrObjectSymbol? - abstract val superTypes: List - - abstract override fun createPointer(): KtSymbolPointer + abstract override fun createPointer(): KtSymbolPointer } enum class KtClassKind { - CLASS, ENUM_CLASS, ENUM_ENTRY, ANNOTATION_CLASS, OBJECT, COMPANION_OBJECT, INTERFACE + CLASS, ENUM_CLASS, ENUM_ENTRY, ANNOTATION_CLASS, OBJECT, COMPANION_OBJECT, INTERFACE, ANONYMOUS_OBJECT } diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtSymbolProvider.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtSymbolProvider.kt index 6d15de3665c..70e76256901 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtSymbolProvider.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtSymbolProvider.kt @@ -42,6 +42,7 @@ abstract class KtSymbolProvider : KtAnalysisSessionComponent() { abstract fun getVariableSymbol(psi: KtProperty): KtVariableSymbol abstract fun getAnonymousObjectSymbol(psi: KtObjectLiteralExpression): KtAnonymousObjectSymbol abstract fun getClassOrObjectSymbol(psi: KtClassOrObject): KtClassOrObjectSymbol + abstract fun getNamedClassOrObjectSymbol(psi: KtClassOrObject): KtNamedClassOrObjectSymbol abstract fun getPropertyAccessorSymbol(psi: KtPropertyAccessor): KtPropertyAccessorSymbol abstract fun getClassOrObjectSymbolByClassId(classId: ClassId): KtClassOrObjectSymbol? @@ -86,6 +87,9 @@ interface KtSymbolProviderMixIn : KtAnalysisSessionMixIn { fun KtClassOrObject.getClassOrObjectSymbol(): KtClassOrObjectSymbol = analysisSession.symbolProvider.getClassOrObjectSymbol(this) + fun KtClassOrObject.getNamedClassOrObjectSymbol(): KtNamedClassOrObjectSymbol = + analysisSession.symbolProvider.getNamedClassOrObjectSymbol(this) + fun KtPropertyAccessor.getPropertyAccessorSymbol(): KtPropertyAccessorSymbol = analysisSession.symbolProvider.getPropertyAccessorSymbol(this) diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/markers/markers.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/markers/markers.kt index bebe2ed0c23..451821786bc 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/markers/markers.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/markers/markers.kt @@ -10,8 +10,12 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.KtTypeParameterSymbol import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.name.Name -interface KtNamedSymbol : KtSymbol { - val name: Name +interface KtPossiblyNamedSymbol : KtSymbol { + val name: Name? +} + +interface KtNamedSymbol : KtPossiblyNamedSymbol { + abstract override val name: Name } interface KtTypedSymbol : KtSymbol { diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightAnnotationClassSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightAnnotationClassSymbol.kt index aa36e2b1cbd..c147389bf11 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightAnnotationClassSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightAnnotationClassSymbol.kt @@ -14,14 +14,11 @@ import org.jetbrains.kotlin.asJava.elements.KtLightMethod import org.jetbrains.kotlin.idea.asJava.FirLightClassForClassOrObjectSymbol import org.jetbrains.kotlin.idea.frontend.api.fir.analyzeWithSymbolAsContext import org.jetbrains.kotlin.idea.frontend.api.isValid -import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassKind -import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassOrObjectSymbol -import org.jetbrains.kotlin.idea.frontend.api.symbols.KtConstructorSymbol -import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFunctionSymbol +import org.jetbrains.kotlin.idea.frontend.api.symbols.* import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.isPrivateOrPrivateToThis internal class FirLightAnnotationClassSymbol( - private val classOrObjectSymbol: KtClassOrObjectSymbol, + private val classOrObjectSymbol: KtNamedClassOrObjectSymbol, manager: PsiManager ) : FirLightInterfaceOrAnnotationClassSymbol(classOrObjectSymbol, manager) { diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightClassForClassOrObjectSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightClassForClassOrObjectSymbol.kt index 2182452e06d..1f684d68e16 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightClassForClassOrObjectSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightClassForClassOrObjectSymbol.kt @@ -31,7 +31,7 @@ import org.jetbrains.kotlin.psi.debugText.getDebugText import org.jetbrains.kotlin.psi.stubs.KotlinClassOrObjectStub internal abstract class FirLightClassForClassOrObjectSymbol( - private val classOrObjectSymbol: KtClassOrObjectSymbol, + private val classOrObjectSymbol: KtNamedClassOrObjectSymbol, manager: PsiManager ) : FirLightClassBase(manager), StubBasedPsiElement> { diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightClassForSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightClassForSymbol.kt index 78e0e2df9f5..59b46af647f 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightClassForSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightClassForSymbol.kt @@ -19,7 +19,7 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolWithVisibi import org.jetbrains.kotlin.load.java.JvmAbi internal class FirLightClassForSymbol( - private val classOrObjectSymbol: KtClassOrObjectSymbol, + private val classOrObjectSymbol: KtNamedClassOrObjectSymbol, manager: PsiManager ) : FirLightClassForClassOrObjectSymbol(classOrObjectSymbol, manager) { diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightInterfaceClassSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightInterfaceClassSymbol.kt index f18ae1eca6f..4df84a6981f 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightInterfaceClassSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightInterfaceClassSymbol.kt @@ -17,10 +17,11 @@ import org.jetbrains.kotlin.idea.frontend.api.isValid import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassKind import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassOrObjectSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFunctionSymbol +import org.jetbrains.kotlin.idea.frontend.api.symbols.KtNamedClassOrObjectSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.isPrivateOrPrivateToThis internal class FirLightInterfaceClassSymbol( - private val classOrObjectSymbol: KtClassOrObjectSymbol, + private val classOrObjectSymbol: KtNamedClassOrObjectSymbol, manager: PsiManager ) : FirLightInterfaceOrAnnotationClassSymbol(classOrObjectSymbol, manager) { diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightInterfaceOrAnnotationClassSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightInterfaceOrAnnotationClassSymbol.kt index 41506aab5dd..63ea69446c0 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightInterfaceOrAnnotationClassSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightInterfaceOrAnnotationClassSymbol.kt @@ -11,10 +11,11 @@ import org.jetbrains.kotlin.idea.asJava.* import org.jetbrains.kotlin.idea.frontend.api.isValid import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassKind import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassOrObjectSymbol +import org.jetbrains.kotlin.idea.frontend.api.symbols.KtNamedClassOrObjectSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolKind internal abstract class FirLightInterfaceOrAnnotationClassSymbol( - private val classOrObjectSymbol: KtClassOrObjectSymbol, + private val classOrObjectSymbol: KtNamedClassOrObjectSymbol, manager: PsiManager ) : FirLightClassForClassOrObjectSymbol(classOrObjectSymbol, manager) { diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/firLightClassUtils.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/firLightClassUtils.kt index 6506d34c3c3..198333df673 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/firLightClassUtils.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/firLightClassUtils.kt @@ -68,11 +68,13 @@ fun createFirLightClassNoCache(classOrObject: KtClassOrObject): KtLightClass? = else -> { analyze(classOrObject) { - val symbol = classOrObject.getClassOrObjectSymbol() - when (symbol.classKind) { - KtClassKind.INTERFACE -> FirLightInterfaceClassSymbol(symbol, classOrObject.manager) - KtClassKind.ANNOTATION_CLASS -> FirLightAnnotationClassSymbol(symbol, classOrObject.manager) - else -> FirLightClassForSymbol(symbol, classOrObject.manager) + when (val symbol = classOrObject.getClassOrObjectSymbol()) { + is KtAnonymousObjectSymbol -> FirLightAnonymousClassForSymbol(symbol, classOrObject.manager) + is KtNamedClassOrObjectSymbol -> when (symbol.classKind) { + KtClassKind.INTERFACE -> FirLightInterfaceClassSymbol(symbol, classOrObject.manager) + KtClassKind.ANNOTATION_CLASS -> FirLightAnnotationClassSymbol(symbol, classOrObject.manager) + else -> FirLightClassForSymbol(symbol, classOrObject.manager) + } } } } @@ -317,7 +319,7 @@ internal fun KtSymbolWithMembers.createInnerClasses(manager: PsiManager): List().mapTo(result) { + getDeclaredMemberScope().getAllSymbols().filterIsInstance().mapTo(result) { FirLightClassForSymbol(it, manager) } } @@ -332,8 +334,8 @@ internal fun KtSymbolWithMembers.createInnerClasses(manager: PsiManager): List) val types = analyzeWithSymbolAsContext(this) { this@typeForClassSymbol.buildSelfClassType() diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt index 641a6cdfa3d..a21b9644083 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.idea.frontend.api.fir import com.google.common.collect.MapMaker import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* @@ -82,33 +83,50 @@ internal class KtSymbolByFirBuilder private constructor( } - fun buildSymbol(fir: FirDeclaration): KtSymbol = symbolsCache.cache(fir) { - when (fir) { - is FirRegularClass -> buildClassSymbol(fir) + fun buildSymbol(fir: FirDeclaration): KtSymbol { + return when (fir) { + is FirClassLikeDeclaration<*> -> buildClassLikeSymbol(fir) is FirSimpleFunction -> buildFunctionSymbol(fir) is FirProperty -> buildVariableSymbol(fir) is FirValueParameter -> buildParameterSymbol(fir) is FirConstructor -> buildConstructorSymbol(fir) is FirTypeParameter -> buildTypeParameterSymbol(fir) - is FirTypeAlias -> buildTypeAliasSymbol(fir) is FirEnumEntry -> buildEnumEntrySymbol(fir) is FirField -> buildFieldSymbol(fir) is FirAnonymousFunction -> buildAnonymousFunctionSymbol(fir) is FirPropertyAccessor -> buildPropertyAccessorSymbol(fir) - is FirAnonymousObject -> buildAnonymousObjectSymbol(fir) else -> TODO(fir::class.toString()) } + } // TODO Handle all relevant cases fun buildCallableSymbol(fir: FirCallableDeclaration<*>): KtCallableSymbol = buildSymbol(fir) as KtCallableSymbol - fun buildClassLikeSymbol(fir: FirClassLikeDeclaration<*>): KtClassLikeSymbol = when (fir) { - is FirRegularClass -> buildClassSymbol(fir) - is FirTypeAlias -> buildTypeAliasSymbol(fir) - else -> - TODO(fir::class.toString()) + + fun buildClassLikeSymbol(fir: FirClassLikeDeclaration<*>): KtClassLikeSymbol { + return when (fir) { + is FirClass<*> -> buildClassOrObjectSymbol(fir) + is FirTypeAlias -> buildTypeAliasSymbol(fir) + else -> error("Unexpected ${fir::class.simpleName}") + } + } + + fun buildClassOrObjectSymbol(fir: FirClass<*>): KtClassOrObjectSymbol { + return when (fir) { + is FirAnonymousObject -> buildAnonymousObjectSymbol(fir) + is FirRegularClass -> buildNamedClassOrObjectSymbol(fir) + else -> error("Unexpected ${fir::class.simpleName}") + } + } + + fun buildNamedClassOrObjectSymbol(fir: FirRegularClass): KtFirNamedClassOrObjectSymbol { + return symbolsCache.cache(fir) { KtFirNamedClassOrObjectSymbol(fir, resolveState, token, this) } + } + + fun buildAnonymousObjectSymbol(fir: FirAnonymousObject): KtAnonymousObjectSymbol { + return symbolsCache.cache(fir) { KtFirAnonymousObjectSymbol(fir, resolveState, token, this) } } fun buildClassifierSymbol(firSymbol: FirClassifierSymbol<*>): KtClassifierSymbol = when (val fir = firSymbol.fir) { @@ -118,10 +136,6 @@ internal class KtSymbolByFirBuilder private constructor( TODO(fir::class.toString()) } - fun buildClassSymbol(fir: FirRegularClass) = symbolsCache.cache(fir) { KtFirClassOrObjectSymbol(fir, resolveState, token, this) } - - fun buildAnonymousObjectSymbol(fir: FirAnonymousObject) = - symbolsCache.cache(fir) { KtFirAnonymousObjectSymbol(fir, resolveState, token, this) } // TODO it can be a constructor parameter, which may be split into parameter & property // we should handle them both diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirScopeProvider.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirScopeProvider.kt index 84a3dfe962e..44c85b16004 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirScopeProvider.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirScopeProvider.kt @@ -24,13 +24,15 @@ import org.jetbrains.kotlin.idea.frontend.api.components.KtScopeProvider import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.scopes.* +import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.* import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirAnonymousObjectSymbol -import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirClassOrObjectSymbol import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirEnumEntrySymbol import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirFileSymbol +import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirNamedClassOrObjectSymbol import org.jetbrains.kotlin.idea.frontend.api.fir.types.KtFirType import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef import org.jetbrains.kotlin.idea.frontend.api.scopes.* +import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassOrObjectSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFileSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPackageSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolWithDeclarations @@ -59,7 +61,7 @@ internal class KtFirScopeProvider( private val packageMemberScopeCache = IdentityHashMap() private inline fun KtSymbolWithMembers.withFirForScope(crossinline body: (FirClass<*>) -> T): T? = when (this) { - is KtFirClassOrObjectSymbol -> firRef.withFir(FirResolvePhase.SUPER_TYPES, body) + is KtFirNamedClassOrObjectSymbol -> firRef.withFir(FirResolvePhase.SUPER_TYPES, body) is KtFirAnonymousObjectSymbol -> firRef.withFir(FirResolvePhase.SUPER_TYPES, body) is KtFirEnumEntrySymbol -> firRef.withFir(FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE) { val initializer = it.initializer diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirSymbolDeclarationOverridesProvider.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirSymbolDeclarationOverridesProvider.kt index 89b16deae63..2c626bc785b 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirSymbolDeclarationOverridesProvider.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirSymbolDeclarationOverridesProvider.kt @@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirIntersectionOverridePropertySymb import org.jetbrains.kotlin.idea.frontend.api.ValidityToken import org.jetbrains.kotlin.idea.frontend.api.components.KtSymbolDeclarationOverridesProvider import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession -import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirClassOrObjectSymbol +import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirNamedClassOrObjectSymbol import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.* import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolWithKind @@ -92,13 +92,13 @@ internal class KtFirSymbolDeclarationOverridesProvider( val containingDeclaration = with(analysisSession) { (callableSymbol as? KtSymbolWithKind)?.getContainingSymbol() as? KtClassOrObjectSymbol } ?: return - check(containingDeclaration is KtFirClassOrObjectSymbol) + check(containingDeclaration is KtFirNamedClassOrObjectSymbol) processOverrides(containingDeclaration, callableSymbol, process) } private inline fun processOverrides( - containingDeclaration: KtFirClassOrObjectSymbol, + containingDeclaration: KtFirNamedClassOrObjectSymbol, callableSymbol: KtFirSymbol<*>, crossinline process: (FirTypeScope, FirDeclaration) -> Unit ) { diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirTypeProvider.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirTypeProvider.kt index e31342c84d4..1e8ed64f5ea 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirTypeProvider.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirTypeProvider.kt @@ -14,10 +14,11 @@ import org.jetbrains.kotlin.idea.frontend.api.ValidityToken import org.jetbrains.kotlin.idea.frontend.api.components.KtBuiltinTypes import org.jetbrains.kotlin.idea.frontend.api.components.KtTypeProvider import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession -import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirClassOrObjectSymbol +import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirNamedClassOrObjectSymbol import org.jetbrains.kotlin.idea.frontend.api.fir.types.KtFirType import org.jetbrains.kotlin.idea.frontend.api.fir.types.PublicTypeApproximator import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassOrObjectSymbol +import org.jetbrains.kotlin.idea.frontend.api.symbols.KtNamedClassOrObjectSymbol import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.types.TypeApproximatorConfiguration @@ -40,8 +41,8 @@ internal class KtFirTypeProvider( } - override fun buildSelfClassType(symbol: KtClassOrObjectSymbol): KtType { - require(symbol is KtFirClassOrObjectSymbol) + override fun buildSelfClassType(symbol: KtNamedClassOrObjectSymbol): KtType { + require(symbol is KtFirNamedClassOrObjectSymbol) val type = symbol.firRef.withFir(FirResolvePhase.SUPER_TYPES) { firClass -> ConeClassLikeTypeImpl( firClass.symbol.toLookupTag(), diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirAnonymousObjectSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirAnonymousObjectSymbol.kt index 9ddfbc4a5d9..9a5e3a8f77f 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirAnonymousObjectSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirAnonymousObjectSymbol.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.CanNotCreateSymbo import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtPsiBasedSymbolPointer import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.Name internal class KtFirAnonymousObjectSymbol( fir: FirAnonymousObject, @@ -34,7 +35,6 @@ internal class KtFirAnonymousObjectSymbol( ) : KtAnonymousObjectSymbol(), KtFirSymbol { private val builder by weakRef(_builder) override val firRef = firRef(fir, resolveState) - override val symbolKind: KtSymbolKind = KtSymbolKind.LOCAL override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } override val annotations: List by cached { firRef.toAnnotationsList() } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirClassOrObjectSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirNamedClassOrObjectSymbol.kt similarity index 87% rename from idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirClassOrObjectSymbol.kt rename to idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirNamedClassOrObjectSymbol.kt index 43e5f1ce2ad..5a2cbd6c96c 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirClassOrObjectSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirNamedClassOrObjectSymbol.kt @@ -15,12 +15,12 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.containsAnnotation import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.getAnnotationClassIds import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.toAnnotationsList -import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.KtFirClassOrObjectInLibrarySymbol +import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers.KtFirClassOrObjectInLibrarySymbolPointer import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassKind -import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassOrObjectSymbol +import org.jetbrains.kotlin.idea.frontend.api.symbols.KtNamedClassOrObjectSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.* import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.CanNotCreateSymbolPointerForLocalLibraryDeclarationException import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtPsiBasedSymbolPointer @@ -28,16 +28,16 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name -internal class KtFirClassOrObjectSymbol( +internal class KtFirNamedClassOrObjectSymbol( fir: FirRegularClass, resolveState: FirModuleResolveState, override val token: ValidityToken, _builder: KtSymbolByFirBuilder -) : KtClassOrObjectSymbol(), KtFirSymbol { +) : KtNamedClassOrObjectSymbol(), KtFirSymbol { private val builder by weakRef(_builder) override val firRef = firRef(fir, resolveState) override val psi: PsiElement? by firRef.withFirAndCache { fir -> fir.findPsi(fir.session) } - override val name: Name get() = firRef.withFir { it.symbol.classId.shortClassName } + override val name: Name get() = firRef.withFir { it.name } override val classIdIfNonLocal: ClassId? get() = firRef.withFir { fir -> fir.symbol.classId.takeUnless { it.isLocal } @@ -58,8 +58,8 @@ internal class KtFirClassOrObjectSymbol( override val isExternal: Boolean get() = firRef.withFir(FirResolvePhase.STATUS) { it.isExternal } - override val companionObject: KtClassOrObjectSymbol? by firRef.withFirAndCache(FirResolvePhase.RAW_FIR) { fir -> - fir.companionObject?.let { builder.buildClassSymbol(it) } + override val companionObject: KtFirNamedClassOrObjectSymbol? by firRef.withFirAndCache { fir -> + fir.companionObject?.let { builder.buildNamedClassOrObjectSymbol(it) } } override val superTypes: List by cached { @@ -92,11 +92,11 @@ internal class KtFirClassOrObjectSymbol( } } - override fun createPointer(): KtSymbolPointer { + override fun createPointer(): KtSymbolPointer { KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it } if (symbolKind == KtSymbolKind.LOCAL) { throw CanNotCreateSymbolPointerForLocalLibraryDeclarationException(classIdIfNonLocal?.asString().orEmpty()) } - return KtFirClassOrObjectInLibrarySymbol(classIdIfNonLocal!!) + return KtFirClassOrObjectInLibrarySymbolPointer(classIdIfNonLocal!!) } } \ No newline at end of file diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSymbolProvider.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSymbolProvider.kt index 6ea38bc1d3a..35211846d52 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSymbolProvider.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSymbolProvider.kt @@ -99,9 +99,15 @@ internal class KtFirSymbolProvider( } override fun getClassOrObjectSymbol(psi: KtClassOrObject): KtClassOrObjectSymbol = withValidityAssertion { - check(psi !is KtObjectDeclaration || psi.parent !is KtObjectLiteralExpression) - psi.withFirDeclarationOfType(resolveState) { - firSymbolBuilder.buildClassSymbol(it) + psi.withFirDeclarationOfType, KtClassOrObjectSymbol>(resolveState) { + firSymbolBuilder.buildClassOrObjectSymbol(it) + } + } + + override fun getNamedClassOrObjectSymbol(psi: KtClassOrObject): KtNamedClassOrObjectSymbol = withValidityAssertion { + require(psi !is KtObjectDeclaration || psi.parent !is KtObjectLiteralExpression) + psi.withFirDeclarationOfType(resolveState) { + firSymbolBuilder.buildNamedClassOrObjectSymbol(it) } } @@ -113,7 +119,7 @@ internal class KtFirSymbolProvider( override fun getClassOrObjectSymbolByClassId(classId: ClassId): KtClassOrObjectSymbol? = withValidityAssertion { val symbol = firSymbolProvider.getClassLikeSymbolByFqName(classId) as? FirRegularClassSymbol ?: return null - firSymbolBuilder.buildClassSymbol(symbol.fir) + firSymbolBuilder.buildNamedClassOrObjectSymbol(symbol.fir) } override fun getTopLevelCallableSymbols(packageFqName: FqName, name: Name): Sequence { diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/pointers/KtFirClassOrObjectInLibrarySymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/pointers/KtFirClassOrObjectInLibrarySymbolPointer.kt similarity index 63% rename from idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/pointers/KtFirClassOrObjectInLibrarySymbol.kt rename to idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/pointers/KtFirClassOrObjectInLibrarySymbolPointer.kt index e76698ee997..af165e501fb 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/pointers/KtFirClassOrObjectInLibrarySymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/pointers/KtFirClassOrObjectInLibrarySymbolPointer.kt @@ -7,16 +7,16 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols.pointers import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession +import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirNamedClassOrObjectSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassOrObjectSymbol +import org.jetbrains.kotlin.idea.frontend.api.symbols.KtNamedClassOrObjectSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.name.ClassId -class KtFirClassOrObjectInLibrarySymbol(private val classId: ClassId) : KtSymbolPointer() { - override fun restoreSymbol(analysisSession: KtAnalysisSession): KtClassOrObjectSymbol? { +class KtFirClassOrObjectInLibrarySymbolPointer(private val classId: ClassId) : KtSymbolPointer() { + override fun restoreSymbol(analysisSession: KtAnalysisSession): KtNamedClassOrObjectSymbol? { require(analysisSession is KtFirAnalysisSession) - val firClass = analysisSession.firSymbolBuilder.buildClassLikeSymbolByClassId( - classId - ) ?: return null - return analysisSession.firSymbolBuilder.buildClassSymbol(firClass) + val firClass = analysisSession.firSymbolBuilder.buildClassLikeSymbolByClassId(classId) ?: return null + return analysisSession.firSymbolBuilder.buildNamedClassOrObjectSymbol(firClass) } } \ No newline at end of file diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirSimpleNameReference.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirSimpleNameReference.kt index 479a71a5696..3617bb7b2b8 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirSimpleNameReference.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirSimpleNameReference.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.idea.references import com.intellij.psi.PsiElement import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession -import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirClassOrObjectSymbol +import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirNamedClassOrObjectSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassKind import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol import org.jetbrains.kotlin.name.FqName @@ -30,7 +30,7 @@ internal class KtFirSimpleNameReference( if (resultsToFix.isEmpty() || !isAnnotationCall) return resultsToFix return resultsToFix.map { targetSymbol -> - if (targetSymbol is KtFirClassOrObjectSymbol && targetSymbol.classKind == KtClassKind.ANNOTATION_CLASS) { + if (targetSymbol is KtFirNamedClassOrObjectSymbol && targetSymbol.classKind == KtClassKind.ANNOTATION_CLASS) { targetSymbol.getMemberScope().getConstructors().firstOrNull() ?: targetSymbol } else targetSymbol } diff --git a/idea/idea-frontend-fir/testData/fileScopeTest/simpleFileScope.kt.result b/idea/idea-frontend-fir/testData/fileScopeTest/simpleFileScope.kt.result index 5b53defec0b..ad35a65f4ce 100644 --- a/idea/idea-frontend-fir/testData/fileScopeTest/simpleFileScope.kt.result +++ b/idea/idea-frontend-fir/testData/fileScopeTest/simpleFileScope.kt.result @@ -57,7 +57,7 @@ CLASSIFIER NAMES: [C, I] CLASSIFIER SYMBOLS: -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [] annotations: [] classIdIfNonLocal: C @@ -76,7 +76,7 @@ KtFirClassOrObjectSymbol: typeParameters: [] visibility: PUBLIC -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [] annotations: [] classIdIfNonLocal: I diff --git a/idea/idea-frontend-fir/testData/memberScopeByFqName/Int.txt b/idea/idea-frontend-fir/testData/memberScopeByFqName/Int.txt index d211fd3220a..9132a7f9f92 100644 --- a/idea/idea-frontend-fir/testData/memberScopeByFqName/Int.txt +++ b/idea/idea-frontend-fir/testData/memberScopeByFqName/Int.txt @@ -1282,7 +1282,7 @@ KtFirFunctionSymbol: valueParameters: [] visibility: PUBLIC -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [] annotations: [] classIdIfNonLocal: kotlin/Int.Companion diff --git a/idea/idea-frontend-fir/testData/memberScopeByFqName/java.lang.String.txt b/idea/idea-frontend-fir/testData/memberScopeByFqName/java.lang.String.txt index 4e2759240ce..fd13996cbba 100644 --- a/idea/idea-frontend-fir/testData/memberScopeByFqName/java.lang.String.txt +++ b/idea/idea-frontend-fir/testData/memberScopeByFqName/java.lang.String.txt @@ -1231,7 +1231,7 @@ KtFirFunctionSymbol: valueParameters: [KtFirFunctionValueParameterSymbol(index)] visibility: PUBLIC -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [] annotations: [] classIdIfNonLocal: java/lang/String.CaseInsensitiveComparator diff --git a/idea/idea-frontend-fir/testData/resoreSymbolFromLibrary/class.txt b/idea/idea-frontend-fir/testData/resoreSymbolFromLibrary/class.txt index cbb5722231c..2ce8ba20e3a 100644 --- a/idea/idea-frontend-fir/testData/resoreSymbolFromLibrary/class.txt +++ b/idea/idea-frontend-fir/testData/resoreSymbolFromLibrary/class.txt @@ -3,7 +3,7 @@ class: kotlin/Lazy // SYMBOLS: -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [] annotations: [] classIdIfNonLocal: kotlin/Lazy diff --git a/idea/idea-frontend-fir/testData/resoreSymbolFromLibrary/classFromJdk.txt b/idea/idea-frontend-fir/testData/resoreSymbolFromLibrary/classFromJdk.txt index a2017a13fb1..37c08aa8c28 100644 --- a/idea/idea-frontend-fir/testData/resoreSymbolFromLibrary/classFromJdk.txt +++ b/idea/idea-frontend-fir/testData/resoreSymbolFromLibrary/classFromJdk.txt @@ -3,7 +3,7 @@ class: java/lang/String // SYMBOLS: -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [] annotations: [] classIdIfNonLocal: java/lang/String diff --git a/idea/idea-frontend-fir/testData/resoreSymbolFromLibrary/nestedClass.txt b/idea/idea-frontend-fir/testData/resoreSymbolFromLibrary/nestedClass.txt index 4549023cd05..7295a95bc27 100644 --- a/idea/idea-frontend-fir/testData/resoreSymbolFromLibrary/nestedClass.txt +++ b/idea/idea-frontend-fir/testData/resoreSymbolFromLibrary/nestedClass.txt @@ -1,7 +1,7 @@ class: kotlin/collections/MutableMap.MutableEntry // SYMBOLS: -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [] annotations: [] classIdIfNonLocal: kotlin/collections/MutableMap.MutableEntry diff --git a/idea/idea-frontend-fir/testData/symbolPointer/class.kt b/idea/idea-frontend-fir/testData/symbolPointer/class.kt index 1c39d2f627b..018baa7dadc 100644 --- a/idea/idea-frontend-fir/testData/symbolPointer/class.kt +++ b/idea/idea-frontend-fir/testData/symbolPointer/class.kt @@ -2,7 +2,7 @@ class A { } // SYMBOLS: -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [] annotations: [] classIdIfNonLocal: A diff --git a/idea/idea-frontend-fir/testData/symbolPointer/classPrimaryConstructor.kt b/idea/idea-frontend-fir/testData/symbolPointer/classPrimaryConstructor.kt index 028bb05d940..46e128b40bb 100644 --- a/idea/idea-frontend-fir/testData/symbolPointer/classPrimaryConstructor.kt +++ b/idea/idea-frontend-fir/testData/symbolPointer/classPrimaryConstructor.kt @@ -15,7 +15,7 @@ KtFirConstructorSymbol: valueParameters: [] visibility: PUBLIC -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [] annotations: [] classIdIfNonLocal: A diff --git a/idea/idea-frontend-fir/testData/symbolPointer/classSecondaryConstructors.kt b/idea/idea-frontend-fir/testData/symbolPointer/classSecondaryConstructors.kt index 70f20220781..5562cb78688 100644 --- a/idea/idea-frontend-fir/testData/symbolPointer/classSecondaryConstructors.kt +++ b/idea/idea-frontend-fir/testData/symbolPointer/classSecondaryConstructors.kt @@ -73,7 +73,7 @@ KtFirConstructorSymbol: valueParameters: Could not render due to java.lang.ClassCastException: org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirFunctionValueParameterSymbol cannot be cast to org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirConstructorValueParameterSymbol visibility: PUBLIC -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [] annotations: [] classIdIfNonLocal: A diff --git a/idea/idea-frontend-fir/testData/symbolPointer/enum.kt b/idea/idea-frontend-fir/testData/symbolPointer/enum.kt index 326e30d45f0..9eae962aeb7 100644 --- a/idea/idea-frontend-fir/testData/symbolPointer/enum.kt +++ b/idea/idea-frontend-fir/testData/symbolPointer/enum.kt @@ -17,7 +17,7 @@ KtFirEnumEntrySymbol: origin: SOURCE symbolKind: MEMBER -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [] annotations: [] classIdIfNonLocal: X diff --git a/idea/idea-frontend-fir/testData/symbolPointer/memberFunctions.kt b/idea/idea-frontend-fir/testData/symbolPointer/memberFunctions.kt index f952812ebb9..51398d940f0 100644 --- a/idea/idea-frontend-fir/testData/symbolPointer/memberFunctions.kt +++ b/idea/idea-frontend-fir/testData/symbolPointer/memberFunctions.kt @@ -46,7 +46,7 @@ KtFirFunctionSymbol: valueParameters: [] visibility: PUBLIC -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [] annotations: [] classIdIfNonLocal: A diff --git a/idea/idea-frontend-fir/testData/symbolPointer/memberProperties.kt b/idea/idea-frontend-fir/testData/symbolPointer/memberProperties.kt index 1978a2180fa..b789e12ba3a 100644 --- a/idea/idea-frontend-fir/testData/symbolPointer/memberProperties.kt +++ b/idea/idea-frontend-fir/testData/symbolPointer/memberProperties.kt @@ -66,7 +66,7 @@ KtFirKotlinPropertySymbol: symbolKind: MEMBER visibility: PUBLIC -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [] annotations: [] classIdIfNonLocal: A diff --git a/idea/idea-frontend-fir/testData/symbolsByFqName/iterator.txt b/idea/idea-frontend-fir/testData/symbolsByFqName/iterator.txt index 95adf6bf81e..4c83052a7fd 100644 --- a/idea/idea-frontend-fir/testData/symbolsByFqName/iterator.txt +++ b/idea/idea-frontend-fir/testData/symbolsByFqName/iterator.txt @@ -1,7 +1,7 @@ class: kotlin/collections/Iterator // SYMBOLS: -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [] annotations: [] classIdIfNonLocal: kotlin/collections/Iterator diff --git a/idea/idea-frontend-fir/testData/symbolsByFqName/listOf.txt b/idea/idea-frontend-fir/testData/symbolsByFqName/listOf.txt index d2a332230bc..f33d43699e4 100644 --- a/idea/idea-frontend-fir/testData/symbolsByFqName/listOf.txt +++ b/idea/idea-frontend-fir/testData/symbolsByFqName/listOf.txt @@ -1,7 +1,7 @@ class: kotlin/io/FileWalkDirection // SYMBOLS: -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [] annotations: [] classIdIfNonLocal: kotlin/io/FileWalkDirection diff --git a/idea/idea-frontend-fir/testData/symbolsByPsi/annotations.kt b/idea/idea-frontend-fir/testData/symbolsByPsi/annotations.kt index 75d2cb5e832..724de3d7ee8 100644 --- a/idea/idea-frontend-fir/testData/symbolsByPsi/annotations.kt +++ b/idea/idea-frontend-fir/testData/symbolsByPsi/annotations.kt @@ -44,7 +44,7 @@ KtFirConstructorSymbol: valueParameters: Could not render due to java.lang.ClassCastException: org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirFunctionValueParameterSymbol cannot be cast to org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirConstructorValueParameterSymbol visibility: PUBLIC -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [] annotations: [] classIdIfNonLocal: Anno @@ -84,7 +84,7 @@ KtFirFunctionSymbol: valueParameters: [] visibility: PUBLIC -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [Anno] annotations: [Anno(param1 = param, param2 = 2)] classIdIfNonLocal: X diff --git a/idea/idea-frontend-fir/testData/symbolsByPsi/anonymousObject.kt b/idea/idea-frontend-fir/testData/symbolsByPsi/anonymousObject.kt index 352cb80b171..98a626faf38 100644 --- a/idea/idea-frontend-fir/testData/symbolsByPsi/anonymousObject.kt +++ b/idea/idea-frontend-fir/testData/symbolsByPsi/anonymousObject.kt @@ -57,6 +57,9 @@ KtFirKotlinPropertySymbol: KtFirAnonymousObjectSymbol: annotationClassIds: [] annotations: [] + classIdIfNonLocal: null + classKind: ANONYMOUS_OBJECT + name: null origin: SOURCE superTypes: [[] java/lang/Runnable] symbolKind: LOCAL @@ -85,7 +88,7 @@ KtFirKotlinPropertySymbol: symbolKind: MEMBER visibility: PUBLIC -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [] annotations: [] classIdIfNonLocal: AnonymousContainer diff --git a/idea/idea-frontend-fir/testData/symbolsByPsi/class.kt b/idea/idea-frontend-fir/testData/symbolsByPsi/class.kt index e0f22d99d75..13a3394fb69 100644 --- a/idea/idea-frontend-fir/testData/symbolsByPsi/class.kt +++ b/idea/idea-frontend-fir/testData/symbolsByPsi/class.kt @@ -3,7 +3,7 @@ class A { // SYMBOLS: /* -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [] annotations: [] classIdIfNonLocal: A diff --git a/idea/idea-frontend-fir/testData/symbolsByPsi/classMembes.kt b/idea/idea-frontend-fir/testData/symbolsByPsi/classMembes.kt index 1a3732d37a0..270ed3a0cb7 100644 --- a/idea/idea-frontend-fir/testData/symbolsByPsi/classMembes.kt +++ b/idea/idea-frontend-fir/testData/symbolsByPsi/classMembes.kt @@ -50,7 +50,7 @@ KtFirFunctionSymbol: valueParameters: [] visibility: PUBLIC -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [] annotations: [] classIdIfNonLocal: A diff --git a/idea/idea-frontend-fir/testData/symbolsByPsi/classWithTypeParams.kt b/idea/idea-frontend-fir/testData/symbolsByPsi/classWithTypeParams.kt index e9c47437e19..f6ab674e702 100644 --- a/idea/idea-frontend-fir/testData/symbolsByPsi/classWithTypeParams.kt +++ b/idea/idea-frontend-fir/testData/symbolsByPsi/classWithTypeParams.kt @@ -17,7 +17,7 @@ KtFirTypeParameterSymbol: upperBounds: [kotlin/Any?] variance: INVARIANT -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [] annotations: [] classIdIfNonLocal: A diff --git a/idea/idea-frontend-fir/testData/symbolsByPsi/localDeclarations.kt b/idea/idea-frontend-fir/testData/symbolsByPsi/localDeclarations.kt index 4021982a9e3..b766e41011c 100644 --- a/idea/idea-frontend-fir/testData/symbolsByPsi/localDeclarations.kt +++ b/idea/idea-frontend-fir/testData/symbolsByPsi/localDeclarations.kt @@ -35,7 +35,7 @@ KtFirFunctionSymbol: valueParameters: [] visibility: LOCAL -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [] annotations: [] classIdIfNonLocal: null diff --git a/idea/idea-frontend-fir/testData/symbolsByPsi/typeAnnotations.kt b/idea/idea-frontend-fir/testData/symbolsByPsi/typeAnnotations.kt index e5b12a2e826..be2a76d8f2c 100644 --- a/idea/idea-frontend-fir/testData/symbolsByPsi/typeAnnotations.kt +++ b/idea/idea-frontend-fir/testData/symbolsByPsi/typeAnnotations.kt @@ -17,7 +17,7 @@ class X : @Anno1 I { // SYMBOLS: /* -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [kotlin/annotation/Target] annotations: [kotlin/annotation/Target(allowedTargets = KtUnsupportedConstantValue)] classIdIfNonLocal: Anno1 @@ -36,7 +36,7 @@ KtFirClassOrObjectSymbol: typeParameters: [] visibility: PUBLIC -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [kotlin/annotation/Target] annotations: [kotlin/annotation/Target(allowedTargets = KtUnsupportedConstantValue)] classIdIfNonLocal: Anno2 @@ -55,7 +55,7 @@ KtFirClassOrObjectSymbol: typeParameters: [] visibility: PUBLIC -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [kotlin/annotation/Target] annotations: [kotlin/annotation/Target(allowedTargets = KtUnsupportedConstantValue)] classIdIfNonLocal: Anno3 @@ -74,7 +74,7 @@ KtFirClassOrObjectSymbol: typeParameters: [] visibility: PUBLIC -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [kotlin/annotation/Target] annotations: [kotlin/annotation/Target(allowedTargets = KtUnsupportedConstantValue)] classIdIfNonLocal: Anno4 @@ -93,7 +93,7 @@ KtFirClassOrObjectSymbol: typeParameters: [] visibility: PUBLIC -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [] annotations: [] classIdIfNonLocal: I @@ -167,7 +167,7 @@ KtFirKotlinPropertySymbol: symbolKind: MEMBER visibility: PUBLIC -KtFirClassOrObjectSymbol: +KtFirNamedClassOrObjectSymbol: annotationClassIds: [] annotations: [] classIdIfNonLocal: X