[CLI] Introduce utilities for creating FirSession hierarchy in CLI for all platforms
Also support session creation and compilation for HMPP projects ^KT-56209 Fixed
This commit is contained in:
committed by
Space Team
parent
30ea4b6b53
commit
79e4df72bf
+10
-17
@@ -15,7 +15,6 @@ import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
|
||||
import org.jetbrains.kotlin.backend.jvm.JvmIrDeserializerImpl
|
||||
import org.jetbrains.kotlin.build.DEFAULT_KOTLIN_SOURCE_FILES_EXTENSIONS
|
||||
import org.jetbrains.kotlin.build.report.BuildReporter
|
||||
import org.jetbrains.kotlin.builtins.DefaultBuiltIns
|
||||
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
||||
import org.jetbrains.kotlin.cli.common.ExitCode
|
||||
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
|
||||
@@ -40,26 +39,15 @@ import org.jetbrains.kotlin.cli.jvm.config.*
|
||||
import org.jetbrains.kotlin.cli.jvm.plugins.PluginCliParser
|
||||
import org.jetbrains.kotlin.config.*
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.backend.Fir2IrConverter
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.Fir2IrJvmSpecialAnnotationSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmKotlinMangler
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.FirJvmVisibilityConverter
|
||||
import org.jetbrains.kotlin.fir.backend.jvm.JvmFir2IrExtensions
|
||||
import org.jetbrains.kotlin.fir.languageVersionSettings
|
||||
import org.jetbrains.kotlin.fir.moduleData
|
||||
import org.jetbrains.kotlin.fir.pipeline.FirResult
|
||||
import org.jetbrains.kotlin.fir.pipeline.ModuleCompilerAnalyzedOutput
|
||||
import org.jetbrains.kotlin.fir.pipeline.convertToIrAndActualizeForJvm
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirProviderImpl
|
||||
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope
|
||||
import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
|
||||
import org.jetbrains.kotlin.incremental.components.InlineConstTracker
|
||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||
import org.jetbrains.kotlin.incremental.multiproject.ModulesApiHistory
|
||||
import org.jetbrains.kotlin.ir.backend.jvm.serialization.JvmIrMangler
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
|
||||
import org.jetbrains.kotlin.ir.util.IrMessageLogger
|
||||
import org.jetbrains.kotlin.load.java.JavaClassesTracker
|
||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents
|
||||
@@ -212,13 +200,18 @@ class IncrementalFirJvmCompilerRunner(
|
||||
fun firIncrementalCycle(): FirResult? {
|
||||
while (true) {
|
||||
val dirtySourcesByModuleName = sourcesByModuleName.mapValues { (_, sources) ->
|
||||
sources.filter { dirtySources.any { df -> df.path == it.path } }
|
||||
sources.filterTo(mutableSetOf()) { dirtySources.any { df -> df.path == it.path } }
|
||||
}
|
||||
val groupedSource = GroupedKtSources(
|
||||
commonSources = allCommonSourceFiles.filter { dirtySources.any { df -> df.path == it.path } },
|
||||
platformSources = allPlatformSourceFiles.filter { dirtySources.any { df -> df.path == it.path } },
|
||||
sourcesByModuleName = dirtySourcesByModuleName
|
||||
)
|
||||
val compilerInput = ModuleCompilerInput(
|
||||
targetId,
|
||||
CommonPlatforms.defaultCommonPlatform, allCommonSourceFiles.filter { dirtySources.any { df -> df.path == it.path } },
|
||||
JvmPlatforms.unspecifiedJvmPlatform, allPlatformSourceFiles.filter { dirtySources.any { df -> df.path == it.path } },
|
||||
dirtySourcesByModuleName,
|
||||
groupedSource,
|
||||
CommonPlatforms.defaultCommonPlatform,
|
||||
JvmPlatforms.unspecifiedJvmPlatform,
|
||||
configuration
|
||||
)
|
||||
|
||||
@@ -238,7 +231,7 @@ class IncrementalFirJvmCompilerRunner(
|
||||
|
||||
// TODO: consider what to do if many compilations find a main class
|
||||
if (mainClassFqName == null && configuration.get(JVMConfigurationKeys.OUTPUT_JAR) != null) {
|
||||
mainClassFqName = findMainClass(analysisResults.platformOutput.fir)
|
||||
mainClassFqName = findMainClass(analysisResults.outputs.last().fir)
|
||||
}
|
||||
|
||||
// TODO: switch the whole IC to KtSourceFile instead of FIle
|
||||
|
||||
+3
-2
@@ -128,8 +128,9 @@ internal fun collectNewDirtySources(
|
||||
}
|
||||
}
|
||||
|
||||
analysisResults.commonOutput?.let { visitFirFiles(it) }
|
||||
visitFirFiles(analysisResults.platformOutput)
|
||||
for (output in analysisResults.outputs) {
|
||||
visitFirFiles(output)
|
||||
}
|
||||
|
||||
val (dirtyLookupSymbols, dirtyClassFqNames, forceRecompile) = changesCollector.getDirtyData(listOf(caches.platformCache), reporter)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user