diff --git a/analysis/analysis-api-providers/build.gradle.kts b/analysis/analysis-api-providers/build.gradle.kts new file mode 100644 index 00000000000..408ed3fe5d4 --- /dev/null +++ b/analysis/analysis-api-providers/build.gradle.kts @@ -0,0 +1,20 @@ +plugins { + kotlin("jvm") + id("jps-compatible") +} + +dependencies { + implementation(project(":compiler:psi")) + implementation(project(":compiler:frontend.java")) + implementation(project(":core:compiler.common")) + implementation(intellijCoreDep()) { includeJars("intellij-core", rootProject = rootProject) } +} + +sourceSets { + "main" { projectDefault() } + "test" { none() } +} + +kotlin { + explicitApi() +} \ No newline at end of file diff --git a/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/KotlinDeclarationProvider.kt b/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/KotlinDeclarationProvider.kt new file mode 100644 index 00000000000..88d5d13e359 --- /dev/null +++ b/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/KotlinDeclarationProvider.kt @@ -0,0 +1,39 @@ +/* + * Copyright 2010-2021 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.analysis.providers + +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 +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.psi.* + +public abstract class KotlinDeclarationProvider { + public abstract fun getClassesByClassId(classId: ClassId): Collection + public abstract fun getTypeAliasesByClassId(classId: ClassId): Collection + + public abstract fun getClassNamesInPackage(packageFqName: FqName): Set + public abstract fun getTypeAliasNamesInPackage(packageFqName: FqName): Set + + public abstract fun getTopLevelProperties(callableId: CallableId): Collection + public abstract fun getTopLevelFunctions(callableId: CallableId): Collection + + public abstract fun getPropertyNamesInPackage(packageFqName: FqName): Set + public abstract fun getFunctionsNamesInPackage(packageFqName: FqName): Set + public abstract fun getFacadeFilesInPackage(packageFqName: FqName): Collection + public abstract fun findFilesForFacade(facadeFqName: FqName): Collection +} + +public abstract class KotlinDeclarationProviderFactory { + public abstract fun createDeclarationProvider(searchScope: GlobalSearchScope): KotlinDeclarationProvider +} + +public fun Project.createDeclarationProvider(searchScope: GlobalSearchScope): KotlinDeclarationProvider = + ServiceManager.getService(this, KotlinDeclarationProviderFactory::class.java) + .createDeclarationProvider(searchScope) \ No newline at end of file diff --git a/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/KotlinModificationTrackerFactory.kt b/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/KotlinModificationTrackerFactory.kt new file mode 100644 index 00000000000..5dde7c0073b --- /dev/null +++ b/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/KotlinModificationTrackerFactory.kt @@ -0,0 +1,34 @@ +/* + * Copyright 2010-2021 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.analysis.providers + +import com.intellij.openapi.components.ServiceManager +import com.intellij.openapi.project.Project +import com.intellij.openapi.util.ModificationTracker +import org.jetbrains.annotations.TestOnly +import org.jetbrains.kotlin.analyzer.ModuleSourceInfoBase + +public abstract class KotlinModificationTrackerFactory { + public abstract fun createProjectWideOutOfBlockModificationTracker(): ModificationTracker + public abstract fun createModuleWithoutDependenciesOutOfBlockModificationTracker(moduleInfo: ModuleSourceInfoBase): ModificationTracker + public abstract fun createLibrariesModificationTracker(): ModificationTracker + + @TestOnly + public abstract fun incrementModificationsCount() +} + +public fun Project.createProjectWideOutOfBlockModificationTracker(): ModificationTracker = + ServiceManager.getService(this, KotlinModificationTrackerFactory::class.java) + .createProjectWideOutOfBlockModificationTracker() + +public fun Project.createLibrariesModificationTracker(): ModificationTracker = + ServiceManager.getService(this, KotlinModificationTrackerFactory::class.java) + .createLibrariesModificationTracker() + + +public fun ModuleSourceInfoBase.createModuleWithoutDependenciesOutOfBlockModificationTracker(project: Project): ModificationTracker = + ServiceManager.getService(project, KotlinModificationTrackerFactory::class.java) + .createModuleWithoutDependenciesOutOfBlockModificationTracker(this) \ No newline at end of file diff --git a/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/KotlinPackageProvider.kt b/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/KotlinPackageProvider.kt new file mode 100644 index 00000000000..a13973c54a2 --- /dev/null +++ b/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/KotlinPackageProvider.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2010-2021 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.analysis.providers + +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 + +public abstract class KotlinPackageProvider { + public abstract fun isPackageExists(packageFqName: FqName): Boolean + public abstract fun getKotlinSubPackageFqNames(packageFqName: FqName): Set +} + +public abstract class KotlinPackageProviderFactory { + public abstract fun createPackageProvider(searchScope: GlobalSearchScope): KotlinPackageProvider +} + +public fun Project.createPackageProvider(searchScope: GlobalSearchScope): KotlinPackageProvider = + ServiceManager.getService(this, KotlinPackageProviderFactory::class.java) + .createPackageProvider(searchScope) \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/KotlinOutOfBlockModificationTrackerFactoryTestImpl.kt b/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/KotlinOutOfBlockModificationTrackerFactoryTestImpl.kt similarity index 77% rename from idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/KotlinOutOfBlockModificationTrackerFactoryTestImpl.kt rename to analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/KotlinOutOfBlockModificationTrackerFactoryTestImpl.kt index c010955e22d..4f3d370ea24 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/KotlinOutOfBlockModificationTrackerFactoryTestImpl.kt +++ b/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/KotlinOutOfBlockModificationTrackerFactoryTestImpl.kt @@ -3,15 +3,15 @@ * 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.test.base +package org.jetbrains.kotlin.analysis.providers.impl import com.intellij.openapi.util.ModificationTracker import com.intellij.openapi.util.SimpleModificationTracker import org.jetbrains.annotations.TestOnly +import org.jetbrains.kotlin.analysis.providers.KotlinModificationTrackerFactory import org.jetbrains.kotlin.analyzer.ModuleSourceInfoBase -import org.jetbrains.kotlin.idea.fir.low.level.api.api.KotlinOutOfBlockModificationTrackerFactory -internal class KotlinOutOfBlockModificationTrackerFactoryTestImpl : KotlinOutOfBlockModificationTrackerFactory() { +public class KotlinStaticModificationTrackerFactory : KotlinModificationTrackerFactory() { private val projectWide = SimpleModificationTracker() private val library = SimpleModificationTracker() private val forModule = mutableMapOf() @@ -25,7 +25,7 @@ internal class KotlinOutOfBlockModificationTrackerFactoryTestImpl : KotlinOutOfB return forModule.getOrPut(moduleInfo) { SimpleModificationTracker() } } - override fun createLibraryOutOfBlockModificationTracker(): ModificationTracker { + override fun createLibrariesModificationTracker(): ModificationTracker { return library } 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/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/KotlinStaticDeclarationProvider.kt similarity index 83% rename from idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/DeclarationProviderTestImpl.kt rename to analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/KotlinStaticDeclarationProvider.kt index 1521f599d88..b594262dd58 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/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/KotlinStaticDeclarationProvider.kt @@ -3,26 +3,24 @@ * 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.test.base +package org.jetbrains.kotlin.analysis.providers.impl import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider +import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProviderFactory import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName -import org.jetbrains.kotlin.idea.fir.low.level.api.DeclarationProvider import org.jetbrains.kotlin.name.CallableId 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.collectDescendantsOfType -import org.jetbrains.kotlin.psi.psiUtil.findDescendantOfType -import org.jetbrains.kotlin.psi.psiUtil.forEachDescendantOfType -internal class DeclarationProviderTestImpl( - override val searchScope: GlobalSearchScope, +public class KotlinStaticDeclarationProvider( + scope: GlobalSearchScope, ktFiles: Collection -) : DeclarationProvider() { - - private val filesInScope = ktFiles.filter { searchScope.contains(it.virtualFile) } +) : KotlinDeclarationProvider() { + private val filesInScope = ktFiles.filter { scope.contains(it.virtualFile) } private fun filesByPackage(packageFqName: FqName) = filesInScope.asSequence() @@ -91,4 +89,10 @@ internal class DeclarationProviderTestImpl( .flatMap { it.declarations } .filterIsInstance() .mapNotNullTo(mutableSetOf()) { it.nameAsName } +} + +public class KotlinStaticDeclarationProviderFactory(private val files: Collection) : KotlinDeclarationProviderFactory() { + override fun createDeclarationProvider(searchScope: GlobalSearchScope): KotlinDeclarationProvider { + return KotlinStaticDeclarationProvider(searchScope, files) + } } \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/KtPackageProviderTestImpl.kt b/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/KotlinStaticPackageProvider.kt similarity index 71% rename from idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/KtPackageProviderTestImpl.kt rename to analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/KotlinStaticPackageProvider.kt index 48caefb97b5..438e715301e 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/KtPackageProviderTestImpl.kt +++ b/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/KotlinStaticPackageProvider.kt @@ -3,19 +3,19 @@ * 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.test.base +package org.jetbrains.kotlin.analysis.providers.impl import com.intellij.psi.search.GlobalSearchScope -import org.jetbrains.kotlin.idea.fir.low.level.api.KtPackageProvider +import org.jetbrains.kotlin.analysis.providers.KotlinPackageProvider +import org.jetbrains.kotlin.analysis.providers.KotlinPackageProviderFactory import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtFile -internal class KtPackageProviderTestImpl( +public class KotlinStaticPackageProvider( scope: GlobalSearchScope, files: Collection -) : KtPackageProvider() { - +) : KotlinPackageProvider() { private val packageToSubPackageNames: Map> = run { val filesInScope = files.filter { scope.contains(it.virtualFile) } val packages = mutableMapOf>() @@ -37,4 +37,10 @@ internal class KtPackageProviderTestImpl( override fun getKotlinSubPackageFqNames(packageFqName: FqName): Set { return packageToSubPackageNames[packageFqName] ?: emptySet() } +} + +public class KotlinStaticPackageProviderFactory(private val files: Collection) : KotlinPackageProviderFactory() { + override fun createPackageProvider(searchScope: GlobalSearchScope): KotlinPackageProvider { + return KotlinStaticPackageProvider(searchScope, files) + } } \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 2ea09d0673b..1fcdcb9c228 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -298,6 +298,7 @@ extra["compilerArtifactsForIde"] = listOf( ":prepare:ide-plugin-dependencies:high-level-api-for-ide", ":prepare:ide-plugin-dependencies:high-level-api-fir-for-ide", ":prepare:ide-plugin-dependencies:high-level-api-fir-tests-for-ide", + ":prepare:ide-plugin-dependencies:analysis-api-providers-for-ide", ":kotlin-script-runtime", ":kotlin-script-util", ":kotlin-scripting-common", diff --git a/generators/frontend-api-generator/tests/org/jetbrains/kotlin/generators/tests/frontend/api/GenerateTests.kt b/generators/frontend-api-generator/tests/org/jetbrains/kotlin/generators/tests/frontend/api/GenerateTests.kt index 2ec3f51c3e1..d3239a98cd6 100644 --- a/generators/frontend-api-generator/tests/org/jetbrains/kotlin/generators/tests/frontend/api/GenerateTests.kt +++ b/generators/frontend-api-generator/tests/org/jetbrains/kotlin/generators/tests/frontend/api/GenerateTests.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.resolve.AbstractInnerDeclarat import org.jetbrains.kotlin.spec.utils.GeneralConfiguration import org.jetbrains.kotlin.spec.utils.tasks.detectDirsWithTestsMapFileOnly import org.jetbrains.kotlin.test.generators.generateTestGroupSuiteWithJUnit5 +import org.jetbrains.kotlin.test.runners.AbstractFirDiagnosticTestSpec fun main(args: Array) { System.setProperty("java.awt.headless", "true") @@ -159,5 +160,14 @@ fun main(args: Array) { ) } } + testGroup(testsRoot = "compiler/fir/analysis-tests/tests-gen", testDataRoot = GeneralConfiguration.SPEC_TESTDATA_PATH) { + testClass { + model( + "diagnostics", + excludeDirs = listOf("helpers") + detectDirsWithTestsMapFileOnly("diagnostics"), + excludedPattern = excludedFirTestdataPattern + ) + } + } } } \ No newline at end of file diff --git a/idea/idea-frontend-api/build.gradle.kts b/idea/idea-frontend-api/build.gradle.kts index 23b3802ebf5..226e6efce4c 100644 --- a/idea/idea-frontend-api/build.gradle.kts +++ b/idea/idea-frontend-api/build.gradle.kts @@ -15,6 +15,7 @@ dependencies { compileOnly(project(":core:compiler.common")) compileOnly(project(":core:compiler.common.jvm")) compileOnly(project(":idea-frontend-fir:idea-fir-low-level-api")) + implementation(project(":analysis:analysis-api-providers")) compile(intellijCoreDep()) { includeJars("intellij-core", "guava", rootProject = rootProject) } } diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/tokens/AlwaysAccessibleValidityToken.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/tokens/AlwaysAccessibleValidityToken.kt index d1a6fb6e3a7..668b8c1c353 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/tokens/AlwaysAccessibleValidityToken.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/tokens/AlwaysAccessibleValidityToken.kt @@ -6,7 +6,7 @@ package org.jetbrains.kotlin.idea.frontend.api.tokens import com.intellij.openapi.project.Project -import org.jetbrains.kotlin.idea.fir.low.level.api.api.createProjectWideOutOfBlockModificationTracker +import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker import kotlin.reflect.KClass public class AlwaysAccessibleValidityToken(project: Project) : ValidityToken() { diff --git a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/tokens/ReadActionConfinementValidityToken.kt b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/tokens/ReadActionConfinementValidityToken.kt index 1a927f814a5..c8658ccfe64 100644 --- a/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/tokens/ReadActionConfinementValidityToken.kt +++ b/idea/idea-frontend-api/src/org/jetbrains/kotlin/idea/frontend/api/tokens/ReadActionConfinementValidityToken.kt @@ -7,7 +7,7 @@ package org.jetbrains.kotlin.idea.frontend.api.tokens import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.project.Project -import org.jetbrains.kotlin.idea.fir.low.level.api.api.createProjectWideOutOfBlockModificationTracker +import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker import org.jetbrains.kotlin.idea.frontend.api.* import kotlin.reflect.KClass diff --git a/idea/idea-frontend-fir/build.gradle.kts b/idea/idea-frontend-fir/build.gradle.kts index cb8a2e39aed..02b4c37ddf3 100644 --- a/idea/idea-frontend-fir/build.gradle.kts +++ b/idea/idea-frontend-fir/build.gradle.kts @@ -17,6 +17,7 @@ dependencies { compile(project(":idea-frontend-api")) compile(project(":compiler:light-classes")) compile(intellijCoreDep()) + implementation(project(":analysis:analysis-api-providers")) testCompile(projectTests(":idea-frontend-fir:idea-fir-low-level-api")) testCompile(projectTests(":compiler:tests-common")) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/build.gradle.kts b/idea/idea-frontend-fir/idea-fir-low-level-api/build.gradle.kts index 2f05e1796c0..1a2e33da29b 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/build.gradle.kts +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/build.gradle.kts @@ -17,7 +17,7 @@ dependencies { testCompile(project(":idea-frontend-fir")) implementation(project(":compiler:ir.psi2ir")) implementation(project(":compiler:fir:entrypoint")) - + implementation(project(":analysis:analysis-api-providers")) compile(intellijCoreDep()) { includeJars("intellij-core", "guava", rootProject = rootProject) } 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 deleted file mode 100644 index 168a22da515..00000000000 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/DeclarationProviderBase.kt +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2010-2021 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.analyzer.ModuleInfo -import org.jetbrains.kotlin.analyzer.ModuleSourceInfoBase -import org.jetbrains.kotlin.name.CallableId -import org.jetbrains.kotlin.name.ClassId -import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.psi.* - -abstract class DeclarationProvider { - abstract val searchScope: GlobalSearchScope - - abstract fun getClassesByClassId(classId: ClassId): Collection - abstract fun getTypeAliasesByClassId(classId: ClassId): Collection - - abstract fun getClassNamesInPackage(packageFqName: FqName): Set - 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 fun getFacadeFilesInPackage(packageFqName: FqName): Collection - abstract fun findFilesForFacade(facadeFqName: FqName): Collection -} - -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/FirIdeResolveStateService.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeResolveStateService.kt index 655783f1844..b3c826d3e29 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeResolveStateService.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeResolveStateService.kt @@ -9,10 +9,10 @@ import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.project.Project import com.intellij.openapi.roots.ProjectRootModificationTracker import org.jetbrains.annotations.TestOnly +import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.analyzer.ModuleSourceInfoBase import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState -import org.jetbrains.kotlin.idea.fir.low.level.api.api.createProjectWideOutOfBlockModificationTracker import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.FirLazyDeclarationResolver import org.jetbrains.kotlin.idea.fir.low.level.api.sessions.FirIdeSession import org.jetbrains.kotlin.idea.fir.low.level.api.sessions.FirIdeSessionProviderStorage 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 deleted file mode 100644 index c8cda8aa368..00000000000 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/KtPackageProvider.kt +++ /dev/null @@ -1,28 +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 com.intellij.openapi.components.ServiceManager -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.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 getKotlinSubPackageFqNames(packageFqName: FqName): 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/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 312e15a479f..693a990dc09 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 @@ -16,8 +16,6 @@ import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProvider import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider import org.jetbrains.kotlin.fir.java.FirJavaElementFinder -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.sessions.FirIdeSourcesSession import org.jetbrains.kotlin.load.kotlin.PackagePartProvider import org.jetbrains.kotlin.psi.KtElement diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/KotlinOutOfBlockModificationTrackerFactory.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/KotlinOutOfBlockModificationTrackerFactory.kt deleted file mode 100644 index 0168c522938..00000000000 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/KotlinOutOfBlockModificationTrackerFactory.kt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2010-2021 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.api - -import com.intellij.openapi.components.ServiceManager -import com.intellij.openapi.module.Module -import com.intellij.openapi.project.Project -import com.intellij.openapi.util.ModificationTracker -import org.jetbrains.annotations.TestOnly -import org.jetbrains.kotlin.analyzer.ModuleInfo -import org.jetbrains.kotlin.analyzer.ModuleSourceInfoBase - - -abstract class KotlinOutOfBlockModificationTrackerFactory { - abstract fun createProjectWideOutOfBlockModificationTracker(): ModificationTracker - abstract fun createModuleWithoutDependenciesOutOfBlockModificationTracker(moduleInfo: ModuleSourceInfoBase): ModificationTracker - abstract fun createLibraryOutOfBlockModificationTracker(): ModificationTracker - - @TestOnly - abstract fun incrementModificationsCount() -} - -fun Project.createProjectWideOutOfBlockModificationTracker() = - ServiceManager.getService(this, KotlinOutOfBlockModificationTrackerFactory::class.java).createProjectWideOutOfBlockModificationTracker() - -fun Project.createLibraryOutOfBlockModificationTracker() = - ServiceManager.getService(this, KotlinOutOfBlockModificationTrackerFactory::class.java).createLibraryOutOfBlockModificationTracker() - - -fun ModuleSourceInfoBase.createModuleWithoutDependenciesOutOfBlockModificationTracker(project: Project) = - ServiceManager.getService(project, KotlinOutOfBlockModificationTrackerFactory::class.java) - .createModuleWithoutDependenciesOutOfBlockModificationTracker(this) \ 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/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 0bd80e72087..64f52910796 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 @@ -6,6 +6,8 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.providers import com.intellij.openapi.project.Project +import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider +import org.jetbrains.kotlin.analysis.providers.KotlinPackageProvider import org.jetbrains.kotlin.analyzer.ModuleSourceInfoBase import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.NoMutableState @@ -19,8 +21,6 @@ import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider 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.file.builder.FirFileBuilder import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.ModuleFileCache import org.jetbrains.kotlin.name.ClassId @@ -35,8 +35,8 @@ internal class FirIdeProvider( val kotlinScopeProvider: FirKotlinScopeProvider, firFileBuilder: FirFileBuilder, val cache: ModuleFileCache, - private val declarationProvider: DeclarationProvider, - packageExistenceChecker: KtPackageProvider, + private val declarationProvider: KotlinDeclarationProvider, + packageProvider: KotlinPackageProvider, ) : FirProvider() { override val symbolProvider: FirSymbolProvider = SymbolProvider() @@ -44,7 +44,7 @@ internal class FirIdeProvider( cache, firFileBuilder, declarationProvider, - packageExistenceChecker, + packageProvider, ) override val isPhasedFirAllowed: Boolean get() = true 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 4d0316976c7..addb387fabf 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 @@ -6,14 +6,14 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.providers import com.google.common.collect.Sets +import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider +import org.jetbrains.kotlin.analysis.providers.KotlinPackageProvider import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration import org.jetbrains.kotlin.fir.declarations.FirFile 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.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 @@ -28,8 +28,8 @@ import java.util.* internal class FirProviderHelper( private val cache: ModuleFileCache, private val firFileBuilder: FirFileBuilder, - private val declarationProvider: DeclarationProvider, - private val packageProvider: KtPackageProvider, + private val declarationProvider: KotlinDeclarationProvider, + private val packageProvider: KotlinPackageProvider, ) { fun getFirClassifierByFqName(classId: ClassId): FirClassLikeDeclaration? { if (classId.isLocal) return null 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 035f50455dc..c10f0c17ed7 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 @@ -6,6 +6,8 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.sessions import com.intellij.openapi.project.Project +import org.jetbrains.kotlin.analysis.providers.createDeclarationProvider +import org.jetbrains.kotlin.analysis.providers.createPackageProvider import org.jetbrains.kotlin.analyzer.ModuleSourceInfoBase import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/sessions/FirIdeSessionProviderStorage.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/sessions/FirIdeSessionProviderStorage.kt index 76405d1425d..62c666aed84 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/sessions/FirIdeSessionProviderStorage.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/sessions/FirIdeSessionProviderStorage.kt @@ -10,6 +10,8 @@ import com.intellij.openapi.project.Project import kotlinx.collections.immutable.PersistentMap import kotlinx.collections.immutable.persistentMapOf import kotlinx.collections.immutable.toPersistentMap +import org.jetbrains.kotlin.analysis.providers.createLibrariesModificationTracker +import org.jetbrains.kotlin.analysis.providers.createModuleWithoutDependenciesOutOfBlockModificationTracker import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.analyzer.ModuleSourceInfoBase import org.jetbrains.kotlin.fir.BuiltinTypes @@ -18,8 +20,6 @@ import org.jetbrains.kotlin.fir.moduleData import org.jetbrains.kotlin.fir.session.FirModuleInfoBasedModuleData import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveStateConfigurator import org.jetbrains.kotlin.idea.fir.low.level.api.FirPhaseRunner -import org.jetbrains.kotlin.idea.fir.low.level.api.api.createLibraryOutOfBlockModificationTracker -import org.jetbrains.kotlin.idea.fir.low.level.api.api.createModuleWithoutDependenciesOutOfBlockModificationTracker import org.jetbrains.kotlin.idea.fir.low.level.api.util.addValueFor import org.jetbrains.kotlin.idea.fir.low.level.api.util.* import org.jetbrains.kotlin.idea.fir.low.level.api.util.executeWithoutPCE @@ -29,7 +29,7 @@ class FirIdeSessionProviderStorage(val project: Project) { private val sessionsCache = ConcurrentHashMap() private val configurator = ServiceManager.getService(project, FirModuleResolveStateConfigurator::class.java) - private val librariesCache by cachedValue(project, project.createLibraryOutOfBlockModificationTracker()) { LibrariesCache() } + private val librariesCache by cachedValue(project, project.createLibrariesModificationTracker()) { LibrariesCache() } fun getSessionProvider( rootModule: ModuleSourceInfoBase, diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/compiler/based/AbstractCompilerBasedTest.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/compiler/based/AbstractCompilerBasedTest.kt index c2e71e0383a..c2ab37813c1 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/compiler/based/AbstractCompilerBasedTest.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/compiler/based/AbstractCompilerBasedTest.kt @@ -12,6 +12,12 @@ import com.intellij.openapi.util.Disposer import com.intellij.psi.PsiElementFinder import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.ProjectScope +import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProviderFactory +import org.jetbrains.kotlin.analysis.providers.KotlinModificationTrackerFactory +import org.jetbrains.kotlin.analysis.providers.KotlinPackageProviderFactory +import org.jetbrains.kotlin.analysis.providers.impl.KotlinStaticDeclarationProviderFactory +import org.jetbrains.kotlin.analysis.providers.impl.KotlinStaticModificationTrackerFactory +import org.jetbrains.kotlin.analysis.providers.impl.KotlinStaticPackageProviderFactory import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.analyzer.ModuleSourceInfoBase import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport @@ -29,9 +35,6 @@ import org.jetbrains.kotlin.fir.session.FirModuleInfoBasedModuleData import org.jetbrains.kotlin.idea.asJava.IDEKotlinAsJavaFirSupport 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.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.KtPackageProviderTestImpl import org.jetbrains.kotlin.idea.fir.low.level.api.test.base.SealedClassInheritorsProviderTestImpl import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE import org.jetbrains.kotlin.idea.frontend.api.InvalidWayOfUsingAnalysisSession @@ -298,19 +301,11 @@ fun MockProject.registerTestServices( ) registerService(FirIdeResolveStateService::class.java) registerService( - KotlinOutOfBlockModificationTrackerFactory::class.java, - KotlinOutOfBlockModificationTrackerFactoryTestImpl::class.java + KotlinModificationTrackerFactory::class.java, + KotlinStaticModificationTrackerFactory::class.java ) - registerService(KtDeclarationProviderFactory::class.java, object : KtDeclarationProviderFactory() { - override fun createDeclarationProvider(searchScope: GlobalSearchScope): DeclarationProvider { - return DeclarationProviderTestImpl(searchScope, allKtFiles.filter { searchScope.contains(it.virtualFile) }) - } - }) - registerService(KtPackageProviderFactory::class.java, object : KtPackageProviderFactory() { - override fun createPackageProvider(searchScope: GlobalSearchScope): KtPackageProvider { - return KtPackageProviderTestImpl(searchScope, allKtFiles.filter { searchScope.contains(it.virtualFile) }) - } - }) + registerService(KotlinDeclarationProviderFactory::class.java, KotlinStaticDeclarationProviderFactory(allKtFiles)) + registerService(KotlinPackageProviderFactory::class.java, KotlinStaticPackageProviderFactory(allKtFiles)) reRegisterJavaElementFinder(this) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/IDEKotlinAsJavaFirSupport.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/IDEKotlinAsJavaFirSupport.kt index b12d56e2b04..4742bd68639 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/IDEKotlinAsJavaFirSupport.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/IDEKotlinAsJavaFirSupport.kt @@ -20,8 +20,6 @@ import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName import org.jetbrains.kotlin.idea.asJava.classes.getOrCreateFirLightClass import org.jetbrains.kotlin.idea.asJava.classes.getOrCreateFirLightFacade import org.jetbrains.kotlin.idea.fir.low.level.api.api.getModuleInfo -import org.jetbrains.kotlin.idea.fir.low.level.api.createDeclarationProvider -import org.jetbrains.kotlin.idea.fir.low.level.api.createPackageProvider import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.parentOrNull @@ -29,6 +27,8 @@ import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtScript import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty +import org.jetbrains.kotlin.analysis.providers.createDeclarationProvider +import org.jetbrains.kotlin.analysis.providers.createPackageProvider class IDEKotlinAsJavaFirSupport(private val project: Project) : KotlinAsJavaSupport() { diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightClassBase.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightClassBase.kt index 2e58ef509a6..190a6a1c1f4 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightClassBase.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/FirLightClassBase.kt @@ -32,13 +32,13 @@ import com.intellij.psi.scope.PsiScopeProcessor import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.PsiUtil import org.jetbrains.annotations.NonNls +import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker import org.jetbrains.kotlin.asJava.classes.KotlinClassInnerStuffCache import org.jetbrains.kotlin.asJava.classes.KotlinClassInnerStuffCache.Companion.processDeclarationsInEnum import org.jetbrains.kotlin.asJava.classes.KtLightClass import org.jetbrains.kotlin.asJava.classes.cannotModify import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.idea.KotlinLanguage -import org.jetbrains.kotlin.idea.fir.low.level.api.api.createProjectWideOutOfBlockModificationTracker import org.jetbrains.kotlin.idea.frontend.api.tokens.HackToForceAllowRunningAnalyzeOnEDT import org.jetbrains.kotlin.idea.frontend.api.tokens.hackyAllowRunningOnEdt import javax.swing.Icon diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/firLightClassUtils.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/firLightClassUtils.kt index 21293353588..600e1b0deb4 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/firLightClassUtils.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/classes/firLightClassUtils.kt @@ -9,6 +9,7 @@ import com.intellij.psi.PsiManager import com.intellij.psi.PsiReferenceList import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValuesManager +import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker import org.jetbrains.kotlin.asJava.classes.* import org.jetbrains.kotlin.asJava.elements.KtLightField import org.jetbrains.kotlin.asJava.elements.KtLightMethod @@ -16,7 +17,6 @@ import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.idea.asJava.* -import org.jetbrains.kotlin.idea.fir.low.level.api.api.createProjectWideOutOfBlockModificationTracker import org.jetbrains.kotlin.idea.frontend.api.tokens.HackToForceAllowRunningAnalyzeOnEDT import org.jetbrains.kotlin.idea.frontend.api.fir.analyzeWithSymbolAsContext import org.jetbrains.kotlin.idea.frontend.api.tokens.hackyAllowRunningOnEdt 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 2559f632a8a..06637cdf7f1 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 @@ -8,10 +8,10 @@ package org.jetbrains.kotlin.idea.fir import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.kotlin.analysis.providers.createDeclarationProvider import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.* 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.name.ClassId import org.jetbrains.kotlin.name.FqName diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtFirAnalysisSessionProvider.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtFirAnalysisSessionProvider.kt index 9c9b5bb0cad..be855147895 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtFirAnalysisSessionProvider.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtFirAnalysisSessionProvider.kt @@ -11,8 +11,8 @@ import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValuesManager import com.intellij.psi.util.PsiModificationTracker import org.jetbrains.annotations.TestOnly +import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState -import org.jetbrains.kotlin.idea.fir.low.level.api.api.createProjectWideOutOfBlockModificationTracker import org.jetbrains.kotlin.idea.fir.low.level.api.api.getResolveState import org.jetbrains.kotlin.idea.frontend.api.* import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken 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 c109164b58c..3c9701bfe4a 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.idea.frontend.api.fir import com.intellij.openapi.project.Project import com.intellij.psi.JavaPsiFacade import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.kotlin.analysis.providers.createPackageProvider import org.jetbrains.kotlin.builtins.functions.FunctionClassKind import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.* @@ -25,7 +26,6 @@ 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.KtStarProjectionTypeArgument import org.jetbrains.kotlin.idea.frontend.api.KtTypeArgument import org.jetbrains.kotlin.idea.frontend.api.KtTypeArgumentWithVariance @@ -114,7 +114,7 @@ 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 + private val packageProvider = project.createPackageProvider(GlobalSearchScope.allScope(project))//todo scope fun createPackageSymbolIfOneExists(packageFqName: FqName): KtFirPackageSymbol? { val exists = 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 12bbfd85889..1c650a0ae3c 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 @@ -8,9 +8,9 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.scopes import com.intellij.openapi.project.Project import com.intellij.psi.* import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.kotlin.analysis.providers.createDeclarationProvider +import org.jetbrains.kotlin.analysis.providers.createPackageProvider import org.jetbrains.kotlin.fir.scopes.impl.FirPackageMemberScope -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 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 5b8925ebaff..d9f2fce04cb 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 @@ -7,11 +7,11 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.scopes import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.kotlin.analysis.providers.createDeclarationProvider 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.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached 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 bc4c675bcc4..b70655b1025 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,7 +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.analysis.providers.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 diff --git a/idea/idea-frontend-fir/tests/org/jetbrains/kotlin/idea/fir/frontend/api/symbols/AbstractSymbolTest.kt b/idea/idea-frontend-fir/tests/org/jetbrains/kotlin/idea/fir/frontend/api/symbols/AbstractSymbolTest.kt index c3860829525..254fcb8fc1b 100644 --- a/idea/idea-frontend-fir/tests/org/jetbrains/kotlin/idea/fir/frontend/api/symbols/AbstractSymbolTest.kt +++ b/idea/idea-frontend-fir/tests/org/jetbrains/kotlin/idea/fir/frontend/api/symbols/AbstractSymbolTest.kt @@ -6,9 +6,9 @@ package org.jetbrains.kotlin.idea.fir.frontend.api.symbols import com.intellij.openapi.components.ServiceManager +import org.jetbrains.kotlin.analysis.providers.KotlinModificationTrackerFactory import org.jetbrains.kotlin.idea.fir.analyseOnPooledThreadInReadAction import org.jetbrains.kotlin.idea.fir.frontend.api.test.framework.AbstractHLApiSingleFileTest -import org.jetbrains.kotlin.idea.fir.low.level.api.api.KotlinOutOfBlockModificationTrackerFactory import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession import org.jetbrains.kotlin.idea.frontend.api.symbols.DebugSymbolRenderer import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol @@ -77,7 +77,7 @@ abstract class AbstractSymbolTest : AbstractHLApiSingleFileTest() { } private fun doOutOfBlockModification(ktFile: KtFile) { - ServiceManager.getService(ktFile.project, KotlinOutOfBlockModificationTrackerFactory::class.java) + ServiceManager.getService(ktFile.project, KotlinModificationTrackerFactory::class.java) .incrementModificationsCount() } } diff --git a/prepare/ide-plugin-dependencies/analysis-api-providers-for-ide/build.gradle.kts b/prepare/ide-plugin-dependencies/analysis-api-providers-for-ide/build.gradle.kts new file mode 100644 index 00000000000..cab3c811a06 --- /dev/null +++ b/prepare/ide-plugin-dependencies/analysis-api-providers-for-ide/build.gradle.kts @@ -0,0 +1,5 @@ +plugins { + kotlin("jvm") +} + +publishJarsForIde(listOf(":analysis:analysis-api-providers")) diff --git a/settings.gradle b/settings.gradle index 379ab70b6eb..ccb12ea8752 100644 --- a/settings.gradle +++ b/settings.gradle @@ -326,7 +326,8 @@ if (!buildProperties.inJpsBuildIdeaSync) { ":prepare:ide-plugin-dependencies:low-level-api-fir-for-ide", ":prepare:ide-plugin-dependencies:high-level-api-for-ide", ":prepare:ide-plugin-dependencies:high-level-api-fir-for-ide", - ":prepare:ide-plugin-dependencies:high-level-api-fir-tests-for-ide" + ":prepare:ide-plugin-dependencies:high-level-api-fir-tests-for-ide", + ":prepare:ide-plugin-dependencies:analysis-api-providers-for-ide" } void intellij(String imlPath) { @@ -367,6 +368,7 @@ if (attachedIntellijVersion == "212") { // Latest available platform in scope of intellij "j2k/new/tests/kotlin.j2k.new.tests.iml" intellij "j2k/new/kotlin.j2k.new.iml" intellij "fir-low-level-api-ide-impl/kotlin.fir.fir-low-level-api-ide-impl.iml" + intellij "analysis-api-providers-ide-impl/kotlin.fir.analysis-api-providers-ide-impl.iml" intellij "native/kotlin.native.iml" intellij "performance-tests/kotlin.performance-tests.iml" intellij "injection/kotlin.injection.iml" @@ -439,7 +441,8 @@ include ":generators:frontend-api-generator", ":idea-frontend-fir:idea-fir-low-level-api", ":idea-frontend-fir:idea-frontend-fir-generator", ":idea-frontend-fir", - ":idea-frontend-api" + ":idea-frontend-api", + ":analysis:analysis-api-providers" if (buildProperties.inJpsBuildIdeaSync) { include ":kotlin-stdlib:jps-build"