diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/scopes/KtScope.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/scopes/KtScope.kt index 7bcbe52688a..adab0e086b3 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/scopes/KtScope.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/scopes/KtScope.kt @@ -14,24 +14,24 @@ import org.jetbrains.kotlin.name.Name interface KtScope : ValidityTokenOwner { // TODO check that names are accessible // maybe return some kind of lazy set - fun getAllNames(): Set = withValidityAssertion { getCallableNames() + getClassLikeSymbolNames() } + fun getAllNames(): Set = withValidityAssertion { getCallableNames() + getClassifierNames() } fun getCallableNames(): Set - fun getClassLikeSymbolNames(): Set + fun getClassifierNames(): Set fun getAllSymbols(): Sequence = withValidityAssertion { sequence { yieldAll(getCallableSymbols()) - yieldAll(getClassClassLikeSymbols()) + yieldAll(getClassifierSymbols()) } } fun getCallableSymbols(): Sequence - fun getClassClassLikeSymbols(): Sequence + fun getClassifierSymbols(): Sequence fun containsName(name: Name): Boolean = withValidityAssertion { - name in getCallableNames() || name in getClassLikeSymbolNames() + name in getCallableNames() || name in getClassifierNames() } } 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 c72517fd8f2..4ee0f723d84 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,8 +9,13 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.* import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.name.ClassId +sealed class KtClassifierSymbol : KtSymbol, KtNamedSymbol -sealed class KtClassLikeSymbol : KtSymbol, KtNamedSymbol, KtSymbolWithKind { +abstract class KtTypeParameterSymbol : KtClassifierSymbol(), KtNamedSymbol { + abstract override fun createPointer(): KtSymbolPointer +} + +sealed class KtClassLikeSymbol : KtClassifierSymbol(), KtNamedSymbol, KtSymbolWithKind { abstract val classIdIfNonLocal: ClassId? abstract override fun createPointer(): KtSymbolPointer @@ -34,4 +39,4 @@ abstract class KtClassOrObjectSymbol : KtClassLikeSymbol(), enum class KtClassKind { CLASS, ENUM_CLASS, ENUM_ENTRY, ANNOTATION_CLASS, OBJECT, COMPANION_OBJECT, INTERFACE -} \ No newline at end of file +} diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtTypeParameterSymbol.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtTypeParameterSymbol.kt deleted file mode 100644 index 68360d68917..00000000000 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/symbols/KtTypeParameterSymbol.kt +++ /dev/null @@ -1,15 +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.KtNamedSymbol -import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer - -abstract class KtTypeParameterSymbol : KtSymbol, KtNamedSymbol { - abstract override fun createPointer(): KtSymbolPointer -} - - 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 6f97fe876b4..5e46e9fa0b0 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 @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.fir.resolve.firSymbolProvider import org.jetbrains.kotlin.fir.resolve.getSymbolByLookupTag import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag +import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl @@ -108,6 +109,13 @@ internal class KtSymbolByFirBuilder private constructor( TODO(fir::class.toString()) } + fun buildClassifierSymbol(firSymbol: FirClassifierSymbol<*>): KtClassifierSymbol = when (val fir = firSymbol.fir) { + is FirClassLikeDeclaration -> buildClassLikeSymbol(fir) + is FirTypeParameter -> buildTypeParameterSymbol(fir) + else -> + TODO(fir::class.toString()) + } + fun buildClassSymbol(fir: FirRegularClass) = symbolsCache.cache(fir) { KtFirClassOrObjectSymbol(fir, resolveState, token, this) } // TODO it can be a constructor parameter, which may be split into parameter & property diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirCompositeScope.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirCompositeScope.kt index 13c63c5c714..d0d9dd59de3 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirCompositeScope.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirCompositeScope.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.idea.frontend.api.scopes.KtCompositeScope import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScope import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol +import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassifierSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion import org.jetbrains.kotlin.name.Name @@ -34,9 +35,9 @@ class KtFirCompositeScope( } } - override fun getClassLikeSymbolNames(): Set = withValidityAssertion { + override fun getClassifierNames(): Set = withValidityAssertion { buildSet { - subScopes.flatMapTo(this) { it.getClassLikeSymbolNames() } + subScopes.flatMapTo(this) { it.getClassifierNames() } } } @@ -52,9 +53,9 @@ class KtFirCompositeScope( } } - override fun getClassClassLikeSymbols(): Sequence = withValidityAssertion { + override fun getClassifierSymbols(): Sequence = withValidityAssertion { sequence { - subScopes.forEach { yieldAll(it.getClassClassLikeSymbols()) } + subScopes.forEach { yieldAll(it.getClassifierSymbols()) } } } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirDelegatingScope.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirDelegatingScope.kt index b0e0b56c66a..4bdd5f3bf45 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirDelegatingScope.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirDelegatingScope.kt @@ -5,15 +5,10 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.scopes -import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration -import org.jetbrains.kotlin.fir.declarations.FirDeclaration -import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin -import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction +import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.scopes.FirContainingNamesAwareScope import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.processClassifiersByName -import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol -import org.jetbrains.kotlin.fir.symbols.PossiblyFirFakeOverrideSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.idea.frontend.api.ValidityToken import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder @@ -21,6 +16,7 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScope import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol +import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassifierSymbol import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion import org.jetbrains.kotlin.name.Name @@ -32,7 +28,7 @@ internal abstract class KtFirDelegatingScope( abstract val firScope: S private val allNamesCached by cached { - getCallableNames() + getClassLikeSymbolNames() + getCallableNames() + getClassifierNames() } override fun getAllNames(): Set = allNamesCached @@ -41,7 +37,7 @@ internal abstract class KtFirDelegatingScope( firScope.getCallableNames() } - override fun getClassLikeSymbolNames(): Set = withValidityAssertion { + override fun getClassifierNames(): Set = withValidityAssertion { firScope.getClassifierNames() } @@ -49,8 +45,8 @@ internal abstract class KtFirDelegatingScope( firScope.getCallableSymbols(getCallableNames(), builder) } - override fun getClassClassLikeSymbols(): Sequence = withValidityAssertion { - firScope.getClassLikeSymbols(getClassLikeSymbolNames(), builder) + override fun getClassifierSymbols(): Sequence = withValidityAssertion { + firScope.getClassifierSymbols(getClassifierNames(), builder) } override fun containsName(name: Name): Boolean = withValidityAssertion { @@ -80,14 +76,13 @@ internal fun FirScope.getCallableSymbols(callableNames: Collection, builde } } -internal fun FirScope.getClassLikeSymbols(classLikeNames: Collection, builder: KtSymbolByFirBuilder) = sequence { - classLikeNames.forEach { name -> - val classLikeSymbols = mutableListOf() - processClassifiersByName(name) { firSymbol -> - (firSymbol.fir as? FirClassLikeDeclaration<*>)?.let { - classLikeSymbols.add(builder.buildClassLikeSymbol(it)) +internal fun FirScope.getClassifierSymbols(classLikeNames: Collection, builder: KtSymbolByFirBuilder): Sequence = + sequence { + classLikeNames.forEach { name -> + val classifierSymbols = mutableListOf() + processClassifiersByName(name) { firSymbol -> + classifierSymbols.add(builder.buildClassifierSymbol(firSymbol)) } + yieldAll(classifierSymbols) } - yieldAll(classLikeSymbols) - } -} \ No newline at end of file + } \ No newline at end of file diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirNonStarImportingScope.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirNonStarImportingScope.kt index 2829b0a2771..02edb7ef307 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirNonStarImportingScope.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirNonStarImportingScope.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.idea.frontend.api.scopes.KtNonStarImportingScope import org.jetbrains.kotlin.idea.frontend.api.scopes.NonStarImport import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol +import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassifierSymbol import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion import org.jetbrains.kotlin.name.Name @@ -46,8 +47,8 @@ internal class KtFirNonStarImportingScope( firScope.getCallableSymbols(getCallableNames(), builder) } - override fun getClassClassLikeSymbols(): Sequence = withValidityAssertion { - firScope.getClassLikeSymbols(getClassLikeSymbolNames(), builder) + override fun getClassifierSymbols(): Sequence = withValidityAssertion { + firScope.getClassifierSymbols(getClassifierNames(), builder) } @@ -55,7 +56,7 @@ internal class KtFirNonStarImportingScope( imports.mapNotNullTo(hashSetOf()) { it.callableName } } - override fun getClassLikeSymbolNames(): Set = withValidityAssertion { + override fun getClassifierNames(): Set = withValidityAssertion { imports.mapNotNullTo((hashSetOf())) { it.relativeClassName?.shortName() } } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirPackageScope.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirPackageScope.kt index 0000cae9293..96404648346 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirPackageScope.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirPackageScope.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef import org.jetbrains.kotlin.idea.frontend.api.scopes.KtPackageScope import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol +import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassifierSymbol import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelClassByPackageIndex import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelFunctionByPackageIndex @@ -39,7 +40,7 @@ internal class KtFirPackageScope( } } - override fun getClassLikeSymbolNames(): Set = withValidityAssertion { + override fun getClassifierNames(): Set = withValidityAssertion { KotlinTopLevelClassByPackageIndex.getInstance()[fqName.asString(), project, firScope.session.searchScope] .mapNotNullTo(hashSetOf()) { it.nameAsName } } @@ -48,7 +49,7 @@ internal class KtFirPackageScope( firScope.getCallableSymbols(getCallableNames(), builder) } - override fun getClassClassLikeSymbols(): Sequence = withValidityAssertion { - firScope.getClassLikeSymbols(getClassLikeSymbolNames(), builder) + override fun getClassifierSymbols(): Sequence = withValidityAssertion { + firScope.getClassifierSymbols(getClassifierNames(), builder) } } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirStarImportingScope.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirStarImportingScope.kt index 111bc1a6a7f..9274e68cbac 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirStarImportingScope.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/scopes/KtFirStarImportingScope.kt @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.idea.frontend.api.scopes.KtStarImportingScope import org.jetbrains.kotlin.idea.frontend.api.scopes.StarImport import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol -import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol +import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassifierSymbol import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelClassByPackageIndex import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelFunctionByPackageIndex @@ -55,8 +55,8 @@ internal class KtFirStarImportingScope( firScope.getCallableSymbols(getCallableNames(), builder) } - override fun getClassClassLikeSymbols(): Sequence = withValidityAssertion { - firScope.getClassLikeSymbols(getClassLikeSymbolNames(), builder) + override fun getClassifierSymbols(): Sequence = withValidityAssertion { + firScope.getClassifierSymbols(getClassifierNames(), builder) } // todo cache? @@ -72,7 +72,7 @@ internal class KtFirStarImportingScope( } } - override fun getClassLikeSymbolNames(): Set = withValidityAssertion { + override fun getClassifierNames(): Set = withValidityAssertion { imports.flatMapTo(hashSetOf()) { import -> if (import.relativeClassName == null) { packageHelper.getPackageTopLevelClassifiers(import.packageFqName)