[FIR] Part 3. Setup running platform checkers in CLI

^KT-58881
This commit is contained in:
Dmitriy Novozhilov
2024-01-09 13:23:18 +02:00
committed by Nikolay Lunyak
parent c4e4776c5e
commit ed874262e3
9 changed files with 31 additions and 7 deletions
@@ -25,7 +25,7 @@ fun FirSession.runCheckers(
scopeSession: ScopeSession,
firFiles: Collection<FirFile>,
reporter: BaseDiagnosticsCollector,
mppCheckerKind: MppCheckerKind = TODO()
mppCheckerKind: MppCheckerKind
): Map<FirFile, List<KtDiagnostic>> {
val collector = DiagnosticComponentsFactory.create(this, scopeSession, mppCheckerKind)
collector.collectDiagnosticsInSettings(reporter)
@@ -13,7 +13,9 @@ import org.jetbrains.kotlin.backend.common.actualizer.SpecialFakeOverrideSymbols
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
import org.jetbrains.kotlin.fir.backend.*
import org.jetbrains.kotlin.fir.backend.jvm.Fir2IrJvmSpecialAnnotationSymbolProvider
import org.jetbrains.kotlin.fir.declarations.FirFile
@@ -41,6 +43,15 @@ data class Fir2IrActualizedResult(
val irActualizedResult: IrActualizedResult?,
)
fun List<ModuleCompilerAnalyzedOutput>.runPlatformCheckers(reporter: BaseDiagnosticsCollector) {
val platformModule = this.last()
val session = platformModule.session
val scopeSession = platformModule.scopeSession
val allFiles = this.flatMap { it.fir }
session.runCheckers(scopeSession, allFiles, reporter, MppCheckerKind.Platform)
}
fun FirResult.convertToIrAndActualize(
fir2IrExtensions: Fir2IrExtensions,
fir2IrConfiguration: Fir2IrConfiguration,
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.KtSourceFile
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
import org.jetbrains.kotlin.fir.builder.PsiRawFirBuilder
import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
@@ -63,13 +64,17 @@ fun buildResolveAndCheckFirFromKtFiles(
return resolveAndCheckFir(session, session.buildFirFromKtFiles(ktFiles), diagnosticsReporter)
}
/**
* This function runs only common checkers
* Platform checkers should be run separately, after all parts of MPP structure will be resolved
*/
fun resolveAndCheckFir(
session: FirSession,
firFiles: List<FirFile>,
diagnosticsReporter: BaseDiagnosticsCollector
): ModuleCompilerAnalyzedOutput {
val (scopeSession, fir) = session.runResolution(firFiles)
session.runCheckers(scopeSession, fir, diagnosticsReporter)
session.runCheckers(scopeSession, fir, diagnosticsReporter, MppCheckerKind.Common)
return ModuleCompilerAnalyzedOutput(session, scopeSession, fir)
}