[FIR] Part 3. Setup running platform checkers in CLI
^KT-58881
This commit is contained in:
committed by
Nikolay Lunyak
parent
c4e4776c5e
commit
ed874262e3
@@ -176,6 +176,7 @@ fun compileModuleToAnalyzedFirWithPsi(
|
||||
},
|
||||
useWasmPlatform = useWasmPlatform,
|
||||
)
|
||||
output.runPlatformCheckers(diagnosticsReporter)
|
||||
return AnalyzedFirWithPsiOutput(output, ktFiles)
|
||||
}
|
||||
|
||||
@@ -204,6 +205,7 @@ fun compileModulesToAnalyzedFirWithLightTree(
|
||||
},
|
||||
useWasmPlatform = useWasmPlatform,
|
||||
)
|
||||
output.runPlatformCheckers(diagnosticsReporter)
|
||||
return AnalyzedFirOutput(output)
|
||||
}
|
||||
|
||||
|
||||
+2
@@ -37,6 +37,7 @@ import org.jetbrains.kotlin.fir.packageFqName
|
||||
import org.jetbrains.kotlin.fir.pipeline.Fir2IrActualizedResult
|
||||
import org.jetbrains.kotlin.fir.pipeline.FirResult
|
||||
import org.jetbrains.kotlin.fir.pipeline.buildResolveAndCheckFirFromKtFiles
|
||||
import org.jetbrains.kotlin.fir.pipeline.runPlatformCheckers
|
||||
import org.jetbrains.kotlin.fir.types.arrayElementType
|
||||
import org.jetbrains.kotlin.fir.types.coneType
|
||||
import org.jetbrains.kotlin.fir.types.isArrayType
|
||||
@@ -220,6 +221,7 @@ object FirKotlinToJvmBytecodeCompiler {
|
||||
val outputs = sessionsWithSources.map { (session, sources) ->
|
||||
buildResolveAndCheckFirFromKtFiles(session, sources, diagnosticsReporter)
|
||||
}
|
||||
outputs.runPlatformCheckers(diagnosticsReporter)
|
||||
|
||||
return runUnless(syntaxErrors || diagnosticsReporter.hasErrors) { FirResult(outputs) }
|
||||
}
|
||||
|
||||
@@ -314,6 +314,7 @@ fun compileModuleToAnalyzedFir(
|
||||
val outputs = sessionWithSources.map { (session, sources) ->
|
||||
buildResolveAndCheckFirViaLightTree(session, sources, diagnosticsReporter, countFilesAndLines)
|
||||
}
|
||||
outputs.runPlatformCheckers(diagnosticsReporter)
|
||||
|
||||
return FirResult(outputs)
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.fir.pipeline.buildFirFromKtFiles
|
||||
import org.jetbrains.kotlin.fir.pipeline.buildFirViaLightTree
|
||||
import org.jetbrains.kotlin.fir.pipeline.resolveAndCheckFir
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
|
||||
import org.jetbrains.kotlin.fir.pipeline.*
|
||||
import org.jetbrains.kotlin.fir.serialization.FirKLibSerializerExtension
|
||||
import org.jetbrains.kotlin.fir.serialization.serializeSingleFirFile
|
||||
import org.jetbrains.kotlin.library.SerializedMetadata
|
||||
@@ -148,6 +149,7 @@ internal class FirMetadataSerializer(
|
||||
}
|
||||
}
|
||||
|
||||
outputs.runPlatformCheckers(diagnosticsReporter)
|
||||
|
||||
return if (diagnosticsReporter.hasErrors) {
|
||||
val renderDiagnosticNames = configuration.getBoolean(CLIConfigurationKeys.RENDER_DIAGNOSTIC_INTERNAL_NAME)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
+3
-4
@@ -12,10 +12,7 @@ import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.backend.native.FirNativeOverrideChecker
|
||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
|
||||
import org.jetbrains.kotlin.fir.pipeline.FirResult
|
||||
import org.jetbrains.kotlin.fir.pipeline.ModuleCompilerAnalyzedOutput
|
||||
import org.jetbrains.kotlin.fir.pipeline.buildResolveAndCheckFirViaLightTree
|
||||
import org.jetbrains.kotlin.fir.pipeline.buildResolveAndCheckFirFromKtFiles
|
||||
import org.jetbrains.kotlin.fir.pipeline.*
|
||||
import org.jetbrains.kotlin.fir.resolve.ImplicitIntegerCoercionModuleCapability
|
||||
import org.jetbrains.kotlin.fir.scopes.FirOverrideChecker
|
||||
import org.jetbrains.kotlin.library.isInterop
|
||||
@@ -84,6 +81,8 @@ internal inline fun <F> PhaseContext.firFrontend(
|
||||
}
|
||||
}
|
||||
|
||||
outputs.runPlatformCheckers(diagnosticsReporter)
|
||||
|
||||
return if (syntaxErrors || diagnosticsReporter.hasErrors) {
|
||||
FirDiagnosticsCompilerResultsReporter.reportToMessageCollector(diagnosticsReporter, messageCollector, renderDiagnosticNames)
|
||||
throw KonanCompilationException("Compilation failed: there were frontend errors")
|
||||
|
||||
+3
-1
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
|
||||
import org.jetbrains.kotlin.fir.pipeline.*
|
||||
@@ -420,7 +421,8 @@ private fun doCompileWithK2(
|
||||
|
||||
val (scopeSession, fir) = session.runResolution(orderedRawFir)
|
||||
// checkers
|
||||
session.runCheckers(scopeSession, fir, diagnosticsReporter)
|
||||
session.runCheckers(scopeSession, fir, diagnosticsReporter, MppCheckerKind.Common)
|
||||
session.runCheckers(scopeSession, fir, diagnosticsReporter, MppCheckerKind.Platform)
|
||||
|
||||
val analysisResults = FirResult(listOf(ModuleCompilerAnalyzedOutput(session, scopeSession, fir)))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user