diff --git a/compiler/fir/entrypoint/build.gradle.kts b/compiler/fir/entrypoint/build.gradle.kts index 32db758c21c..b42e5b56867 100644 --- a/compiler/fir/entrypoint/build.gradle.kts +++ b/compiler/fir/entrypoint/build.gradle.kts @@ -8,6 +8,7 @@ dependencies { api(project(":compiler:frontend.java")) api(project(":compiler:fir:java")) api(project(":compiler:fir:raw-fir:psi2fir")) + api(project(":compiler:fir:raw-fir:light-tree2fir")) api(project(":compiler:fir:fir2ir")) api(project(":compiler:fir:checkers")) diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/analysis/FirAnalyzerFacade.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/analysis/FirAnalyzerFacade.kt index b6146c99b48..e098d1093d7 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/analysis/FirAnalyzerFacade.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/analysis/FirAnalyzerFacade.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.backend.jvm.FirJvmKotlinMangler import org.jetbrains.kotlin.fir.backend.jvm.FirJvmVisibilityConverter import org.jetbrains.kotlin.fir.builder.RawFirBuilder import org.jetbrains.kotlin.fir.declarations.FirFile +import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.firProvider import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl @@ -25,8 +26,15 @@ import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmManglerDesc import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi2ir.generators.GeneratorExtensions +import java.io.File -class FirAnalyzerFacade(val session: FirSession, val languageVersionSettings: LanguageVersionSettings, val ktFiles: Collection) { +class FirAnalyzerFacade( + val session: FirSession, + val languageVersionSettings: LanguageVersionSettings, + val ktFiles: Collection = emptyList(), // may be empty if light tree mode enabled + val originalFiles: Collection = emptyList(), // may be empty if light tree mode disabled + val useLightTree: Boolean = false +) { private var firFiles: List? = null private var scopeSession: ScopeSession? = null private var collectedDiagnostics: Map>>? = null @@ -34,11 +42,20 @@ class FirAnalyzerFacade(val session: FirSession, val languageVersionSettings: La private fun buildRawFir() { if (firFiles != null) return val firProvider = (session.firProvider as FirProviderImpl) - val builder = RawFirBuilder(session, firProvider.kotlinScopeProvider) - firFiles = ktFiles.map { - val firFile = builder.buildFirFile(it) - firProvider.recordFile(firFile) - firFile + firFiles = if (useLightTree) { + val builder = LightTree2Fir(session, firProvider.kotlinScopeProvider) + originalFiles.map { + builder.buildFirFile(it).also { firFile -> + firProvider.recordFile(firFile) + } + } + } else { + val builder = RawFirBuilder(session, firProvider.kotlinScopeProvider) + ktFiles.map { + builder.buildFirFile(it).also { firFile -> + firProvider.recordFile(firFile) + } + } } }