diff --git a/idea/idea-fir-fe10-binding/build.gradle.kts b/idea/idea-fir-fe10-binding/build.gradle.kts
index 1122e5b0b11..f4ae0846fcd 100644
--- a/idea/idea-fir-fe10-binding/build.gradle.kts
+++ b/idea/idea-fir-fe10-binding/build.gradle.kts
@@ -5,6 +5,7 @@ plugins {
dependencies {
implementation(project(":idea:idea-frontend-fir"))
+ implementation(project(":idea"))
testImplementation(projectTests(":idea:idea-fir"))
testImplementation(projectTests(":idea:idea-frontend-independent"))
diff --git a/idea/idea-frontend-fir/build.gradle.kts b/idea/idea-frontend-fir/build.gradle.kts
index a4872913053..1d0a8cdbf58 100644
--- a/idea/idea-frontend-fir/build.gradle.kts
+++ b/idea/idea-frontend-fir/build.gradle.kts
@@ -14,14 +14,10 @@ dependencies {
compile(project(":compiler:fir:java"))
compile(project(":compiler:fir:jvm"))
compile(project(":idea:idea-frontend-fir:idea-fir-low-level-api"))
- compile(project(":idea:idea-frontend-fir:fir-low-level-api-ide-impl"))
- compile(intellijDep())
+ compile(project(":idea:idea-frontend-api"))
+ compile(project(":compiler:light-classes"))
compile(intellijCoreDep())
-//
- compile(project(":idea:idea-core"))
-//
-
testCompile(project(":idea:idea-fir"))
testCompile(intellijDep())
testCompile(intellijCoreDep())
@@ -34,7 +30,7 @@ dependencies {
testCompile(commonDep("junit:junit"))
testCompile(projectTests(":idea:idea-frontend-independent"))
- compile(intellijPluginDep("java"))
+// compile(intellijPluginDep("java"))
}
sourceSets {
diff --git a/idea/idea-frontend-fir/fir-low-level-api-ide-impl/src/org/jetbrains/kotlin/idea/fir/low/level/api/ide/DeclarationProvider.kt b/idea/idea-frontend-fir/fir-low-level-api-ide-impl/src/org/jetbrains/kotlin/idea/fir/low/level/api/ide/DeclarationProvider.kt
index fb3be6cf793..ad53ed176bc 100644
--- a/idea/idea-frontend-fir/fir-low-level-api-ide-impl/src/org/jetbrains/kotlin/idea/fir/low/level/api/ide/DeclarationProvider.kt
+++ b/idea/idea-frontend-fir/fir-low-level-api-ide-impl/src/org/jetbrains/kotlin/idea/fir/low/level/api/ide/DeclarationProvider.kt
@@ -11,6 +11,7 @@ import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.stubs.StubIndex
import com.intellij.psi.stubs.StubIndexKey
import org.jetbrains.kotlin.idea.fir.low.level.api.DeclarationProvider
+import org.jetbrains.kotlin.idea.fir.low.level.api.KtDeclarationProviderFactory
import org.jetbrains.kotlin.idea.stubindex.*
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.ClassId
@@ -19,7 +20,11 @@ import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.*
-internal class DeclarationProviderByIndexesImpl(val project: Project, private val scope: GlobalSearchScope) : DeclarationProvider() {
+internal class DeclarationProviderByIndexesImpl(
+ val project: Project,
+ override val searchScope: GlobalSearchScope
+) : DeclarationProvider() {
+
private val stubIndex: StubIndex = StubIndex.getInstance()
private inline fun firstMatchingOrNull(
@@ -29,7 +34,7 @@ internal class DeclarationProviderByIndexesImpl(val project: Project, private va
): PSI? {
var result: PSI? = null
stubIndex.processElements(
- stubKey, key, project, scope, PSI::class.java,
+ stubKey, key, project, searchScope, PSI::class.java,
) { candidate ->
if (filter(candidate)) {
result = candidate
@@ -40,12 +45,39 @@ internal class DeclarationProviderByIndexesImpl(val project: Project, private va
return result
}
- override fun getClassByClassId(classId: ClassId) = firstMatchingOrNull(
+
+ override fun getClassesByClassId(classId: ClassId): Collection {
+ return listOfNotNull(getClassByClassId(classId))//todo
+ }
+
+ override fun getTypeAliasesByClassId(classId: ClassId): Collection {
+ return listOfNotNull(getTypeAliasByClassId(classId))//todo
+ }
+
+ override fun getTypeAliasNamesInPackage(packageFqName: FqName): Set {
+ return KotlinTopLevelTypeAliasByPackageIndex
+ .getInstance()[packageFqName.asStringForIndexes(), project, searchScope]
+ .mapNotNullTo(mutableSetOf()) { it.nameAsName }
+ }
+
+ override fun getPropertyNamesInPackage(packageFqName: FqName): Set {
+ return KotlinTopLevelPropertyByPackageIndex
+ .getInstance()[packageFqName.asStringForIndexes(), project, searchScope]
+ .mapNotNullTo(mutableSetOf()) { it.nameAsName }
+ }
+
+ override fun getFunctionsNamesInPackage(packageFqName: FqName): Set {
+ return KotlinTopLevelFunctionByPackageIndex
+ .getInstance()[packageFqName.asStringForIndexes(), project, searchScope]
+ .mapNotNullTo(mutableSetOf()) { it.nameAsName }
+ }
+
+ private fun getClassByClassId(classId: ClassId) = firstMatchingOrNull(
KotlinFullClassNameIndex.KEY,
classId.asStringForIndexes(),
) { candidate -> candidate.containingKtFile.packageFqName == classId.packageFqName }
- override fun getTypeAliasByClassId(classId: ClassId): KtTypeAlias? = firstMatchingOrNull(
+ private fun getTypeAliasByClassId(classId: ClassId): KtTypeAlias? = firstMatchingOrNull(
KotlinTopLevelTypeAliasFqNameIndex.KEY,
key = classId.asStringForIndexes(),
) { candidate -> candidate.containingKtFile.packageFqName == classId.packageFqName }
@@ -55,15 +87,15 @@ internal class DeclarationProviderByIndexesImpl(val project: Project, private va
)
override fun getTopLevelProperties(callableId: CallableId): Collection =
- KotlinTopLevelPropertyFqnNameIndex.getInstance()[callableId.asStringForIndexes(), project, scope]
+ KotlinTopLevelPropertyFqnNameIndex.getInstance()[callableId.asStringForIndexes(), project, searchScope]
override fun getTopLevelFunctions(callableId: CallableId): Collection =
- KotlinTopLevelFunctionFqnNameIndex.getInstance()[callableId.asStringForIndexes(), project, scope]
+ KotlinTopLevelFunctionFqnNameIndex.getInstance()[callableId.asStringForIndexes(), project, searchScope]
override fun getClassNamesInPackage(packageFqName: FqName): Set =
KotlinTopLevelClassByPackageIndex.getInstance()
- .get(packageFqName.asStringForIndexes(), project, scope)
+ .get(packageFqName.asStringForIndexes(), project, searchScope)
.mapNotNullTo(hashSetOf()) { it.nameAsName }
@@ -78,3 +110,9 @@ internal class DeclarationProviderByIndexesImpl(val project: Project, private va
asSingleFqName().asStringForIndexes()
}
}
+
+class KtDeclarationProviderFactoryIdeImpl(private val project: Project) : KtDeclarationProviderFactory() {
+ override fun createDeclarationProvider(searchScope: GlobalSearchScope): DeclarationProvider {
+ return DeclarationProviderByIndexesImpl(project, searchScope)
+ }
+}
\ No newline at end of file
diff --git a/idea/idea-frontend-fir/fir-low-level-api-ide-impl/src/org/jetbrains/kotlin/idea/fir/low/level/api/ide/FirModuleResolveStateConfiguratorIdeImpl.kt b/idea/idea-frontend-fir/fir-low-level-api-ide-impl/src/org/jetbrains/kotlin/idea/fir/low/level/api/ide/FirModuleResolveStateConfiguratorIdeImpl.kt
index a8aa979e635..2d7df0fc10d 100644
--- a/idea/idea-frontend-fir/fir-low-level-api-ide-impl/src/org/jetbrains/kotlin/idea/fir/low/level/api/ide/FirModuleResolveStateConfiguratorIdeImpl.kt
+++ b/idea/idea-frontend-fir/fir-low-level-api-ide-impl/src/org/jetbrains/kotlin/idea/fir/low/level/api/ide/FirModuleResolveStateConfiguratorIdeImpl.kt
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.idea.caches.project.SdkInfo
import org.jetbrains.kotlin.idea.caches.project.getModuleInfo
import org.jetbrains.kotlin.idea.caches.resolve.IDEPackagePartProvider
import org.jetbrains.kotlin.idea.fir.low.level.api.DeclarationProvider
-import org.jetbrains.kotlin.idea.fir.low.level.api.PackageExistenceChecker
+import org.jetbrains.kotlin.idea.fir.low.level.api.KtPackageProvider
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveStateConfigurator
import org.jetbrains.kotlin.idea.project.languageVersionSettings
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
@@ -32,12 +32,6 @@ import java.nio.file.Path
import java.nio.file.Paths
class FirModuleResolveStateConfiguratorIdeImpl(private val project: Project) : FirModuleResolveStateConfigurator() {
- override fun createDeclarationProvider(scope: GlobalSearchScope): DeclarationProvider =
- DeclarationProviderByIndexesImpl(project, scope)
-
- override fun createPackageExistingCheckerForModule(moduleInfo: ModuleInfo): PackageExistenceChecker =
- PackageExistenceCheckerIdeImpl(project, moduleInfo)
-
override fun createPackagePartsProvider(scope: GlobalSearchScope): PackagePartProvider =
IDEPackagePartProvider(scope)
diff --git a/idea/idea-frontend-fir/fir-low-level-api-ide-impl/src/org/jetbrains/kotlin/idea/fir/low/level/api/ide/KtPackageProviderIdeImpl.kt b/idea/idea-frontend-fir/fir-low-level-api-ide-impl/src/org/jetbrains/kotlin/idea/fir/low/level/api/ide/KtPackageProviderIdeImpl.kt
new file mode 100644
index 00000000000..ede090b8889
--- /dev/null
+++ b/idea/idea-frontend-fir/fir-low-level-api-ide-impl/src/org/jetbrains/kotlin/idea/fir/low/level/api/ide/KtPackageProviderIdeImpl.kt
@@ -0,0 +1,32 @@
+package org.jetbrains.kotlin.idea.fir.low.level.api.ide
+
+import com.intellij.openapi.project.Project
+import com.intellij.psi.search.GlobalSearchScope
+import org.jetbrains.kotlin.idea.fir.low.level.api.KtPackageProvider
+import org.jetbrains.kotlin.idea.fir.low.level.api.KtPackageProviderFactory
+import org.jetbrains.kotlin.idea.stubindex.PackageIndexUtil
+import org.jetbrains.kotlin.name.FqName
+import org.jetbrains.kotlin.name.Name
+import org.jetbrains.kotlin.platform.TargetPlatform
+import org.jetbrains.kotlin.idea.util.module
+
+internal class KtPackageProviderIdeImpl(
+ private val project: Project,
+ private val searchScope: GlobalSearchScope,
+) : KtPackageProvider() {
+
+ override fun isPackageExists(packageFqName: FqName): Boolean =
+ PackageIndexUtil.packageExists(packageFqName, searchScope, project)
+
+ override fun getJavaAndKotlinSubPackageFqNames(packageFqName: FqName, targetPlatform: TargetPlatform): Set {
+ return PackageIndexUtil
+ .getJavaAndKotlinSubPackageFqNames(packageFqName, searchScope, project, targetPlatform) { true }
+ .mapTo(mutableSetOf()) { it.shortName() }
+ }
+}
+
+class KtPackageProviderFactoryIdeImpl(private val project: Project) : KtPackageProviderFactory() {
+ override fun createPackageProvider(searchScope: GlobalSearchScope): KtPackageProvider {
+ return KtPackageProviderIdeImpl(project, searchScope)
+ }
+}
\ No newline at end of file
diff --git a/idea/idea-frontend-fir/fir-low-level-api-ide-impl/src/org/jetbrains/kotlin/idea/fir/low/level/api/ide/PackageExistenceCheckerIdeImpl.kt b/idea/idea-frontend-fir/fir-low-level-api-ide-impl/src/org/jetbrains/kotlin/idea/fir/low/level/api/ide/PackageExistenceCheckerIdeImpl.kt
deleted file mode 100644
index 1d3b30f801a..00000000000
--- a/idea/idea-frontend-fir/fir-low-level-api-ide-impl/src/org/jetbrains/kotlin/idea/fir/low/level/api/ide/PackageExistenceCheckerIdeImpl.kt
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.jetbrains.kotlin.idea.fir.low.level.api.ide
-
-import com.intellij.openapi.components.service
-import com.intellij.openapi.project.Project
-import org.jetbrains.kotlin.analyzer.ModuleInfo
-import org.jetbrains.kotlin.idea.caches.resolve.IdePackageOracleFactory
-import org.jetbrains.kotlin.idea.fir.low.level.api.PackageExistenceChecker
-import org.jetbrains.kotlin.name.FqName
-
-internal class PackageExistenceCheckerIdeImpl(
- project: Project,
- module: ModuleInfo
-) : PackageExistenceChecker() {
- private val oracle = project.service().createOracle(module)
-
- override fun isPackageExists(packageFqName: FqName): Boolean = oracle.packageExists(packageFqName)
-}
\ No newline at end of file
diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/DeclarationProviderBase.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/DeclarationProviderBase.kt
index 510ad6cad61..ad04d23b7e0 100644
--- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/DeclarationProviderBase.kt
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/DeclarationProviderBase.kt
@@ -5,6 +5,9 @@
package org.jetbrains.kotlin.idea.fir.low.level.api
+import com.intellij.openapi.components.ServiceManager
+import com.intellij.openapi.project.Project
+import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
@@ -15,13 +18,25 @@ import org.jetbrains.kotlin.psi.KtProperty
import org.jetbrains.kotlin.psi.KtTypeAlias
abstract class DeclarationProvider {
- abstract fun getClassByClassId(classId: ClassId): KtClassOrObject?
+ abstract val searchScope: GlobalSearchScope
- abstract fun getTypeAliasByClassId(classId: ClassId): KtTypeAlias?
-
- abstract fun getTopLevelProperties(callableId: CallableId): Collection
-
- abstract fun getTopLevelFunctions(callableId: CallableId): Collection
+ abstract fun getClassesByClassId(classId: ClassId): Collection
+ abstract fun getTypeAliasesByClassId(classId: ClassId): Collection
abstract fun getClassNamesInPackage(packageFqName: FqName): Set
-}
\ No newline at end of file
+ abstract fun getTypeAliasNamesInPackage(packageFqName: FqName): Set
+
+ abstract fun getTopLevelProperties(callableId: CallableId): Collection
+ abstract fun getTopLevelFunctions(callableId: CallableId): Collection
+
+ abstract fun getPropertyNamesInPackage(packageFqName: FqName): Set
+ abstract fun getFunctionsNamesInPackage(packageFqName: FqName): Set
+}
+
+abstract class KtDeclarationProviderFactory {
+ abstract fun createDeclarationProvider(searchScope: GlobalSearchScope): DeclarationProvider
+}
+
+fun Project.createDeclarationProvider(searchScope: GlobalSearchScope): DeclarationProvider =
+ ServiceManager.getService(this, KtDeclarationProviderFactory::class.java)
+ .createDeclarationProvider(searchScope)
\ No newline at end of file
diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/KtPackageProvider.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/KtPackageProvider.kt
new file mode 100644
index 00000000000..a845dc274f1
--- /dev/null
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/KtPackageProvider.kt
@@ -0,0 +1,26 @@
+/*
+ * 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.fir.low.level.api
+
+import com.intellij.openapi.components.ServiceManager
+import com.intellij.openapi.project.Project
+import com.intellij.psi.search.GlobalSearchScope
+import org.jetbrains.kotlin.name.FqName
+import org.jetbrains.kotlin.name.Name
+import org.jetbrains.kotlin.platform.TargetPlatform
+
+abstract class KtPackageProvider {
+ abstract fun isPackageExists(packageFqName: FqName): Boolean
+ abstract fun getJavaAndKotlinSubPackageFqNames(packageFqName: FqName, targetPlatform: TargetPlatform): Set
+}
+
+abstract class KtPackageProviderFactory {
+ abstract fun createPackageProvider(searchScope: GlobalSearchScope): KtPackageProvider
+}
+
+fun Project.createPackageProvider(searchScope: GlobalSearchScope): KtPackageProvider =
+ ServiceManager.getService(this, KtPackageProviderFactory::class.java)
+ .createPackageProvider(searchScope)
\ No newline at end of file
diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/PackageExistenceChecker.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/PackageExistenceChecker.kt
deleted file mode 100644
index 6697d8b51ed..00000000000
--- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/PackageExistenceChecker.kt
+++ /dev/null
@@ -1,12 +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.fir.low.level.api
-
-import org.jetbrains.kotlin.name.FqName
-
-abstract class PackageExistenceChecker {
- abstract fun isPackageExists(packageFqName: FqName): Boolean
-}
diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/FirModuleResolveStateConfigurator.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/FirModuleResolveStateConfigurator.kt
index 2c547c61f5d..5bbd1fa9861 100644
--- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/FirModuleResolveStateConfigurator.kt
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/FirModuleResolveStateConfigurator.kt
@@ -6,29 +6,23 @@
package org.jetbrains.kotlin.idea.fir.low.level.api.api
import com.intellij.openapi.components.ServiceManager
-import com.intellij.openapi.module.Module
import com.intellij.openapi.project.Project
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.analyzer.ModuleSourceInfoBase
-import org.jetbrains.kotlin.analyzer.SdkInfoBase
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProvider
import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider
import org.jetbrains.kotlin.idea.fir.low.level.api.DeclarationProvider
-import org.jetbrains.kotlin.idea.fir.low.level.api.PackageExistenceChecker
+import org.jetbrains.kotlin.idea.fir.low.level.api.KtPackageProvider
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
import org.jetbrains.kotlin.psi.KtElement
-import java.nio.file.Path
abstract class FirModuleResolveStateConfigurator {
- abstract fun createDeclarationProvider(scope: GlobalSearchScope): DeclarationProvider
- abstract fun createPackageExistingCheckerForModule(moduleInfo: ModuleInfo): PackageExistenceChecker
abstract fun createPackagePartsProvider(scope: GlobalSearchScope): PackagePartProvider
abstract fun createModuleDataProvider(moduleInfo: ModuleSourceInfoBase): ModuleDataProvider
-
abstract fun getLanguageVersionSettings(moduleInfo: ModuleSourceInfoBase): LanguageVersionSettings
abstract fun getModuleSourceScope(moduleInfo: ModuleSourceInfoBase): GlobalSearchScope
abstract fun createScopeForModuleLibraries(moduleInfo: ModuleSourceInfoBase): GlobalSearchScope
diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeProvider.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeProvider.kt
index 4a48ed13c77..19742dc492b 100644
--- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeProvider.kt
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeProvider.kt
@@ -21,7 +21,10 @@ import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProviderInternals
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.idea.fir.low.level.api.DeclarationProvider
+import org.jetbrains.kotlin.idea.fir.low.level.api.KtPackageProvider
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveStateConfigurator
+import org.jetbrains.kotlin.idea.fir.low.level.api.api.stateConfigurator
+import org.jetbrains.kotlin.idea.fir.low.level.api.createPackageProvider
import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.FirFileBuilder
import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.ModuleFileCache
import org.jetbrains.kotlin.name.ClassId
@@ -37,12 +40,10 @@ internal class FirIdeProvider(
firFileBuilder: FirFileBuilder,
val cache: ModuleFileCache,
private val declarationProvider: DeclarationProvider,
+ private val packageExistenceChecker: KtPackageProvider,
) : FirProvider() {
override val symbolProvider: FirSymbolProvider = SymbolProvider()
- private val packageExistenceChecker = ServiceManager.getService(project, FirModuleResolveStateConfigurator::class.java)
- .createPackageExistingCheckerForModule(moduleInfo)
-
private val providerHelper = FirProviderHelper(
cache,
firFileBuilder,
diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirProviderHelper.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirProviderHelper.kt
index 8acbdbcd386..38107ab57de 100644
--- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirProviderHelper.kt
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirProviderHelper.kt
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.idea.fir.low.level.api.DeclarationProvider
-import org.jetbrains.kotlin.idea.fir.low.level.api.PackageExistenceChecker
+import org.jetbrains.kotlin.idea.fir.low.level.api.KtPackageProvider
import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.FirFileBuilder
import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.ModuleFileCache
import org.jetbrains.kotlin.idea.fir.low.level.api.util.FirElementFinder
@@ -29,14 +29,14 @@ internal class FirProviderHelper(
private val cache: ModuleFileCache,
private val firFileBuilder: FirFileBuilder,
private val declarationProvider: DeclarationProvider,
- private val packageExistenceChecker: PackageExistenceChecker,
+ private val packageProvider: KtPackageProvider,
) {
fun getFirClassifierByFqName(classId: ClassId): FirClassLikeDeclaration<*>? {
if (classId.isLocal) return null
return executeOrReturnDefaultValueOnPCE(null) {
cache.classifierByClassId.computeIfAbsent(classId) {
- val ktClass = when (val klass = declarationProvider.getClassByClassId(classId)) {
- null -> declarationProvider.getTypeAliasByClassId(classId)
+ val ktClass = when (val klass = declarationProvider.getClassesByClassId(classId).firstOrNull()) {
+ null -> declarationProvider.getTypeAliasesByClassId(classId).firstOrNull()
else -> if (klass.getClassId() == null) null else klass
} ?: return@computeIfAbsent Optional.empty()
val firFile = firFileBuilder.buildRawFirFileWithCaching(ktClass.containingKtFile, cache, preferLazyBodies = true)
@@ -86,5 +86,5 @@ internal class FirProviderHelper(
}
fun getPackage(fqName: FqName): FqName? =
- fqName.takeIf(packageExistenceChecker::isPackageExists)
+ fqName.takeIf(packageProvider::isPackageExists)
}
diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/sessions/FirIdeSessionFactory.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/sessions/FirIdeSessionFactory.kt
index 4a34424022b..5eb16923d51 100644
--- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/sessions/FirIdeSessionFactory.kt
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/sessions/FirIdeSessionFactory.kt
@@ -97,7 +97,8 @@ internal object FirIdeSessionFactory {
scopeProvider,
firFileBuilder,
cache,
- configurator.createDeclarationProvider(searchScope),
+ project.createDeclarationProvider(searchScope),
+ project.createPackageProvider(searchScope),
)
register(FirProvider::class, provider)
diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/utils.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/utils.kt
index ee093e9bdfc..77df6046e6e 100644
--- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/utils.kt
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/utils.kt
@@ -126,7 +126,7 @@ internal inline fun cachedValue(project: Project, vararg dependencies: Any,
internal fun psiModificationTrackerBasedCachedValue(project: Project, createValue: () -> T) =
cachedValue(project, PsiModificationTracker.MODIFICATION_COUNT, createValue = createValue)
-internal fun KtElement.getElementTextInContext(): String {
+fun KtElement.getElementTextInContext(): String {
val context = parentOfType()
?: parentOfType()
?: containingDeclarationForPseudocode
@@ -148,13 +148,13 @@ internal fun KtElement.getElementTextInContext(): String {
private const val ELEMENT_TAG = "ELEMENT"
-internal inline fun PsiElement.parentOfType(withSelf: Boolean = false): T? {
+inline fun PsiElement.parentOfType(withSelf: Boolean = false): T? {
return PsiTreeUtil.getParentOfType(this, T::class.java, !withSelf)
}
-internal fun PsiElement.parentsOfType(clazz: Class, withSelf: Boolean = true): Sequence {
+fun PsiElement.parentsOfType(clazz: Class, withSelf: Boolean = true): Sequence {
return (if (withSelf) parentsWithSelf else parents).filterIsInstance(clazz)
}
-internal inline fun PsiElement.parentsOfType(withSelf: Boolean = true): Sequence =
+inline fun PsiElement.parentsOfType(withSelf: Boolean = true): Sequence =
parentsOfType(T::class.java, withSelf)
diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/compiler/based/FrontendApiTestWithTestdata.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/compiler/based/FrontendApiTestWithTestdata.kt
index 3f002f5d998..2b470a939a1 100644
--- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/compiler/based/FrontendApiTestWithTestdata.kt
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/compiler/based/FrontendApiTestWithTestdata.kt
@@ -22,15 +22,12 @@ import org.jetbrains.kotlin.fir.analysis.FirAnalyzerFacade
import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProvider
import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider
import org.jetbrains.kotlin.fir.session.FirModuleInfoBasedModuleData
-import org.jetbrains.kotlin.idea.fir.low.level.api.DeclarationProvider
-import org.jetbrains.kotlin.idea.fir.low.level.api.FirIdeResolveStateService
-import org.jetbrains.kotlin.idea.fir.low.level.api.PackageExistenceChecker
+import org.jetbrains.kotlin.idea.fir.low.level.api.*
import org.jetbrains.kotlin.idea.fir.low.level.api.api.*
-import org.jetbrains.kotlin.idea.fir.low.level.api.createResolveStateForNoCaching
import org.jetbrains.kotlin.idea.fir.low.level.api.sessions.FirIdeSession
import org.jetbrains.kotlin.idea.fir.low.level.api.test.base.DeclarationProviderTestImpl
import org.jetbrains.kotlin.idea.fir.low.level.api.test.base.KotlinOutOfBlockModificationTrackerFactoryTestImpl
-import org.jetbrains.kotlin.idea.fir.low.level.api.test.base.PackageExistenceCheckerTestImpl
+import org.jetbrains.kotlin.idea.fir.low.level.api.test.base.KtPackageProviderTestImpl
import org.jetbrains.kotlin.idea.fir.low.level.api.test.base.SealedClassInheritorsProviderTestImpl
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
import org.jetbrains.kotlin.name.Name
@@ -39,6 +36,7 @@ import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
+import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
import org.jetbrains.kotlin.test.TestConfiguration
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.builders.testConfiguration
@@ -125,15 +123,6 @@ abstract class FrontendApiTestWithTestdata : AbstractKotlinCompilerTest() {
val configurator = object : FirModuleResolveStateConfigurator() {
private val sealedClassInheritorsProvider = SealedClassInheritorsProviderTestImpl()
- private val packageExistenceChecker = PackageExistenceCheckerTestImpl(sourcesScope, ktFiles.values)
-
- override fun createDeclarationProvider(scope: GlobalSearchScope): DeclarationProvider {
- return DeclarationProviderTestImpl(scope, ktFiles.values)
- }
-
- override fun createPackageExistingCheckerForModule(moduleInfo: ModuleInfo): PackageExistenceChecker {
- return packageExistenceChecker
- }
override fun createPackagePartsProvider(scope: GlobalSearchScope): PackagePartProvider {
return packagePartProviderFactory.invoke(scope)
@@ -188,6 +177,16 @@ abstract class FrontendApiTestWithTestdata : AbstractKotlinCompilerTest() {
KotlinOutOfBlockModificationTrackerFactory::class.java,
KotlinOutOfBlockModificationTrackerFactoryTestImpl::class.java
)
+ registerService(KtDeclarationProviderFactory::class.java, object : KtDeclarationProviderFactory() {
+ override fun createDeclarationProvider(searchScope: GlobalSearchScope): DeclarationProvider {
+ return DeclarationProviderTestImpl(searchScope, ktFiles.values)
+ }
+ })
+ registerService(KtPackageProviderFactory::class.java, object : KtPackageProviderFactory() {
+ override fun createPackageProvider(searchScope: GlobalSearchScope): KtPackageProvider {
+ return KtPackageProviderTestImpl(searchScope, ktFiles.values)
+ }
+ })
}
diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/DeclarationProviderTestImpl.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/DeclarationProviderTestImpl.kt
index 1e70dd1685d..cabd0df3cdb 100644
--- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/DeclarationProviderTestImpl.kt
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/DeclarationProviderTestImpl.kt
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.psi.psiUtil.findDescendantOfType
import org.jetbrains.kotlin.psi.psiUtil.forEachDescendantOfType
internal class DeclarationProviderTestImpl(
- searchScope: GlobalSearchScope,
+ override val searchScope: GlobalSearchScope,
ktFiles: Collection
) : DeclarationProvider() {
diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/PackageExistenceCheckerTestImpl.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/KtPackageProviderTestImpl.kt
similarity index 63%
rename from idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/PackageExistenceCheckerTestImpl.kt
rename to idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/KtPackageProviderTestImpl.kt
index 34dd021ccfe..8c77bce512d 100644
--- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/PackageExistenceCheckerTestImpl.kt
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/KtPackageProviderTestImpl.kt
@@ -6,17 +6,23 @@
package org.jetbrains.kotlin.idea.fir.low.level.api.test.base
import com.intellij.psi.search.GlobalSearchScope
-import org.jetbrains.kotlin.idea.fir.low.level.api.PackageExistenceChecker
+import org.jetbrains.kotlin.idea.fir.low.level.api.KtPackageProvider
import org.jetbrains.kotlin.name.FqName
+import org.jetbrains.kotlin.name.Name
+import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.psi.KtFile
-internal class PackageExistenceCheckerTestImpl(
+internal class KtPackageProviderTestImpl(
scope: GlobalSearchScope,
files: Collection
-) : PackageExistenceChecker() {
+) : KtPackageProvider() {
private val filesInScope = files.filter { scope.contains(it.virtualFile) }
override fun isPackageExists(packageFqName: FqName): Boolean {
return filesInScope.any { it.packageFqName == packageFqName }
}
+
+ override fun getJavaAndKotlinSubPackageFqNames(packageFqName: FqName, targetPlatform: TargetPlatform): Set {
+ TODO("Not yet implemented")
+ }
}
\ No newline at end of file
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 1f684d68e16..351c71b7949 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
@@ -21,8 +21,6 @@ import org.jetbrains.kotlin.idea.asJava.classes.getOrCreateFirLightClass
import org.jetbrains.kotlin.idea.asJava.elements.FirLightTypeParameterListForSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.*
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolKind
-import org.jetbrains.kotlin.idea.util.ifFalse
-import org.jetbrains.kotlin.idea.util.ifTrue
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
import org.jetbrains.kotlin.psi.KtBlockExpression
import org.jetbrains.kotlin.psi.KtClassBody
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/fields/FirLightFieldEnumEntry.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/fields/FirLightFieldEnumEntry.kt
index 28182753b7a..9e8c81379bb 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/fields/FirLightFieldEnumEntry.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/fields/FirLightFieldEnumEntry.kt
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.idea.asJava.*
import org.jetbrains.kotlin.idea.frontend.api.isValid
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtEnumEntrySymbol
-import org.jetbrains.kotlin.idea.util.ifTrue
import org.jetbrains.kotlin.psi.KtEnumEntry
internal class FirLightFieldForEnumEntry(
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/lightClassUtils.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/lightClassUtils.kt
index 9ad03ec02b5..e3351af53da 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/lightClassUtils.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/lightClassUtils.kt
@@ -9,4 +9,8 @@ import org.jetbrains.kotlin.idea.frontend.api.tokens.HackToForceAllowRunningAnal
import org.jetbrains.kotlin.idea.frontend.api.tokens.hackyAllowRunningOnEdt
@OptIn(HackToForceAllowRunningAnalyzeOnEDT::class)
-internal inline fun allowLightClassesOnEdt(action: () -> E): E = hackyAllowRunningOnEdt(action)
\ No newline at end of file
+internal inline fun allowLightClassesOnEdt(action: () -> E): E = hackyAllowRunningOnEdt(action)
+
+internal inline fun Boolean.ifTrue(body: () -> T?): T? = if (this) body() else null
+
+internal inline fun Boolean.ifFalse(body: () -> T?): T? = if (!this) body() else null
\ No newline at end of file
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/methods/FirLightAccessorMethodForSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/methods/FirLightAccessorMethodForSymbol.kt
index e4d5c0804f9..655ed346ac9 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/methods/FirLightAccessorMethodForSymbol.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/methods/FirLightAccessorMethodForSymbol.kt
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.idea.asJava.parameters.FirLightSetterParameterForSymbol
import org.jetbrains.kotlin.idea.frontend.api.isValid
import org.jetbrains.kotlin.idea.frontend.api.symbols.*
-import org.jetbrains.kotlin.idea.util.ifTrue
import org.jetbrains.kotlin.load.java.JvmAbi.getterName
import org.jetbrains.kotlin.load.java.JvmAbi.setterName
import org.jetbrains.kotlin.psi.KtDeclaration
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/methods/FirLightMethod.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/methods/FirLightMethod.kt
index 06a050a6c7c..587585fdb16 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/methods/FirLightMethod.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/methods/FirLightMethod.kt
@@ -22,8 +22,6 @@ import org.jetbrains.kotlin.idea.frontend.api.isValid
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotatedSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolWithVisibility
-import org.jetbrains.kotlin.idea.util.ifTrue
-import org.jetbrains.kotlin.idea.util.module
internal abstract class FirLightMethod(
lightMemberOrigin: LightMemberOrigin?,
@@ -95,10 +93,13 @@ internal abstract class FirLightMethod(
if (effectiveVisibilityIfNotInternal != Visibilities.Internal) return defaultName
- val moduleName = module?.name ?: return defaultName
+ //TODO
+// val moduleName = module?.name ?: return defaultName
- if (hasPublishedApiAnnotation(annotationUseSiteTarget)) return defaultName
+ return defaultName
- return KotlinTypeMapper.InternalNameMapper.mangleInternalName(defaultName, moduleName)
+// if (hasPublishedApiAnnotation(annotationUseSiteTarget)) return defaultName
+//
+// return KotlinTypeMapper.InternalNameMapper.mangleInternalName(defaultName, moduleName)
}
}
\ No newline at end of file
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/methods/FirLightSimpleMethodForSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/methods/FirLightSimpleMethodForSymbol.kt
index 14945b8dfb7..b1e6cfa4775 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/methods/FirLightSimpleMethodForSymbol.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/methods/FirLightSimpleMethodForSymbol.kt
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.idea.asJava.elements.FirLightTypeParameterListForSymbol
import org.jetbrains.kotlin.idea.frontend.api.isValid
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFunctionSymbol
-import org.jetbrains.kotlin.idea.util.ifTrue
import org.jetbrains.kotlin.lexer.KtTokens
import java.util.*
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/parameters/FirLightParameterForSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/parameters/FirLightParameterForSymbol.kt
index d568199afa5..cb13d181c93 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/parameters/FirLightParameterForSymbol.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/parameters/FirLightParameterForSymbol.kt
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
import org.jetbrains.kotlin.idea.frontend.api.isValid
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtValueParameterSymbol
-import org.jetbrains.kotlin.idea.util.ifTrue
internal class FirLightParameterForSymbol(
private val parameterSymbol: KtValueParameterSymbol,
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirIdeDeserializedDeclarationSourceProvider.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirIdeDeserializedDeclarationSourceProvider.kt
index c4ea25659b2..cd0464a4517 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirIdeDeserializedDeclarationSourceProvider.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirIdeDeserializedDeclarationSourceProvider.kt
@@ -10,13 +10,15 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.declarations.*
+import org.jetbrains.kotlin.idea.fir.FirIdeDeserializedDeclarationSourceProvider.scope
import org.jetbrains.kotlin.idea.fir.low.level.api.api.KtDeclarationAndFirDeclarationEqualityChecker
+import org.jetbrains.kotlin.idea.fir.low.level.api.createDeclarationProvider
import org.jetbrains.kotlin.idea.fir.low.level.api.sessions.FirIdeSession
-import org.jetbrains.kotlin.idea.stubindex.KotlinFullClassNameIndex
-import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelFunctionFqnNameIndex
-import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelPropertyFqnNameIndex
-import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelTypeAliasFqNameIndex
+
import org.jetbrains.kotlin.name.ClassId
+import org.jetbrains.kotlin.name.FqName
+import org.jetbrains.kotlin.name.Name
+import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtFunction
@@ -41,11 +43,8 @@ object FirIdeDeserializedDeclarationSourceProvider {
project: Project
): PsiElement? {
val candidates = if (function.isTopLevel) {
- KotlinTopLevelFunctionFqnNameIndex.getInstance().get(
- function.symbol.callableId.asSingleFqName().asString(),
- project,
- function.scope(project)
- ).filter(KtNamedFunction::isCompiled)
+ project.createDeclarationProvider(function.scope(project)).getTopLevelFunctions(function.symbol.callableId)
+ .filter(KtNamedFunction::isCompiled)
} else {
function.containingKtClass(project)?.body?.functions
?.filter { it.name == function.name.asString() && it.isCompiled() }
@@ -57,11 +56,7 @@ object FirIdeDeserializedDeclarationSourceProvider {
private fun provideSourceForProperty(property: FirProperty, project: Project): PsiElement? {
val candidates = if (property.isTopLevel) {
- KotlinTopLevelPropertyFqnNameIndex.getInstance().get(
- property.symbol.callableId.asSingleFqName().asString(),
- project,
- property.scope(project)
- )
+ project.createDeclarationProvider(property.scope(project)).getTopLevelFunctions(property.symbol.callableId)
} else {
property.containingKtClass(project)?.declarations
?.filter { it.name == property.name.asString() }
@@ -75,11 +70,7 @@ object FirIdeDeserializedDeclarationSourceProvider {
classByClassId(klass.symbol.classId, klass.scope(project), project)
private fun provideSourceForTypeAlias(alias: FirTypeAlias, project: Project): PsiElement? {
- val candidates = KotlinTopLevelTypeAliasFqNameIndex.getInstance().get(
- alias.symbol.classId.asStringForUsingInIndexes(),
- project,
- alias.scope(project)
- )
+ val candidates = project.createDeclarationProvider(alias.scope(project)).getTypeAliasesByClassId(alias.symbol.classId)
return candidates.firstOrNull(KtElement::isCompiled)
}
@@ -119,21 +110,17 @@ object FirIdeDeserializedDeclarationSourceProvider {
unwrapFakeOverrides().containingClass()?.classId?.let { classByClassId(it, scope(project), project) }
private fun classByClassId(classId: ClassId, scope: GlobalSearchScope, project: Project): KtClassOrObject? {
- val fqName = classId.asStringForUsingInIndexes().let { classIdMapping[it] ?: it }
- return KotlinFullClassNameIndex.getInstance().get(
- fqName,
- project,
- scope
- ).firstOrNull(KtElement::isCompiled)
+ val correctedClassId = classIdMapping[classId] ?: classId
+ return project.createDeclarationProvider(scope)
+ .getClassesByClassId(correctedClassId)
+ .firstOrNull(KtElement::isCompiled)
}
private val FirCallableDeclaration<*>.isTopLevel
get() = symbol.callableId.className == null
- private fun ClassId.asStringForUsingInIndexes() = asString().replace('/', '.')
-
private val classIdMapping = (0..23).associate { i ->
- "kotlin.Function$i" to "kotlin.jvm.functions.Function$i"
+ StandardClassIds.FunctionN(i) to ClassId(FqName("kotlin.jvm.functions"), Name.identifier("Function$i"))
}
}
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtFirAnalysisSession.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtFirAnalysisSession.kt
index 35d45a5a3d9..ffd0c9a9642 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtFirAnalysisSession.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtFirAnalysisSession.kt
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirOverrideInfoProvi
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirSymbolProvider
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.threadLocal
import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken
-import org.jetbrains.kotlin.idea.stubindex.KotlinSourceFilterScope
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtFile
@@ -110,7 +109,7 @@ private constructor(
val rootModuleSession: FirSession get() = firResolveState.rootModuleSession
val firSymbolProvider: FirSymbolProvider get() = rootModuleSession.symbolProvider
val targetPlatform: TargetPlatform get() = rootModuleSession.moduleData.platform
- val searchScope: GlobalSearchScope = KotlinSourceFilterScope.projectSourceAndClassFiles(element.resolveScope, project)
+ val searchScope: GlobalSearchScope = element.resolveScope//todo
companion object {
@InvalidWayOfUsingAnalysisSession
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 12598aafae2..a100165fcae 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
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
+import org.jetbrains.kotlin.idea.fir.low.level.api.createPackageProvider
import org.jetbrains.kotlin.idea.frontend.api.*
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.*
import org.jetbrains.kotlin.idea.frontend.api.fir.types.*
@@ -33,7 +34,6 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
import org.jetbrains.kotlin.idea.frontend.api.symbols.*
import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
-import org.jetbrains.kotlin.idea.stubindex.PackageIndexUtil
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.types.Variance
@@ -111,10 +111,11 @@ internal class KtSymbolByFirBuilder private constructor(
fun buildFileSymbol(fir: FirFile) = filesCache.cache(fir) { KtFirFileSymbol(fir, resolveState, token) }
+ private val packageProvider = project.createPackageProvider( GlobalSearchScope.allScope(project))//todo scope
fun createPackageSymbolIfOneExists(packageFqName: FqName): KtFirPackageSymbol? {
val exists =
- PackageIndexUtil.packageExists(packageFqName, GlobalSearchScope.allScope(project), project)
+ packageProvider.isPackageExists(packageFqName)
|| JavaPsiFacade.getInstance(project).findPackage(packageFqName.asString()) != null
if (!exists) {
return null
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCompletionCandidateChecker.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCompletionCandidateChecker.kt
index 5a87f14c5df..ba84b3784a3 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCompletionCandidateChecker.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCompletionCandidateChecker.kt
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.api.getOrBuildFirOfType
import org.jetbrains.kotlin.idea.fir.low.level.api.resolver.ResolutionParameters
import org.jetbrains.kotlin.idea.fir.low.level.api.resolver.SingleCandidateResolutionMode
import org.jetbrains.kotlin.idea.fir.low.level.api.resolver.SingleCandidateResolver
+import org.jetbrains.kotlin.idea.fir.low.level.api.util.getElementTextInContext
import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken
import org.jetbrains.kotlin.idea.frontend.api.components.KtCompletionCandidateChecker
import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession
@@ -23,7 +24,6 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirSymbol
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
-import org.jetbrains.kotlin.idea.util.getElementTextInContext
import org.jetbrains.kotlin.psi.KtExpression
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirReferenceShortener.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirReferenceShortener.kt
index bba0eb88d92..fec47f1051c 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirReferenceShortener.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirReferenceShortener.kt
@@ -8,9 +8,6 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.components
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.util.TextRange
import com.intellij.psi.SmartPsiElementPointer
-import com.intellij.psi.impl.source.PostprocessReformattingAspect
-import com.intellij.psi.util.parentsOfType
-import com.intellij.util.containers.addIfNotNull
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession
@@ -49,6 +46,7 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
import org.jetbrains.kotlin.idea.fir.low.level.api.api.LowLevelFirApiFacadeForResolveOnAir
import org.jetbrains.kotlin.idea.fir.low.level.api.api.getOrBuildFir
import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.FirTowerContextProvider
+import org.jetbrains.kotlin.idea.fir.low.level.api.util.parentsOfType
import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken
import org.jetbrains.kotlin.idea.frontend.api.components.KtReferenceShortener
import org.jetbrains.kotlin.idea.frontend.api.components.ShortenCommand
@@ -58,9 +56,8 @@ import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.*
-import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer
-import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelector
-import org.jetbrains.kotlin.psi.psiUtil.unwrapNullability
+import org.jetbrains.kotlin.psi.psiUtil.*
+import org.jetbrains.kotlin.utils.addIfNotNull
internal class KtFirReferenceShortener(
override val analysisSession: KtFirAnalysisSession,
@@ -459,8 +456,8 @@ private class ShortenCommandImpl(
for (nameToImport in importsToAdd) {
addImportToFile(targetFile.project, targetFile, nameToImport)
}
-
- PostprocessReformattingAspect.getInstance(targetFile.project).disablePostprocessFormattingInside {
+//todo
+// PostprocessReformattingAspect.getInstance(targetFile.project).disablePostprocessFormattingInside {
for (typePointer in typesToShorten) {
val type = typePointer.element ?: continue
type.deleteQualifier()
@@ -470,7 +467,7 @@ private class ShortenCommandImpl(
val call = callPointer.element ?: continue
call.deleteQualifier()
}
- }
+// }
}
}
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 0690aa4e8b8..f67340ba5f3 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
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.scopes.*
import org.jetbrains.kotlin.fir.scopes.impl.*
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
import org.jetbrains.kotlin.idea.fir.low.level.api.api.LowLevelFirApiFacadeForResolveOnAir.getTowerContextProvider
+import org.jetbrains.kotlin.idea.fir.low.level.api.util.getElementTextInContext
import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken
import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner
import org.jetbrains.kotlin.idea.frontend.api.components.KtImplicitReceiver
@@ -36,7 +37,6 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolWithDeclar
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolWithMembers
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
-import org.jetbrains.kotlin.idea.util.getElementTextInContext
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtFile
import java.util.*
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirSymbolContainingDeclarationProvider.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirSymbolContainingDeclarationProvider.kt
index 39dd082e377..9c3821d0cc7 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirSymbolContainingDeclarationProvider.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirSymbolContainingDeclarationProvider.kt
@@ -6,9 +6,9 @@
package org.jetbrains.kotlin.idea.frontend.api.fir.components
import com.intellij.psi.PsiElement
-import com.intellij.psi.util.parentOfType
import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
import org.jetbrains.kotlin.fir.psi
+import org.jetbrains.kotlin.idea.fir.low.level.api.util.parentOfType
import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken
import org.jetbrains.kotlin.idea.frontend.api.components.KtSymbolContainingDeclarationProvider
import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirVisibilityChecker.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirVisibilityChecker.kt
index 7040b034f3d..950a6eb6b01 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirVisibilityChecker.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirVisibilityChecker.kt
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.idea.frontend.api.fir.components
import com.intellij.psi.PsiElement
-import com.intellij.psi.util.parentsOfType
import org.jetbrains.kotlin.fir.FirSymbolOwner
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
@@ -15,6 +14,7 @@ import org.jetbrains.kotlin.fir.resolve.calls.ExpressionReceiverValue
import org.jetbrains.kotlin.fir.visibilityChecker
import org.jetbrains.kotlin.idea.fir.low.level.api.api.collectDesignation
import org.jetbrains.kotlin.idea.fir.low.level.api.api.getOrBuildFirSafe
+import org.jetbrains.kotlin.idea.fir.low.level.api.util.parentsOfType
import org.jetbrains.kotlin.idea.frontend.api.components.KtVisibilityChecker
import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirFileSymbol
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/renderer/FirIdeRenderer.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/renderer/FirIdeRenderer.kt
index 6d17c9e4d8b..1e646d19502 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/renderer/FirIdeRenderer.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/renderer/FirIdeRenderer.kt
@@ -18,10 +18,10 @@ import org.jetbrains.kotlin.fir.resolve.defaultType
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.idea.asJava.applyIf
+import org.jetbrains.kotlin.idea.asJava.ifTrue
import org.jetbrains.kotlin.idea.frontend.api.components.KtDeclarationRendererOptions
import org.jetbrains.kotlin.idea.frontend.api.components.RendererModifier
import org.jetbrains.kotlin.idea.frontend.api.fir.types.PublicTypeApproximator
-import org.jetbrains.kotlin.idea.util.ifTrue
import org.jetbrains.kotlin.name.SpecialNames
import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.renderer.render
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 c8feac4a7c3..15ad21b79fa 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
@@ -9,7 +9,8 @@ import com.intellij.openapi.project.Project
import com.intellij.psi.JavaPsiFacade
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.fir.scopes.impl.FirPackageMemberScope
-import org.jetbrains.kotlin.idea.fir.low.level.api.api.searchScope
+import org.jetbrains.kotlin.idea.fir.low.level.api.createDeclarationProvider
+import org.jetbrains.kotlin.idea.fir.low.level.api.createPackageProvider
import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.idea.frontend.api.fir.components.KtFirScopeProvider
@@ -19,15 +20,11 @@ import org.jetbrains.kotlin.idea.frontend.api.scopes.KtPackageScope
import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScopeNameFilter
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassifierSymbol
-import org.jetbrains.kotlin.idea.frontend.api.symbols.KtConstructorSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPackageSymbol
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
-import org.jetbrains.kotlin.idea.search.getKotlinFqName
-import org.jetbrains.kotlin.idea.stubindex.*
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.TargetPlatform
-import org.jetbrains.kotlin.platform.jvm.isJvm
internal class KtFirPackageScope(
override val fqName: FqName,
@@ -39,6 +36,8 @@ internal class KtFirPackageScope(
private val targetPlatform: TargetPlatform,
) : KtPackageScope {
private val scopeProvider by weakRef(_scopeProvider)
+ private val declarationsProvider = project.createDeclarationProvider(searchScope)
+ private val packageProvider = project.createPackageProvider(searchScope)
private val firScope: FirPackageMemberScope by lazyThreadUnsafeWeakRef {
val scope = FirPackageMemberScope(fqName, builder.rootSession)
@@ -48,20 +47,15 @@ internal class KtFirPackageScope(
override fun getPossibleCallableNames() = withValidityAssertion {
hashSetOf().apply {
- KotlinTopLevelPropertyByPackageIndex.getInstance()[fqName.asString(), project, searchScope]
- .mapNotNullTo(this) { it.nameAsName }
- KotlinTopLevelFunctionByPackageIndex.getInstance()[fqName.asString(), project, searchScope]
- .mapNotNullTo(this) { it.nameAsName }
+ addAll(declarationsProvider.getFunctionsNamesInPackage(fqName))
+ addAll(declarationsProvider.getPropertyNamesInPackage(fqName))
}
}
override fun getPossibleClassifierNames(): Set = withValidityAssertion {
hashSetOf().apply {
- KotlinTopLevelClassByPackageIndex.getInstance()[fqName.asString(), project, searchScope]
- .mapNotNullTo(this) { it.nameAsName }
-
- KotlinTopLevelTypeAliasByPackageIndex.getInstance()[fqName.asString(), project, searchScope]
- .mapNotNullTo(this) { it.nameAsName }
+ addAll(declarationsProvider.getClassNamesInPackage(fqName))
+ addAll(declarationsProvider.getTypeAliasNamesInPackage(fqName))
JavaPsiFacade.getInstance(project)
.findPackage(fqName.asString())
@@ -79,7 +73,9 @@ internal class KtFirPackageScope(
}
override fun getPackageSymbols(nameFilter: KtScopeNameFilter): Sequence = withValidityAssertion {
- PackageIndexUtil.getJavaAndKotlinSubPackageFqNames(fqName, searchScope, project, targetPlatform, nameFilter)
- .map { builder.createPackageSymbol(it) }
+ packageProvider.getJavaAndKotlinSubPackageFqNames(fqName, targetPlatform)
+ .filter(nameFilter)
+ .map { builder.createPackageSymbol(fqName.child(it)) }
+ .asSequence()
}
}
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 64b26debae9..5b8925ebaff 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
@@ -11,23 +11,21 @@ import org.jetbrains.kotlin.fir.scopes.getContainingCallableNamesIfPresent
import org.jetbrains.kotlin.fir.scopes.getContainingClassifierNamesIfPresent
import org.jetbrains.kotlin.fir.scopes.impl.FirAbstractStarImportingScope
import org.jetbrains.kotlin.fir.scopes.impl.FirDefaultStarImportingScope
+import org.jetbrains.kotlin.idea.fir.low.level.api.createDeclarationProvider
import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner
-import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
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.scopes.Import
+import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScopeNameFilter
+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.KtClassifierSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtConstructorSymbol
+import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken
import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion
-import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelClassByPackageIndex
-import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelFunctionByPackageIndex
-import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelPropertyByPackageIndex
-import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
-import org.jetbrains.kotlin.psi.KtCallableDeclaration
-import org.jetbrains.kotlin.psi.KtClassOrObject
internal class KtFirStarImportingScope(
firScope: FirAbstractStarImportingScope,
@@ -37,7 +35,9 @@ internal class KtFirStarImportingScope(
) : KtStarImportingScope, ValidityTokenOwner {
private val firScope: FirAbstractStarImportingScope by weakRef(firScope)
override val isDefaultImportingScope: Boolean = withValidityAssertion { firScope is FirDefaultStarImportingScope }
- private val packageHelper = PackageIndexHelper(project)
+
+ //todo use more concrete scope
+ private val declarationProvider = project.createDeclarationProvider(GlobalSearchScope.allScope(project))
override val imports: List by cached {
firScope.starImports.map { import ->
@@ -64,7 +64,8 @@ internal class KtFirStarImportingScope(
override fun getPossibleCallableNames(): Set = withValidityAssertion {
imports.flatMapTo(hashSetOf()) { import: Import ->
if (import.relativeClassName == null) { // top level callable
- packageHelper.getPackageTopLevelCallables(import.packageFqName)
+ declarationProvider.getFunctionsNamesInPackage(import.packageFqName) +
+ declarationProvider.getPropertyNamesInPackage(import.packageFqName)
} else { //member
val classId = import.resolvedClassId ?: error("Class id should not be null as relativeClassName is not null")
firScope.getStaticsScope(classId)?.getContainingCallableNamesIfPresent().orEmpty()
@@ -75,7 +76,8 @@ internal class KtFirStarImportingScope(
override fun getPossibleClassifierNames(): Set = withValidityAssertion {
imports.flatMapTo(hashSetOf()) { import ->
if (import.relativeClassName == null) {
- packageHelper.getPackageTopLevelClassifiers(import.packageFqName)
+ declarationProvider.getClassNamesInPackage(import.packageFqName) +
+ declarationProvider.getTypeAliasNamesInPackage(import.packageFqName)
} else {
val classId = import.resolvedClassId ?: error("Class id should not be null as relativeClassName is not null")
firScope.getStaticsScope(classId)?.getContainingClassifierNamesIfPresent().orEmpty()
@@ -83,30 +85,4 @@ internal class KtFirStarImportingScope(
}
}
-}
-
-private class PackageIndexHelper(private val project: Project) {
- //todo use more concrete scope
- private val searchScope = GlobalSearchScope.allScope(project)
-
- private val functionByPackageIndex = KotlinTopLevelFunctionByPackageIndex.getInstance()
- private val propertyByPackageIndex = KotlinTopLevelPropertyByPackageIndex.getInstance()
-
- private val classByPackageIndex = KotlinTopLevelClassByPackageIndex.getInstance()
-
- fun getPackageTopLevelCallables(packageFqName: FqName): Set {
- return getTopLevelCallables(packageFqName).mapTo(hashSetOf()) { it.nameAsSafeName }
- }
-
- fun getPackageTopLevelClassifiers(packageFqName: FqName): Set {
- return getTopLevelClassifiers(packageFqName).mapTo(hashSetOf()) { it.nameAsSafeName }
- }
-
- private fun getTopLevelClassifiers(packageFqName: FqName): MutableCollection =
- classByPackageIndex.get(packageFqName.asString(), project, searchScope)
-
- private fun getTopLevelCallables(packageFqName: FqName): Sequence = sequence {
- yieldAll(functionByPackageIndex.get(packageFqName.asString(), project, searchScope))
- yieldAll(propertyByPackageIndex.get(packageFqName.asString(), project, searchScope))
- }
}
\ No newline at end of file
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPackageSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPackageSymbol.kt
index a87863d86a3..82c550791b4 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPackageSymbol.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPackageSymbol.kt
@@ -11,6 +11,7 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.PsiManager
import com.intellij.psi.impl.file.PsiPackageImpl
import com.intellij.psi.search.GlobalSearchScope
+import org.jetbrains.kotlin.idea.fir.low.level.api.createPackageProvider
import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner
import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken
import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession
@@ -18,7 +19,6 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
import org.jetbrains.kotlin.idea.frontend.api.symbols.*
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.symbolPointer
-import org.jetbrains.kotlin.idea.stubindex.PackageIndexUtil
import org.jetbrains.kotlin.name.FqName
class KtFirPackageSymbol(
@@ -47,5 +47,5 @@ class KtPackage(
) : PsiPackageImpl(manager, fqName.asString().replace('/', '.')) {
override fun copy() = KtPackage(manager, fqName, scope)
- override fun isValid(): Boolean = PackageIndexUtil.packageExists(fqName, scope, project)
+ override fun isValid(): Boolean = project.createPackageProvider(scope).isPackageExists(fqName)
}
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/firSymbolUtils.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/firSymbolUtils.kt
index 43031de61bd..8ac89461096 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/firSymbolUtils.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/firSymbolUtils.kt
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.coneType
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
import org.jetbrains.kotlin.idea.frontend.api.fir.buildSymbol
-import org.jetbrains.kotlin.idea.util.getElementTextInContext
+import org.jetbrains.kotlin.idea.fir.low.level.api.util.getElementTextInContext
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.psi.KtDeclaration
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtFirReferenceResolver.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtFirReferenceResolver.kt
index e9134a46501..06dc4ac4a07 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtFirReferenceResolver.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtFirReferenceResolver.kt
@@ -10,10 +10,10 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.PsiElementResolveResult
import com.intellij.psi.ResolveResult
import com.intellij.psi.impl.source.resolve.ResolveCache
+import org.jetbrains.kotlin.idea.fir.low.level.api.util.getElementTextInContext
import org.jetbrains.kotlin.idea.frontend.api.tokens.HackToForceAllowRunningAnalyzeOnEDT
import org.jetbrains.kotlin.idea.frontend.api.analyse
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.runInPossiblyEdtThread
-import org.jetbrains.kotlin.idea.util.getElementTextInContext
object KtFirReferenceResolver : ResolveCache.PolyVariantResolver {
class KotlinResolveResult(element: PsiElement) : PsiElementResolveResult(element)
diff --git a/idea/resources-fir/META-INF/plugin.xml b/idea/resources-fir/META-INF/plugin.xml
index d208b95b05f..c914b1fb2f5 100644
--- a/idea/resources-fir/META-INF/plugin.xml
+++ b/idea/resources-fir/META-INF/plugin.xml
@@ -119,6 +119,13 @@ The Kotlin FIR plugin provides language support in IntelliJ IDEA and Android Stu
+
+
+
+
+