diff --git a/generators/build.gradle.kts b/generators/build.gradle.kts
index 38d941c1f9a..e9fa74ceb42 100644
--- a/generators/build.gradle.kts
+++ b/generators/build.gradle.kts
@@ -39,6 +39,7 @@ dependencies {
testCompile(projectTests(":idea:idea-maven"))
testCompile(projectTests(":idea:idea-fir"))
testCompile(projectTests(":idea:idea-frontend-fir"))
+ testCompile(projectTests(":idea:idea-frontend-fir:idea-fir-low-level-api"))
testCompile(projectTests(":j2k"))
testCompile(projectTests(":nj2k"))
if (Ide.IJ()) {
diff --git a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt
index 1567698f827..cbd9b7a7cb6 100644
--- a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt
+++ b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt
@@ -83,8 +83,8 @@ import org.jetbrains.kotlin.idea.editor.AbstractMultiLineStringIndentTest
import org.jetbrains.kotlin.idea.editor.backspaceHandler.AbstractBackspaceHandlerTest
import org.jetbrains.kotlin.idea.editor.quickDoc.AbstractQuickDocProviderTest
import org.jetbrains.kotlin.idea.filters.AbstractKotlinExceptionFilterTest
-import org.jetbrains.kotlin.idea.fir.AbstractFirLazyResolveTest
-import org.jetbrains.kotlin.idea.fir.AbstractFirMultiModuleResolveTest
+import org.jetbrains.kotlin.idea.fir.low.level.api.AbstractFirLazyResolveTest
+import org.jetbrains.kotlin.idea.fir.low.level.api.AbstractFirMultiModuleResolveTest
import org.jetbrains.kotlin.idea.fir.AbstractKtDeclarationAndFirDeclarationEqualityChecker
import org.jetbrains.kotlin.idea.folding.AbstractKotlinFoldingTest
import org.jetbrains.kotlin.idea.hierarchy.AbstractHierarchyTest
diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/checkers/AbstractFirPsiCheckerTest.kt b/idea/idea-fir/tests/org/jetbrains/kotlin/checkers/AbstractFirPsiCheckerTest.kt
index e4bc9bcd7bf..8f5778849fa 100644
--- a/idea/idea-fir/tests/org/jetbrains/kotlin/checkers/AbstractFirPsiCheckerTest.kt
+++ b/idea/idea-fir/tests/org/jetbrains/kotlin/checkers/AbstractFirPsiCheckerTest.kt
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.checkers
import com.intellij.rt.execution.junit.FileComparisonFailure
-import org.jetbrains.kotlin.idea.fir.FirResolution
import org.jetbrains.kotlin.idea.test.withCustomCompilerOptions
import org.jetbrains.kotlin.test.InTextDirectivesUtils
import java.io.File
diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/resolve/AbstractFirReferenceResolveTest.kt b/idea/idea-fir/tests/org/jetbrains/kotlin/idea/resolve/AbstractFirReferenceResolveTest.kt
index 96d1941d8e1..e38d13b9d7f 100644
--- a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/resolve/AbstractFirReferenceResolveTest.kt
+++ b/idea/idea-fir/tests/org/jetbrains/kotlin/idea/resolve/AbstractFirReferenceResolveTest.kt
@@ -5,12 +5,10 @@
package org.jetbrains.kotlin.idea.resolve
-import com.intellij.testFramework.LightProjectDescriptor
import org.jetbrains.kotlin.idea.completion.test.configureWithExtraFile
-import org.jetbrains.kotlin.idea.fir.FirResolution
+import org.jetbrains.kotlin.idea.fir.low.level.api.FirResolution
import org.jetbrains.kotlin.idea.test.KotlinLightProjectDescriptor
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
-import org.jetbrains.kotlin.idea.test.ProjectDescriptorWithStdlibSources
import org.jetbrains.kotlin.test.InTextDirectivesUtils
abstract class AbstractFirReferenceResolveTest : AbstractReferenceResolveTest() {
diff --git a/idea/idea-frontend-fir/build.gradle.kts b/idea/idea-frontend-fir/build.gradle.kts
index eb6cb72bbe2..f9b563f4fb5 100644
--- a/idea/idea-frontend-fir/build.gradle.kts
+++ b/idea/idea-frontend-fir/build.gradle.kts
@@ -13,6 +13,7 @@ dependencies {
compile(project(":compiler:fir:checkers"))
compile(project(":compiler:fir:java"))
compile(project(":compiler:fir:jvm"))
+ compile(project(":idea:idea-frontend-fir:idea-fir-low-level-api"))
compile(intellijDep())
compile(intellijCoreDep())
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
new file mode 100644
index 00000000000..eb6cb72bbe2
--- /dev/null
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/build.gradle.kts
@@ -0,0 +1,48 @@
+plugins {
+ kotlin("jvm")
+ id("jps-compatible")
+}
+
+dependencies {
+ compile(project(":compiler:psi"))
+ compile(project(":idea:idea-frontend-independent"))
+ compile(project(":idea:idea-frontend-api"))
+ compile(project(":idea:idea-core"))
+ compile(project(":compiler:fir:fir2ir"))
+ compile(project(":compiler:fir:resolve"))
+ compile(project(":compiler:fir:checkers"))
+ compile(project(":compiler:fir:java"))
+ compile(project(":compiler:fir:jvm"))
+ compile(intellijDep())
+ compile(intellijCoreDep())
+
+//
+ compile(project(":idea:idea-core"))
+//
+
+ testCompile(toolsJar())
+ testCompile(projectTests(":idea"))
+ testCompile(projectTests(":compiler:tests-common"))
+ testCompile(projectTests(":idea:idea-test-framework"))
+ testCompile(project(":kotlin-test:kotlin-test-junit"))
+ testCompile(commonDep("junit:junit"))
+
+ Platform[192].orHigher {
+ compile(intellijPluginDep("java"))
+ }
+}
+
+sourceSets {
+ "main" { projectDefault() }
+ "test" { projectDefault() }
+}
+
+if (rootProject.findProperty("idea.fir.plugin") == "true") {
+ projectTest {
+ dependsOn(":dist")
+ workingDir = rootDir
+ }
+}
+
+testsJar()
+
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirIdeDiagnosticsCollector.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeDiagnosticsCollector.kt
similarity index 87%
rename from idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirIdeDiagnosticsCollector.kt
rename to idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeDiagnosticsCollector.kt
index ca74b167115..95db9663853 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirIdeDiagnosticsCollector.kt
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeDiagnosticsCollector.kt
@@ -3,7 +3,7 @@
* 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
+package org.jetbrains.kotlin.idea.fir.low.level.api
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnostic
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirPsiDiagnostic
import org.jetbrains.kotlin.psi.KtElement
-class FirIdeDiagnosticsCollector(session: FirSession, private val resolveState: FirModuleResolveState) : AbstractDiagnosticCollector(session) {
+internal class FirIdeDiagnosticsCollector(session: FirSession, private val resolveState: FirModuleResolveState) : AbstractDiagnosticCollector(session) {
init {
registerAllComponents()
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirIdeJavaModuleBasedSession.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeJavaModuleBasedSession.kt
similarity index 96%
rename from idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirIdeJavaModuleBasedSession.kt
rename to idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeJavaModuleBasedSession.kt
index e13945714ed..46b4c1a4a12 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirIdeJavaModuleBasedSession.kt
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeJavaModuleBasedSession.kt
@@ -3,7 +3,7 @@
* 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
+package org.jetbrains.kotlin.idea.fir.low.level.api
import com.intellij.openapi.project.Project
import com.intellij.psi.search.GlobalSearchScope
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.fir.resolve.scopes.wrapScopeWithJvmMapped
import org.jetbrains.kotlin.fir.scopes.KotlinScopeProvider
-class FirIdeJavaModuleBasedSession(
+internal class FirIdeJavaModuleBasedSession(
moduleInfo: ModuleInfo,
sessionProvider: FirProjectSessionProvider
) : FirModuleBasedSession(moduleInfo, sessionProvider) {
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirIdeModuleDependenciesSymbolProvider.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeModuleDependenciesSymbolProvider.kt
similarity index 95%
rename from idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirIdeModuleDependenciesSymbolProvider.kt
rename to idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeModuleDependenciesSymbolProvider.kt
index 1072f06be1b..0c26f5d485f 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirIdeModuleDependenciesSymbolProvider.kt
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeModuleDependenciesSymbolProvider.kt
@@ -3,7 +3,7 @@
* 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
+package org.jetbrains.kotlin.idea.fir.low.level.api
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirDependenciesSymbolProviderImpl
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.idea.caches.project.isLibraryClasses
import org.jetbrains.kotlin.idea.caches.resolve.IDEPackagePartProvider
-class FirIdeModuleDependenciesSymbolProvider(
+internal class FirIdeModuleDependenciesSymbolProvider(
session: FirIdeJavaModuleBasedSession
) : FirDependenciesSymbolProviderImpl(session) {
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirIdeProvider.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeProvider.kt
similarity index 97%
rename from idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirIdeProvider.kt
rename to idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeProvider.kt
index 86abcf871c2..1d909eb9ae5 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirIdeProvider.kt
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeProvider.kt
@@ -3,7 +3,7 @@
* 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
+package org.jetbrains.kotlin.idea.fir.low.level.api
import com.intellij.openapi.progress.ProcessCanceledException
import com.intellij.openapi.project.Project
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtFile
-class FirIdeProvider(
+internal class FirIdeProvider(
val project: Project,
val scope: GlobalSearchScope,
val session: FirSession,
@@ -163,4 +163,4 @@ class FirIdeProvider(
}
}
-val FirSession.firIdeProvider: FirIdeProvider by FirSession.sessionComponentAccessor()
\ No newline at end of file
+internal val FirSession.firIdeProvider: FirIdeProvider by FirSession.sessionComponentAccessor()
\ No newline at end of file
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirIdeResolveStateService.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeResolveStateService.kt
similarity index 92%
rename from idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirIdeResolveStateService.kt
rename to idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeResolveStateService.kt
index 10da0c0c186..6398c393c34 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirIdeResolveStateService.kt
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirIdeResolveStateService.kt
@@ -3,7 +3,7 @@
* 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
+package org.jetbrains.kotlin.idea.fir.low.level.api
import com.intellij.openapi.components.ServiceManager
import com.intellij.openapi.project.Project
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.analyzer.TrackableModuleInfo
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
import org.jetbrains.kotlin.idea.caches.project.IdeaModuleInfo
-interface FirIdeResolveStateService {
+internal interface FirIdeResolveStateService {
companion object {
fun getInstance(project: Project): FirIdeResolveStateService =
ServiceManager.getService(project, FirIdeResolveStateService::class.java)!!
@@ -32,7 +32,7 @@ private class FirModuleData(val state: FirModuleResolveState, val modificationTr
}
}
-class FirIdeResolveStateServiceImpl(val project: Project) : FirIdeResolveStateService {
+internal class FirIdeResolveStateServiceImpl(val project: Project) : FirIdeResolveStateService {
private val stateCache = mutableMapOf()
private fun createResolveState(): FirModuleResolveState {
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirModuleResolveState.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveState.kt
similarity index 93%
rename from idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirModuleResolveState.kt
rename to idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveState.kt
index 134a7770664..a4428c5ca7c 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirModuleResolveState.kt
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveState.kt
@@ -3,7 +3,7 @@
* 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
+package org.jetbrains.kotlin.idea.fir.low.level.api
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElement
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.idea.caches.project.getModuleInfo
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtFile
-interface FirModuleResolveState {
+internal interface FirModuleResolveState {
val sessionProvider: FirProjectSessionProvider
fun getSession(psi: KtElement): FirSession {
@@ -65,7 +65,7 @@ interface FirModuleResolveState {
fun setDiagnosticsForFile(file: KtFile, fir: FirFile, diagnostics: Iterable> = emptyList())
}
-class FirModuleResolveStateImpl(override val sessionProvider: FirProjectSessionProvider) : FirModuleResolveState {
+internal class FirModuleResolveStateImpl(override val sessionProvider: FirProjectSessionProvider) : FirModuleResolveState {
private val cache = mutableMapOf()
private val diagnosticCache = mutableMapOf>()
@@ -115,5 +115,5 @@ class FirModuleResolveStateImpl(override val sessionProvider: FirProjectSessionP
}
}
-fun KtElement.firResolveState(): FirModuleResolveState =
+internal fun KtElement.firResolveState(): FirModuleResolveState =
FirIdeResolveStateService.getInstance(project).getResolveState(getModuleInfo())
\ No newline at end of file
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirResolution.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirResolution.kt
similarity index 93%
rename from idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirResolution.kt
rename to idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirResolution.kt
index 84620b71d58..a01c1837cf7 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirResolution.kt
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirResolution.kt
@@ -3,7 +3,7 @@
* 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
+package org.jetbrains.kotlin.idea.fir.low.level.api
import com.intellij.openapi.util.registry.Registry
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirResolutionApi.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirResolutionApi.kt
similarity index 95%
rename from idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirResolutionApi.kt
rename to idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirResolutionApi.kt
index e88521f9c2f..78e0a8cf236 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirResolutionApi.kt
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirResolutionApi.kt
@@ -3,9 +3,8 @@
* 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
+package org.jetbrains.kotlin.idea.fir.low.level.api
-import com.intellij.openapi.progress.ProcessCanceledException
import com.intellij.openapi.progress.ProgressIndicatorProvider
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirElement
@@ -73,7 +72,7 @@ private fun FirFile.findCallableMember(
?: error("Cannot find FIR callable declaration ${CallableId(packageFqName, klassFqName, declName)}")
}
-fun KtCallableDeclaration.getOrBuildFir(
+internal fun KtCallableDeclaration.getOrBuildFir(
state: FirModuleResolveState,
phase: FirResolvePhase = FirResolvePhase.DECLARATIONS
): FirCallableDeclaration<*> {
@@ -97,7 +96,7 @@ fun KtCallableDeclaration.getOrBuildFir(
return firMemberDeclaration
}
-fun KtClassOrObject.getOrBuildFir(
+internal fun KtClassOrObject.getOrBuildFir(
state: FirModuleResolveState,
phase: FirResolvePhase = FirResolvePhase.DECLARATIONS
): FirMemberDeclaration {
@@ -131,7 +130,7 @@ private fun KtFile.getOrBuildRawFirFile(state: FirModuleResolveState): Pair KtElement.getOrBuildFirSafe(
- state: FirModuleResolveState,
- phase: FirResolvePhase = FirResolvePhase.BODY_RESOLVE
-) = getOrBuildFir(state, phase) as? E
-
private fun KtElement.getNonLocalContainingDeclarationWithFqName(): KtDeclaration? {
var container = parent
@@ -247,7 +241,7 @@ private fun KtElement.getNonLocalContainingDeclarationWithFqName(): KtDeclaratio
return null
}
-fun KtElement.getOrBuildFir(
+internal fun KtElement.getOrBuildFir(
state: FirModuleResolveState,
phase: FirResolvePhase = FirResolvePhase.BODY_RESOLVE
): FirElement {
diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/LowLevelFirApiFacade.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/LowLevelFirApiFacade.kt
new file mode 100644
index 00000000000..cc3da64718c
--- /dev/null
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/LowLevelFirApiFacade.kt
@@ -0,0 +1,23 @@
+/*
+ * 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.diagnostics.Diagnostic
+import org.jetbrains.kotlin.fir.FirElement
+import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
+import org.jetbrains.kotlin.psi.KtElement
+
+object LowLevelFirApiFacade {
+ fun getOrBuildFirFor(element: KtElement, phase: FirResolvePhase): FirElement =
+ element.getOrBuildFir(element.firResolveState(), phase)
+
+ fun getDiagnosticsFor(element: KtElement): Collection {
+ val file = element.containingKtFile
+ val state = element.firResolveState()
+ file.getOrBuildFirWithDiagnostics(state)
+ return state.getDiagnostics(element)
+ }
+}
\ No newline at end of file
diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/fir/AbstractFirLazyResolveTest.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirLazyResolveTest.kt
similarity index 98%
rename from idea/idea-fir/tests/org/jetbrains/kotlin/idea/fir/AbstractFirLazyResolveTest.kt
rename to idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirLazyResolveTest.kt
index 5791a67c87f..8f56377e527 100644
--- a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/fir/AbstractFirLazyResolveTest.kt
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirLazyResolveTest.kt
@@ -3,7 +3,7 @@
* 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
+package org.jetbrains.kotlin.idea.fir.low.level.api
import com.google.gson.JsonObject
import com.google.gson.JsonParser
diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/fir/AbstractFirMultiModuleResolveTest.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirMultiModuleResolveTest.kt
similarity index 98%
rename from idea/idea-fir/tests/org/jetbrains/kotlin/idea/fir/AbstractFirMultiModuleResolveTest.kt
rename to idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirMultiModuleResolveTest.kt
index 66630e7c76a..22c2ccc58a6 100644
--- a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/fir/AbstractFirMultiModuleResolveTest.kt
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirMultiModuleResolveTest.kt
@@ -3,11 +3,9 @@
* 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
+package org.jetbrains.kotlin.idea.fir.low.level.api
import com.intellij.openapi.module.Module
-import com.intellij.openapi.module.ModuleManager
-import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.PsiFile
import com.intellij.psi.PsiManager
diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/fir/FirLazyResolveTestGenerated.java b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/FirLazyResolveTestGenerated.java
similarity index 97%
rename from idea/idea-fir/tests/org/jetbrains/kotlin/idea/fir/FirLazyResolveTestGenerated.java
rename to idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/FirLazyResolveTestGenerated.java
index 673e26d248b..b9d5f309390 100644
--- a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/fir/FirLazyResolveTestGenerated.java
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/FirLazyResolveTestGenerated.java
@@ -3,7 +3,7 @@
* 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;
+package org.jetbrains.kotlin.idea.fir.low.level.api;
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners;
@@ -17,7 +17,7 @@ import java.util.regex.Pattern;
/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */
@SuppressWarnings("all")
@TestMetadata("idea/testData/fir/lazyResolve")
-@TestDataPath("$PROJECT_ROOT")
+@TestDataPath("/")
@RunWith(JUnit3RunnerWithInners.class)
public class FirLazyResolveTestGenerated extends AbstractFirLazyResolveTest {
private void runTest(String testDataFilePath) throws Exception {
diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/fir/FirMultiModuleResolveTestGenerated.java b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/FirMultiModuleResolveTestGenerated.java
similarity index 98%
rename from idea/idea-fir/tests/org/jetbrains/kotlin/idea/fir/FirMultiModuleResolveTestGenerated.java
rename to idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/FirMultiModuleResolveTestGenerated.java
index 2a538f22bdd..39a40932b6e 100644
--- a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/fir/FirMultiModuleResolveTestGenerated.java
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/FirMultiModuleResolveTestGenerated.java
@@ -3,7 +3,7 @@
* 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;
+package org.jetbrains.kotlin.idea.fir.low.level.api;
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners;
@@ -17,7 +17,7 @@ import java.util.regex.Pattern;
/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */
@SuppressWarnings("all")
@TestMetadata("idea/testData/fir/multiModule")
-@TestDataPath("$PROJECT_ROOT")
+@TestDataPath("/")
@RunWith(JUnit3RunnerWithInners.class)
public class FirMultiModuleResolveTestGenerated extends AbstractFirMultiModuleResolveTest {
private void runTest(String testDataFilePath) throws Exception {
diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/fir/FirResolveStateTest.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/FirResolveStateTest.kt
similarity index 84%
rename from idea/idea-fir/tests/org/jetbrains/kotlin/idea/fir/FirResolveStateTest.kt
rename to idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/FirResolveStateTest.kt
index e1194d6326b..d0a432282c5 100644
--- a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/fir/FirResolveStateTest.kt
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/FirResolveStateTest.kt
@@ -3,9 +3,10 @@
* 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
+package org.jetbrains.kotlin.idea.fir.low.level.api
import org.jetbrains.kotlin.idea.AbstractResolveElementCacheTest
+import org.jetbrains.kotlin.idea.fir.low.level.api.firResolveState
class FirResolveStateTest : AbstractResolveElementCacheTest() {
override fun isFirPlugin(): Boolean = true
diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/fir/firTestUtils.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/firTestUtils.kt
similarity index 88%
rename from idea/idea-fir/tests/org/jetbrains/kotlin/idea/fir/firTestUtils.kt
rename to idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/firTestUtils.kt
index e14af0b4e22..2f37039d23f 100644
--- a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/fir/firTestUtils.kt
+++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/firTestUtils.kt
@@ -3,7 +3,7 @@
* 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
+package org.jetbrains.kotlin.idea.fir.low.level.api
import com.intellij.openapi.module.ModuleManager
import com.intellij.openapi.project.Project
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirUtils.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirUtils.kt
index bfbc5fa2a34..53834b6b6f6 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirUtils.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirUtils.kt
@@ -5,15 +5,36 @@
package org.jetbrains.kotlin.idea.fir
+import com.intellij.psi.util.parentOfType
+import org.jetbrains.kotlin.fir.FirElement
+import org.jetbrains.kotlin.fir.declarations.FirDeclaration
+import org.jetbrains.kotlin.fir.declarations.FirFile
+import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
-import org.jetbrains.kotlin.idea.references.KtReference
+import org.jetbrains.kotlin.idea.fir.low.level.api.LowLevelFirApiFacade
+import org.jetbrains.kotlin.psi.KtDeclaration
+import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.util.OperatorNameConventions
+fun KtElement.getOrBuildFir(
+ phase: FirResolvePhase = FirResolvePhase.BODY_RESOLVE
+) = LowLevelFirApiFacade.getOrBuildFirFor(this, phase)
+
+
+inline fun KtElement.getOrBuildFirSafe(
+ phase: FirResolvePhase = FirResolvePhase.BODY_RESOLVE
+) = LowLevelFirApiFacade.getOrBuildFirFor(this, phase) as? E
+
+
+val KtElement.session
+ get() = parentOfType()?.getOrBuildFirSafe()?.session
+ ?: containingKtFile.getOrBuildFirSafe()!!.session
+
fun FirFunctionCall.isImplicitFunctionCall(): Boolean {
if (dispatchReceiver !is FirQualifiedAccessExpression) return false
val resolvedCalleeSymbol = (calleeReference as? FirResolvedNamedReference)?.resolvedSymbol
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/AnalysisSessionFirImpl.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/AnalysisSessionFirImpl.kt
index c9fdab87d21..b30c6243b24 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/AnalysisSessionFirImpl.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/AnalysisSessionFirImpl.kt
@@ -20,18 +20,16 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.idea.fir.*
+import org.jetbrains.kotlin.idea.fir.low.level.api.LowLevelFirApiFacade
import org.jetbrains.kotlin.idea.frontend.api.*
import org.jetbrains.kotlin.idea.references.FirReferenceResolveHelper
import org.jetbrains.kotlin.idea.references.FirReferenceResolveHelper.toTargetPsi
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.types.model.KotlinTypeMarker
-class AnalysisSessionFirImpl internal constructor(
- private val state: FirModuleResolveState
-) : FrontendAnalysisSession() {
+class AnalysisSessionFirImpl : FrontendAnalysisSession() {
override fun getSmartCastedToTypes(expression: KtExpression): Collection? {
// TODO filter out not used smartcasts
@@ -41,7 +39,7 @@ class AnalysisSessionFirImpl internal constructor(
@OptIn(ExperimentalStdlibApi::class)
override fun getImplicitReceiverSmartCasts(expression: KtExpression): Collection {
// TODO filter out not used smartcasts
- val qualifiedExpression = expression.getOrBuildFir(state) as? FirQualifiedAccessExpression ?: return emptyList()
+ val qualifiedExpression = expression.getOrBuildFirSafe() ?: return emptyList()
if (qualifiedExpression.dispatchReceiver !is FirExpressionWithSmartcast
&& qualifiedExpression.extensionReceiver !is FirExpressionWithSmartcast
) return emptyList()
@@ -67,15 +65,13 @@ class AnalysisSessionFirImpl internal constructor(
override fun isSubclassOf(klass: KtClassOrObject, superClassId: ClassId): Boolean {
var result = false
forEachSubClass(klass.toFir() ?: return false) { type ->
- result = result || type.firClassLike(state.getSession(klass))?.symbol?.classId == superClassId
+ result = result || type.firClassLike(klass.session)?.symbol?.classId == superClassId
}
return result
}
- override fun getDiagnosticsForElement(element: KtElement): Collection {
- element.containingKtFile.getOrBuildFirWithDiagnostics(state)
- return state.getDiagnostics(element)
- }
+ override fun getDiagnosticsForElement(element: KtElement): Collection =
+ LowLevelFirApiFacade.getDiagnosticsFor(element)
override fun resolveCall(call: KtBinaryExpression): CallInfo? {
val firCall = call.toFir() ?: return null
@@ -88,7 +84,7 @@ class AnalysisSessionFirImpl internal constructor(
}
private fun resolveCall(firCall: FirFunctionCall, callExpression: KtExpression): CallInfo? {
- val session = callExpression.getSession()
+ val session = callExpression.session
val resolvedFunctionPsi = firCall.calleeReference.toTargetPsi(session)
val resolvedCalleeSymbol = (firCall.calleeReference as? FirResolvedNamedReference)?.resolvedSymbol
return when {
@@ -124,10 +120,8 @@ class AnalysisSessionFirImpl internal constructor(
else -> null
}
- private fun KtElement.getSession() = state.getSession(this)
-
private inline fun KtElement.toFir(phase: FirResolvePhase = FirResolvePhase.BODY_RESOLVE): F? =
- getOrBuildFir(state, phase) as? F
+ getOrBuildFir(phase) as? F
private fun forEachSubClass(firClass: FirClass<*>, action: (FirResolvedTypeRef) -> Unit) {
firClass.superTypeRefs.forEach { superType ->
@@ -137,9 +131,6 @@ class AnalysisSessionFirImpl internal constructor(
}
companion object {
- fun forElement(element: KtElement): FrontendAnalysisSession =
- AnalysisSessionFirImpl(element.firResolveState())
-
private fun KotlinTypeMarker.asConeType(): ConeKotlinType =
this as? ConeKotlinType ?: error("$this should be ConeKotlinType")
@@ -150,5 +141,4 @@ class AnalysisSessionFirImpl internal constructor(
)
}
}
-
}
\ No newline at end of file
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/highlighter/KotlinFirPsiChecker.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/highlighter/KotlinFirPsiChecker.kt
index 6e67469d43b..4320950886f 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/highlighter/KotlinFirPsiChecker.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/highlighter/KotlinFirPsiChecker.kt
@@ -21,7 +21,7 @@ class KotlinFirPsiChecker : AbstractKotlinPsiChecker() {
override fun annotateElement(element: PsiElement, containingFile: KtFile, holder: AnnotationHolder) {
if (element !is KtElement) return
- val analysisSession = AnalysisSessionFirImpl.forElement(element)
+ val analysisSession = AnalysisSessionFirImpl()
highlightDiagnostics(element, analysisSession, holder)
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirKtReference.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirKtReference.kt
index e48ffc119b2..702e997d76a 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirKtReference.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirKtReference.kt
@@ -6,16 +6,10 @@
package org.jetbrains.kotlin.idea.references
import com.intellij.psi.PsiElement
-import org.jetbrains.kotlin.fir.FirSession
-import org.jetbrains.kotlin.idea.fir.FirModuleResolveState
import org.jetbrains.kotlin.idea.frontend.api.fir.AnalysisSessionFirImpl
interface FirKtReference : KtReference {
- fun getResolvedToPsi(
- analysisSession: AnalysisSessionFirImpl,
- session: FirSession,
- state: FirModuleResolveState
- ): Collection
+ fun getResolvedToPsi(analysisSession: AnalysisSessionFirImpl): Collection
override val resolver get() = KtFirReferenceResolver
}
\ No newline at end of file
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirReferenceResolveHelper.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirReferenceResolveHelper.kt
index 4c8ed35dcd9..af5079199c2 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirReferenceResolveHelper.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirReferenceResolveHelper.kt
@@ -74,13 +74,11 @@ object FirReferenceResolveHelper {
}
}
- internal fun resolveSimpleNameReference(
- ref: KtSimpleNameReferenceFirImpl,
- session: FirSession,
- state: FirModuleResolveState
- ): Collection {
+ internal fun resolveSimpleNameReference(ref: KtSimpleNameReferenceFirImpl): Collection {
val expression = ref.expression
- when (val fir = expression.getOrBuildFir(state)) {
+ val fir = expression.getOrBuildFir()
+ val session = expression.session
+ when (fir) {
is FirResolvable -> {
val calleeReference =
if (fir is FirFunctionCall
@@ -109,7 +107,7 @@ object FirReferenceResolveHelper {
parent = parent.parent as? KtDotQualifiedExpression
continue
}
- val parentFir = selectorExpression.getOrBuildFir(state)
+ val parentFir = selectorExpression.getOrBuildFir()
if (parentFir is FirQualifiedAccess) {
return listOfNotNull(classId.toTargetPsi(session, parentFir.calleeReference))
}
@@ -177,7 +175,7 @@ object FirReferenceResolveHelper {
parent = parent.parent as? KtDotQualifiedExpression
continue
}
- val parentFir = selectorExpression.getOrBuildFir(state)
+ val parentFir = selectorExpression.getOrBuildFir()
if (parentFir is FirResolvedQualifier) {
var classId = parentFir.classId
while (unresolvedCounter > 0) {
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirSimpleNameReference.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirSimpleNameReference.kt
index d763ddb1d68..4ca1aed037e 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirSimpleNameReference.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/FirSimpleNameReference.kt
@@ -6,8 +6,6 @@
package org.jetbrains.kotlin.idea.references
import com.intellij.psi.PsiElement
-import org.jetbrains.kotlin.fir.FirSession
-import org.jetbrains.kotlin.idea.fir.FirModuleResolveState
import org.jetbrains.kotlin.idea.frontend.api.fir.AnalysisSessionFirImpl
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtImportAlias
@@ -16,11 +14,7 @@ import org.jetbrains.kotlin.psi.KtSimpleNameExpression
internal class KtSimpleNameReferenceFirImpl(
expression: KtSimpleNameExpression
) : KtSimpleNameReference(expression), FirKtReference {
- override fun getResolvedToPsi(
- analysisSession: AnalysisSessionFirImpl,
- session: FirSession,
- state: FirModuleResolveState
- ) = FirReferenceResolveHelper.resolveSimpleNameReference(this, session, state)
+ override fun getResolvedToPsi(analysisSession: AnalysisSessionFirImpl) = FirReferenceResolveHelper.resolveSimpleNameReference(this)
override fun doCanBeReferenceTo(candidateTarget: PsiElement): Boolean {
return true // TODO
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtDestructuringDeclarationReferenceFirImpl.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtDestructuringDeclarationReferenceFirImpl.kt
index 83274d0802b..bb538d86ee1 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtDestructuringDeclarationReferenceFirImpl.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtDestructuringDeclarationReferenceFirImpl.kt
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.idea.references
import com.intellij.psi.PsiElement
-import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirProperty
import org.jetbrains.kotlin.fir.expressions.FirComponentCall
import org.jetbrains.kotlin.idea.fir.*
@@ -19,12 +18,10 @@ class KtDestructuringDeclarationReferenceFirImpl(
override fun canRename(): Boolean = false //todo
override fun getResolvedToPsi(
- analysisSession: AnalysisSessionFirImpl,
- session: FirSession,
- state: FirModuleResolveState
+ analysisSession: AnalysisSessionFirImpl
): Collection {
- val fir = expression.getOrBuildFirSafe(state) ?: return emptyList()
+ val fir = expression.getOrBuildFirSafe() ?: return emptyList()
val componentFunctionSymbol = (fir.initializer as? FirComponentCall)?.getCalleeSymbol() ?: return emptyList()
- return listOfNotNull(componentFunctionSymbol.fir.findPsi(session))
+ return listOfNotNull(componentFunctionSymbol.fir.findPsi(element.project))
}
}
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtFirReferenceResolver.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtFirReferenceResolver.kt
index 7b10e4f5688..ef778a18053 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtFirReferenceResolver.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtFirReferenceResolver.kt
@@ -9,7 +9,6 @@ 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.firResolveState
import org.jetbrains.kotlin.idea.frontend.api.fir.AnalysisSessionFirImpl
object KtFirReferenceResolver : ResolveCache.PolyVariantResolver {
@@ -18,11 +17,8 @@ object KtFirReferenceResolver : ResolveCache.PolyVariantResolver {
override fun resolve(ref: KtReference, incompleteCode: Boolean): Array {
check(ref is FirKtReference) { "reference should be FirKtReference, but was ${ref::class}" }
check(ref is AbstractKtReference<*>) { "reference should be AbstractKtReference, but was ${ref::class}" }
- val expression = ref.expression
- val state = expression.firResolveState()
- val session = state.getSession(expression)
- val analysisSession = AnalysisSessionFirImpl(state)
- val resolveToPsiElements = ref.getResolvedToPsi(analysisSession, session, state)
+ val analysisSession = AnalysisSessionFirImpl()
+ val resolveToPsiElements = ref.getResolvedToPsi(analysisSession)
return resolveToPsiElements.map { KotlinResolveResult(it) }.toTypedArray()
}
}
\ No newline at end of file
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtForLoopInReferenceFirImpl.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtForLoopInReferenceFirImpl.kt
index 4303d1de6bc..749306fb477 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtForLoopInReferenceFirImpl.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtForLoopInReferenceFirImpl.kt
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.fir.declarations.FirProperty
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.expressions.FirWhileLoop
-import org.jetbrains.kotlin.idea.fir.FirModuleResolveState
import org.jetbrains.kotlin.idea.fir.findPsi
import org.jetbrains.kotlin.idea.fir.getOrBuildFirSafe
import org.jetbrains.kotlin.idea.fir.getResolvedSymbolOfNameReference
@@ -20,11 +19,9 @@ import org.jetbrains.kotlin.psi.KtForExpression
open class KtForLoopInReferenceFirImpl(expression: KtForExpression) : KtForLoopInReference(expression), FirKtReference {
override fun getResolvedToPsi(
- analysisSession: AnalysisSessionFirImpl,
- session: FirSession,
- state: FirModuleResolveState
+ analysisSession: AnalysisSessionFirImpl
): Collection {
- val firLoop = expression.getOrBuildFirSafe(state) ?: return emptyList()
+ val firLoop = expression.getOrBuildFirSafe() ?: return emptyList()
val condition = firLoop.condition as? FirFunctionCall
val iterator = run {
val callee = (condition?.explicitReceiver as? FirQualifiedAccessExpression)?.calleeReference
@@ -32,10 +29,11 @@ open class KtForLoopInReferenceFirImpl(expression: KtForExpression) : KtForLoopI
}
val hasNext = condition?.calleeReference?.getResolvedSymbolOfNameReference()
val next = (firLoop.block.statements.firstOrNull() as? FirProperty?)?.getInitializerFunctionCall()
+ val project = element.project
return listOfNotNull(
- iterator?.fir?.findPsi(session),
- hasNext?.fir?.findPsi(session),
- next?.fir?.findPsi(session),
+ iterator?.fir?.findPsi(project),
+ hasNext?.fir?.findPsi(project),
+ next?.fir?.findPsi(project),
)
}
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtInvokeFunctionReferenceFirImpl.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtInvokeFunctionReferenceFirImpl.kt
index d0b5b7e85bf..8b9a33a0ff4 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtInvokeFunctionReferenceFirImpl.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtInvokeFunctionReferenceFirImpl.kt
@@ -6,8 +6,6 @@
package org.jetbrains.kotlin.idea.references
import com.intellij.psi.PsiElement
-import org.jetbrains.kotlin.fir.FirSession
-import org.jetbrains.kotlin.idea.fir.FirModuleResolveState
import org.jetbrains.kotlin.idea.frontend.api.VariableAsFunctionLikeCallInfo
import org.jetbrains.kotlin.idea.frontend.api.fir.AnalysisSessionFirImpl
import org.jetbrains.kotlin.psi.KtCallExpression
@@ -18,11 +16,7 @@ class KtInvokeFunctionReferenceFirImpl(expression: KtCallExpression) : KtInvokeF
TODO("Not yet implemented")
}
- override fun getResolvedToPsi(
- analysisSession: AnalysisSessionFirImpl,
- session: FirSession,
- state: FirModuleResolveState
- ): Collection {
+ override fun getResolvedToPsi(analysisSession: AnalysisSessionFirImpl): Collection {
val call = analysisSession.resolveCall(expression) ?: return emptyList()
if (call is VariableAsFunctionLikeCallInfo) {
return listOf(call.invokeFunction)
diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtPropertyDelegationMethodsReferenceFirImpl.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtPropertyDelegationMethodsReferenceFirImpl.kt
index 656cee68a2a..8d695f746be 100644
--- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtPropertyDelegationMethodsReferenceFirImpl.kt
+++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/references/KtPropertyDelegationMethodsReferenceFirImpl.kt
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.idea.references
import com.intellij.psi.PsiElement
-import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirProperty
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
@@ -21,17 +20,16 @@ class KtPropertyDelegationMethodsReferenceFirImpl(
element: KtPropertyDelegate
) : KtPropertyDelegationMethodsReference(element), FirKtReference {
override fun getResolvedToPsi(
- analysisSession: AnalysisSessionFirImpl,
- session: FirSession,
- state: FirModuleResolveState
+ analysisSession: AnalysisSessionFirImpl
): Collection {
- val property = (expression.parent as? KtElement)?.getOrBuildFirSafe(state) ?: return emptyList()
+ val property = (expression.parent as? KtElement)?.getOrBuildFirSafe() ?: return emptyList()
if (property.delegate == null) return emptyList()
val getValueSymbol = (property.getter?.singleStatementOfType()?.result as? FirFunctionCall)?.getCalleeSymbol()
val setValueSymbol = property.setter?.singleStatementOfType()?.getCalleeSymbol()
+ val project = element.project
return listOfNotNull(
- getValueSymbol?.fir?.findPsi(session),
- setValueSymbol?.fir?.findPsi(session)
+ getValueSymbol?.fir?.findPsi(project),
+ setValueSymbol?.fir?.findPsi(project)
)
}
diff --git a/idea/idea-frontend-fir/tests/org/jetbrains/kotlin/idea/fir/AbstractKtDeclarationAndFirDeclarationEqualityChecker.kt b/idea/idea-frontend-fir/tests/org/jetbrains/kotlin/idea/fir/AbstractKtDeclarationAndFirDeclarationEqualityChecker.kt
index 354018cb3f4..9ce7ca5a4c9 100644
--- a/idea/idea-frontend-fir/tests/org/jetbrains/kotlin/idea/fir/AbstractKtDeclarationAndFirDeclarationEqualityChecker.kt
+++ b/idea/idea-frontend-fir/tests/org/jetbrains/kotlin/idea/fir/AbstractKtDeclarationAndFirDeclarationEqualityChecker.kt
@@ -7,8 +7,6 @@ package org.jetbrains.kotlin.idea.fir
import com.intellij.openapi.util.io.FileUtil
import com.intellij.rt.execution.junit.FileComparisonFailure
-import junit.framework.Assert
-import junit.framework.ComparisonFailure
import org.jetbrains.kotlin.fir.declarations.FirFunction
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
import org.jetbrains.kotlin.psi.KtFile
@@ -21,9 +19,8 @@ abstract class AbstractKtDeclarationAndFirDeclarationEqualityChecker : KotlinLig
val file = File(path)
val ktFile = myFixture.configureByText(file.name, FileUtil.loadFile(file)) as KtFile
- val resolveState = ktFile.firResolveState()
ktFile.forEachDescendantOfType { ktFunction ->
- val firFunction = ktFunction.getOrBuildFir(resolveState) as FirFunction<*>
+ val firFunction = ktFunction.getOrBuildFir() as FirFunction<*>
if (!KtDeclarationAndFirDeclarationEqualityChecker.representsTheSameDeclaration(ktFunction, firFunction)) {
throw FileComparisonFailure(
/* message= */ null,
diff --git a/idea/resources-fir/META-INF/plugin.xml b/idea/resources-fir/META-INF/plugin.xml
index eac5c9ebca6..6375eea4dc6 100644
--- a/idea/resources-fir/META-INF/plugin.xml
+++ b/idea/resources-fir/META-INF/plugin.xml
@@ -92,8 +92,8 @@ The Kotlin FIR plugin provides language support in IntelliJ IDEA and Android Stu
-
+
diff --git a/prepare/idea-plugin/build.gradle.kts b/prepare/idea-plugin/build.gradle.kts
index 9458a057720..6c491745505 100644
--- a/prepare/idea-plugin/build.gradle.kts
+++ b/prepare/idea-plugin/build.gradle.kts
@@ -95,7 +95,8 @@ val projectsToShadow by extra(listOf(
":idea:idea-jps-common",
":idea:idea-frontend-independent",
":idea:idea-frontend-fir",
- ":idea:idea-frontend-api",
+ ":idea:idea-frontend-fir",
+ ":idea:idea-frontend-fir:idea-fir-low-level-api",
*if (Ide.IJ())
arrayOf(
":idea:idea-maven",
diff --git a/settings.gradle b/settings.gradle
index fc567baad5d..efaa4c239ae 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -313,6 +313,8 @@ include ":kotlin-build-common",
":kotlin-serialization-unshaded",
":kotlin-serialization:plugin-marker"
+include ":idea:idea-frontend-fir:idea-fir-low-level-api"
+
include ":prepare:ide-plugin-dependencies:android-extensions-compiler-plugin-for-ide",
":prepare:ide-plugin-dependencies:allopen-compiler-plugin-for-ide",
":prepare:ide-plugin-dependencies:allopen-compiler-plugin-tests-for-ide",