[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,
|
useWasmPlatform = useWasmPlatform,
|
||||||
)
|
)
|
||||||
|
output.runPlatformCheckers(diagnosticsReporter)
|
||||||
return AnalyzedFirWithPsiOutput(output, ktFiles)
|
return AnalyzedFirWithPsiOutput(output, ktFiles)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,6 +205,7 @@ fun compileModulesToAnalyzedFirWithLightTree(
|
|||||||
},
|
},
|
||||||
useWasmPlatform = useWasmPlatform,
|
useWasmPlatform = useWasmPlatform,
|
||||||
)
|
)
|
||||||
|
output.runPlatformCheckers(diagnosticsReporter)
|
||||||
return AnalyzedFirOutput(output)
|
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.Fir2IrActualizedResult
|
||||||
import org.jetbrains.kotlin.fir.pipeline.FirResult
|
import org.jetbrains.kotlin.fir.pipeline.FirResult
|
||||||
import org.jetbrains.kotlin.fir.pipeline.buildResolveAndCheckFirFromKtFiles
|
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.arrayElementType
|
||||||
import org.jetbrains.kotlin.fir.types.coneType
|
import org.jetbrains.kotlin.fir.types.coneType
|
||||||
import org.jetbrains.kotlin.fir.types.isArrayType
|
import org.jetbrains.kotlin.fir.types.isArrayType
|
||||||
@@ -220,6 +221,7 @@ object FirKotlinToJvmBytecodeCompiler {
|
|||||||
val outputs = sessionsWithSources.map { (session, sources) ->
|
val outputs = sessionsWithSources.map { (session, sources) ->
|
||||||
buildResolveAndCheckFirFromKtFiles(session, sources, diagnosticsReporter)
|
buildResolveAndCheckFirFromKtFiles(session, sources, diagnosticsReporter)
|
||||||
}
|
}
|
||||||
|
outputs.runPlatformCheckers(diagnosticsReporter)
|
||||||
|
|
||||||
return runUnless(syntaxErrors || diagnosticsReporter.hasErrors) { FirResult(outputs) }
|
return runUnless(syntaxErrors || diagnosticsReporter.hasErrors) { FirResult(outputs) }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -314,6 +314,7 @@ fun compileModuleToAnalyzedFir(
|
|||||||
val outputs = sessionWithSources.map { (session, sources) ->
|
val outputs = sessionWithSources.map { (session, sources) ->
|
||||||
buildResolveAndCheckFirViaLightTree(session, sources, diagnosticsReporter, countFilesAndLines)
|
buildResolveAndCheckFirViaLightTree(session, sources, diagnosticsReporter, countFilesAndLines)
|
||||||
}
|
}
|
||||||
|
outputs.runPlatformCheckers(diagnosticsReporter)
|
||||||
|
|
||||||
return FirResult(outputs)
|
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.buildFirViaLightTree
|
||||||
import org.jetbrains.kotlin.fir.pipeline.resolveAndCheckFir
|
import org.jetbrains.kotlin.fir.pipeline.resolveAndCheckFir
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
|
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.FirKLibSerializerExtension
|
||||||
import org.jetbrains.kotlin.fir.serialization.serializeSingleFirFile
|
import org.jetbrains.kotlin.fir.serialization.serializeSingleFirFile
|
||||||
import org.jetbrains.kotlin.library.SerializedMetadata
|
import org.jetbrains.kotlin.library.SerializedMetadata
|
||||||
@@ -148,6 +149,7 @@ internal class FirMetadataSerializer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
outputs.runPlatformCheckers(diagnosticsReporter)
|
||||||
|
|
||||||
return if (diagnosticsReporter.hasErrors) {
|
return if (diagnosticsReporter.hasErrors) {
|
||||||
val renderDiagnosticNames = configuration.getBoolean(CLIConfigurationKeys.RENDER_DIAGNOSTIC_INTERNAL_NAME)
|
val renderDiagnosticNames = configuration.getBoolean(CLIConfigurationKeys.RENDER_DIAGNOSTIC_INTERNAL_NAME)
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ fun FirSession.runCheckers(
|
|||||||
scopeSession: ScopeSession,
|
scopeSession: ScopeSession,
|
||||||
firFiles: Collection<FirFile>,
|
firFiles: Collection<FirFile>,
|
||||||
reporter: BaseDiagnosticsCollector,
|
reporter: BaseDiagnosticsCollector,
|
||||||
mppCheckerKind: MppCheckerKind = TODO()
|
mppCheckerKind: MppCheckerKind
|
||||||
): Map<FirFile, List<KtDiagnostic>> {
|
): Map<FirFile, List<KtDiagnostic>> {
|
||||||
val collector = DiagnosticComponentsFactory.create(this, scopeSession, mppCheckerKind)
|
val collector = DiagnosticComponentsFactory.create(this, scopeSession, mppCheckerKind)
|
||||||
collector.collectDiagnosticsInSettings(reporter)
|
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.IrGenerationExtension
|
||||||
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
|
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
|
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
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.*
|
||||||
import org.jetbrains.kotlin.fir.backend.jvm.Fir2IrJvmSpecialAnnotationSymbolProvider
|
import org.jetbrains.kotlin.fir.backend.jvm.Fir2IrJvmSpecialAnnotationSymbolProvider
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
@@ -41,6 +43,15 @@ data class Fir2IrActualizedResult(
|
|||||||
val irActualizedResult: IrActualizedResult?,
|
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(
|
fun FirResult.convertToIrAndActualize(
|
||||||
fir2IrExtensions: Fir2IrExtensions,
|
fir2IrExtensions: Fir2IrExtensions,
|
||||||
fir2IrConfiguration: Fir2IrConfiguration,
|
fir2IrConfiguration: Fir2IrConfiguration,
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.KtSourceFile
|
|||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||||
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
|
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
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.builder.PsiRawFirBuilder
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||||
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
|
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
|
||||||
@@ -63,13 +64,17 @@ fun buildResolveAndCheckFirFromKtFiles(
|
|||||||
return resolveAndCheckFir(session, session.buildFirFromKtFiles(ktFiles), diagnosticsReporter)
|
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(
|
fun resolveAndCheckFir(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
firFiles: List<FirFile>,
|
firFiles: List<FirFile>,
|
||||||
diagnosticsReporter: BaseDiagnosticsCollector
|
diagnosticsReporter: BaseDiagnosticsCollector
|
||||||
): ModuleCompilerAnalyzedOutput {
|
): ModuleCompilerAnalyzedOutput {
|
||||||
val (scopeSession, fir) = session.runResolution(firFiles)
|
val (scopeSession, fir) = session.runResolution(firFiles)
|
||||||
session.runCheckers(scopeSession, fir, diagnosticsReporter)
|
session.runCheckers(scopeSession, fir, diagnosticsReporter, MppCheckerKind.Common)
|
||||||
return ModuleCompilerAnalyzedOutput(session, scopeSession, fir)
|
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.*
|
||||||
import org.jetbrains.kotlin.fir.backend.native.FirNativeOverrideChecker
|
import org.jetbrains.kotlin.fir.backend.native.FirNativeOverrideChecker
|
||||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
|
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
|
||||||
import org.jetbrains.kotlin.fir.pipeline.FirResult
|
import org.jetbrains.kotlin.fir.pipeline.*
|
||||||
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.resolve.ImplicitIntegerCoercionModuleCapability
|
import org.jetbrains.kotlin.fir.resolve.ImplicitIntegerCoercionModuleCapability
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirOverrideChecker
|
import org.jetbrains.kotlin.fir.scopes.FirOverrideChecker
|
||||||
import org.jetbrains.kotlin.library.isInterop
|
import org.jetbrains.kotlin.library.isInterop
|
||||||
@@ -84,6 +81,8 @@ internal inline fun <F> PhaseContext.firFrontend(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
outputs.runPlatformCheckers(diagnosticsReporter)
|
||||||
|
|
||||||
return if (syntaxErrors || diagnosticsReporter.hasErrors) {
|
return if (syntaxErrors || diagnosticsReporter.hasErrors) {
|
||||||
FirDiagnosticsCompilerResultsReporter.reportToMessageCollector(diagnosticsReporter, messageCollector, renderDiagnosticNames)
|
FirDiagnosticsCompilerResultsReporter.reportToMessageCollector(diagnosticsReporter, messageCollector, renderDiagnosticNames)
|
||||||
throw KonanCompilationException("Compilation failed: there were frontend errors")
|
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.JVMConfigurationKeys
|
||||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
|
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.declarations.FirFile
|
||||||
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
|
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
|
||||||
import org.jetbrains.kotlin.fir.pipeline.*
|
import org.jetbrains.kotlin.fir.pipeline.*
|
||||||
@@ -420,7 +421,8 @@ private fun doCompileWithK2(
|
|||||||
|
|
||||||
val (scopeSession, fir) = session.runResolution(orderedRawFir)
|
val (scopeSession, fir) = session.runResolution(orderedRawFir)
|
||||||
// checkers
|
// 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)))
|
val analysisResults = FirResult(listOf(ModuleCompilerAnalyzedOutput(session, scopeSession, fir)))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user