[FIR] Add light tree mode to FirAnalyzerFacade

This commit is contained in:
Dmitriy Novozhilov
2020-12-15 10:46:58 +03:00
parent 2aa1cb7451
commit acbc468fdd
2 changed files with 24 additions and 6 deletions
+1
View File
@@ -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"))
@@ -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<KtFile>) {
class FirAnalyzerFacade(
val session: FirSession,
val languageVersionSettings: LanguageVersionSettings,
val ktFiles: Collection<KtFile> = emptyList(), // may be empty if light tree mode enabled
val originalFiles: Collection<File> = emptyList(), // may be empty if light tree mode disabled
val useLightTree: Boolean = false
) {
private var firFiles: List<FirFile>? = null
private var scopeSession: ScopeSession? = null
private var collectedDiagnostics: Map<FirFile, List<FirDiagnostic<*>>>? = 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)
}
}
}
}