FIR IDE: remove dependency to IDEA from low-level-api fir impl module
This commit is contained in:
@@ -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"))
|
||||
|
||||
@@ -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())
|
||||
|
||||
// <temp>
|
||||
compile(project(":idea:idea-core"))
|
||||
// </temp>
|
||||
|
||||
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 {
|
||||
|
||||
+45
-7
@@ -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 <INDEX_KEY : Any, reified PSI : PsiElement> 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<KtClassOrObject> {
|
||||
return listOfNotNull(getClassByClassId(classId))//todo
|
||||
}
|
||||
|
||||
override fun getTypeAliasesByClassId(classId: ClassId): Collection<KtTypeAlias> {
|
||||
return listOfNotNull(getTypeAliasByClassId(classId))//todo
|
||||
}
|
||||
|
||||
override fun getTypeAliasNamesInPackage(packageFqName: FqName): Set<Name> {
|
||||
return KotlinTopLevelTypeAliasByPackageIndex
|
||||
.getInstance()[packageFqName.asStringForIndexes(), project, searchScope]
|
||||
.mapNotNullTo(mutableSetOf()) { it.nameAsName }
|
||||
}
|
||||
|
||||
override fun getPropertyNamesInPackage(packageFqName: FqName): Set<Name> {
|
||||
return KotlinTopLevelPropertyByPackageIndex
|
||||
.getInstance()[packageFqName.asStringForIndexes(), project, searchScope]
|
||||
.mapNotNullTo(mutableSetOf()) { it.nameAsName }
|
||||
}
|
||||
|
||||
override fun getFunctionsNamesInPackage(packageFqName: FqName): Set<Name> {
|
||||
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<String, KtTypeAlias>(
|
||||
private fun getTypeAliasByClassId(classId: ClassId): KtTypeAlias? = firstMatchingOrNull<String, KtTypeAlias>(
|
||||
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<KtProperty> =
|
||||
KotlinTopLevelPropertyFqnNameIndex.getInstance()[callableId.asStringForIndexes(), project, scope]
|
||||
KotlinTopLevelPropertyFqnNameIndex.getInstance()[callableId.asStringForIndexes(), project, searchScope]
|
||||
|
||||
override fun getTopLevelFunctions(callableId: CallableId): Collection<KtNamedFunction> =
|
||||
KotlinTopLevelFunctionFqnNameIndex.getInstance()[callableId.asStringForIndexes(), project, scope]
|
||||
KotlinTopLevelFunctionFqnNameIndex.getInstance()[callableId.asStringForIndexes(), project, searchScope]
|
||||
|
||||
|
||||
override fun getClassNamesInPackage(packageFqName: FqName): Set<Name> =
|
||||
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)
|
||||
}
|
||||
}
|
||||
+1
-7
@@ -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)
|
||||
|
||||
|
||||
+32
@@ -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<Name> {
|
||||
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)
|
||||
}
|
||||
}
|
||||
-17
@@ -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<IdePackageOracleFactory>().createOracle(module)
|
||||
|
||||
override fun isPackageExists(packageFqName: FqName): Boolean = oracle.packageExists(packageFqName)
|
||||
}
|
||||
+22
-7
@@ -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<KtProperty>
|
||||
|
||||
abstract fun getTopLevelFunctions(callableId: CallableId): Collection<KtNamedFunction>
|
||||
abstract fun getClassesByClassId(classId: ClassId): Collection<KtClassOrObject>
|
||||
abstract fun getTypeAliasesByClassId(classId: ClassId): Collection<KtTypeAlias>
|
||||
|
||||
abstract fun getClassNamesInPackage(packageFqName: FqName): Set<Name>
|
||||
}
|
||||
abstract fun getTypeAliasNamesInPackage(packageFqName: FqName): Set<Name>
|
||||
|
||||
abstract fun getTopLevelProperties(callableId: CallableId): Collection<KtProperty>
|
||||
abstract fun getTopLevelFunctions(callableId: CallableId): Collection<KtNamedFunction>
|
||||
|
||||
abstract fun getPropertyNamesInPackage(packageFqName: FqName): Set<Name>
|
||||
abstract fun getFunctionsNamesInPackage(packageFqName: FqName): Set<Name>
|
||||
}
|
||||
|
||||
abstract class KtDeclarationProviderFactory {
|
||||
abstract fun createDeclarationProvider(searchScope: GlobalSearchScope): DeclarationProvider
|
||||
}
|
||||
|
||||
fun Project.createDeclarationProvider(searchScope: GlobalSearchScope): DeclarationProvider =
|
||||
ServiceManager.getService(this, KtDeclarationProviderFactory::class.java)
|
||||
.createDeclarationProvider(searchScope)
|
||||
+26
@@ -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<Name>
|
||||
}
|
||||
|
||||
abstract class KtPackageProviderFactory {
|
||||
abstract fun createPackageProvider(searchScope: GlobalSearchScope): KtPackageProvider
|
||||
}
|
||||
|
||||
fun Project.createPackageProvider(searchScope: GlobalSearchScope): KtPackageProvider =
|
||||
ServiceManager.getService(this, KtPackageProviderFactory::class.java)
|
||||
.createPackageProvider(searchScope)
|
||||
-12
@@ -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
|
||||
}
|
||||
+1
-7
@@ -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
|
||||
|
||||
+4
-3
@@ -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,
|
||||
|
||||
+5
-5
@@ -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)
|
||||
}
|
||||
|
||||
+2
-1
@@ -97,7 +97,8 @@ internal object FirIdeSessionFactory {
|
||||
scopeProvider,
|
||||
firFileBuilder,
|
||||
cache,
|
||||
configurator.createDeclarationProvider(searchScope),
|
||||
project.createDeclarationProvider(searchScope),
|
||||
project.createPackageProvider(searchScope),
|
||||
)
|
||||
|
||||
register(FirProvider::class, provider)
|
||||
|
||||
+4
-4
@@ -126,7 +126,7 @@ internal inline fun <T> cachedValue(project: Project, vararg dependencies: Any,
|
||||
internal fun <T> psiModificationTrackerBasedCachedValue(project: Project, createValue: () -> T) =
|
||||
cachedValue(project, PsiModificationTracker.MODIFICATION_COUNT, createValue = createValue)
|
||||
|
||||
internal fun KtElement.getElementTextInContext(): String {
|
||||
fun KtElement.getElementTextInContext(): String {
|
||||
val context = parentOfType<KtImportDirective>()
|
||||
?: parentOfType<KtPackageDirective>()
|
||||
?: containingDeclarationForPseudocode
|
||||
@@ -148,13 +148,13 @@ internal fun KtElement.getElementTextInContext(): String {
|
||||
|
||||
private const val ELEMENT_TAG = "ELEMENT"
|
||||
|
||||
internal inline fun <reified T : PsiElement> PsiElement.parentOfType(withSelf: Boolean = false): T? {
|
||||
inline fun <reified T : PsiElement> PsiElement.parentOfType(withSelf: Boolean = false): T? {
|
||||
return PsiTreeUtil.getParentOfType(this, T::class.java, !withSelf)
|
||||
}
|
||||
|
||||
internal fun <T : PsiElement> PsiElement.parentsOfType(clazz: Class<out T>, withSelf: Boolean = true): Sequence<T> {
|
||||
fun <T : PsiElement> PsiElement.parentsOfType(clazz: Class<out T>, withSelf: Boolean = true): Sequence<T> {
|
||||
return (if (withSelf) parentsWithSelf else parents).filterIsInstance(clazz)
|
||||
}
|
||||
|
||||
internal inline fun <reified T : PsiElement> PsiElement.parentsOfType(withSelf: Boolean = true): Sequence<T> =
|
||||
inline fun <reified T : PsiElement> PsiElement.parentsOfType(withSelf: Boolean = true): Sequence<T> =
|
||||
parentsOfType(T::class.java, withSelf)
|
||||
|
||||
+13
-14
@@ -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)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -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<KtFile>
|
||||
) : DeclarationProvider() {
|
||||
|
||||
|
||||
+9
-3
@@ -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<KtFile>
|
||||
) : 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<Name> {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
}
|
||||
-2
@@ -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
|
||||
|
||||
-1
@@ -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(
|
||||
|
||||
@@ -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 <E> allowLightClassesOnEdt(action: () -> E): E = hackyAllowRunningOnEdt(action)
|
||||
internal inline fun <E> allowLightClassesOnEdt(action: () -> E): E = hackyAllowRunningOnEdt(action)
|
||||
|
||||
internal inline fun <T> Boolean.ifTrue(body: () -> T?): T? = if (this) body() else null
|
||||
|
||||
internal inline fun <T> Boolean.ifFalse(body: () -> T?): T? = if (!this) body() else null
|
||||
-1
@@ -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
|
||||
|
||||
+6
-5
@@ -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)
|
||||
}
|
||||
}
|
||||
-1
@@ -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.*
|
||||
|
||||
|
||||
-1
@@ -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,
|
||||
|
||||
+15
-28
@@ -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"))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-2
@@ -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
|
||||
|
||||
+3
-2
@@ -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
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+6
-9
@@ -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()
|
||||
}
|
||||
}
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -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.*
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+12
-16
@@ -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<Name>().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<Name> = withValidityAssertion {
|
||||
hashSetOf<Name>().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<KtPackageSymbol> = 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()
|
||||
}
|
||||
}
|
||||
|
||||
+13
-37
@@ -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<StarImport> by cached {
|
||||
firScope.starImports.map { import ->
|
||||
@@ -64,7 +64,8 @@ internal class KtFirStarImportingScope(
|
||||
override fun getPossibleCallableNames(): Set<Name> = 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<Name> = 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<Name> {
|
||||
return getTopLevelCallables(packageFqName).mapTo(hashSetOf()) { it.nameAsSafeName }
|
||||
}
|
||||
|
||||
fun getPackageTopLevelClassifiers(packageFqName: FqName): Set<Name> {
|
||||
return getTopLevelClassifiers(packageFqName).mapTo(hashSetOf()) { it.nameAsSafeName }
|
||||
}
|
||||
|
||||
private fun getTopLevelClassifiers(packageFqName: FqName): MutableCollection<KtClassOrObject> =
|
||||
classByPackageIndex.get(packageFqName.asString(), project, searchScope)
|
||||
|
||||
private fun getTopLevelCallables(packageFqName: FqName): Sequence<KtCallableDeclaration> = sequence<KtCallableDeclaration> {
|
||||
yieldAll(functionByPackageIndex.get(packageFqName.asString(), project, searchScope))
|
||||
yieldAll(propertyByPackageIndex.get(packageFqName.asString(), project, searchScope))
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -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)
|
||||
}
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
|
||||
+1
-1
@@ -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<KtReference> {
|
||||
class KotlinResolveResult(element: PsiElement) : PsiElementResolveResult(element)
|
||||
|
||||
@@ -119,6 +119,13 @@ The Kotlin FIR plugin provides language support in IntelliJ IDEA and Android Stu
|
||||
<postStartupActivity implementation="org.jetbrains.kotlin.idea.fir.AndroidPluginIncompatibilityCheckerStartupActivity"/>
|
||||
|
||||
|
||||
<projectService serviceInterface="org.jetbrains.kotlin.idea.fir.low.level.api.KtDeclarationProviderFactory"
|
||||
serviceImplementation="org.jetbrains.kotlin.idea.fir.low.level.api.ide.KtDeclarationProviderFactoryIdeImpl"/>
|
||||
|
||||
<projectService serviceInterface="org.jetbrains.kotlin.idea.fir.low.level.api.KtPackageProviderFactory"
|
||||
serviceImplementation="org.jetbrains.kotlin.idea.fir.low.level.api.ide.KtPackageProviderFactoryIdeImpl"/>
|
||||
|
||||
|
||||
<projectService serviceInterface="org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveStateConfigurator"
|
||||
serviceImplementation="org.jetbrains.kotlin.idea.fir.low.level.api.ide.FirModuleResolveStateConfiguratorIdeImpl"/>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user