FIR CLI: initialize module and dependencies
#KT-42624 Fixed
This commit is contained in:
committed by
Mikhail Glukhikh
parent
01ba1cded7
commit
4d28463f1a
+13
-1
@@ -50,6 +50,8 @@ import org.jetbrains.kotlin.codegen.KotlinCodegenFacade
|
|||||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||||
import org.jetbrains.kotlin.codegen.state.GenerationStateEventCallback
|
import org.jetbrains.kotlin.codegen.state.GenerationStateEventCallback
|
||||||
import org.jetbrains.kotlin.config.*
|
import org.jetbrains.kotlin.config.*
|
||||||
|
import org.jetbrains.kotlin.container.get
|
||||||
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.diagnostics.*
|
import org.jetbrains.kotlin.diagnostics.*
|
||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||||
import org.jetbrains.kotlin.fir.FirPsiSourceElement
|
import org.jetbrains.kotlin.fir.FirPsiSourceElement
|
||||||
@@ -73,10 +75,12 @@ import org.jetbrains.kotlin.platform.TargetPlatform
|
|||||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
||||||
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus
|
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
import org.jetbrains.kotlin.resolve.CompilerEnvironment
|
||||||
import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
|
import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
|
||||||
import org.jetbrains.kotlin.resolve.diagnostics.SimpleDiagnostics
|
import org.jetbrains.kotlin.resolve.diagnostics.SimpleDiagnostics
|
||||||
import org.jetbrains.kotlin.resolve.jvm.KotlinJavaPsiFacade
|
import org.jetbrains.kotlin.resolve.jvm.KotlinJavaPsiFacade
|
||||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
|
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
|
||||||
|
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory
|
||||||
import org.jetbrains.kotlin.utils.newLinkedHashMapWithExpectedSize
|
import org.jetbrains.kotlin.utils.newLinkedHashMapWithExpectedSize
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
@@ -377,9 +381,17 @@ object KotlinToJVMBytecodeCompiler {
|
|||||||
val dummyBindingContext = NoScopeRecordCliBindingTrace().bindingContext
|
val dummyBindingContext = NoScopeRecordCliBindingTrace().bindingContext
|
||||||
|
|
||||||
val codegenFactory = JvmIrCodegenFactory(moduleConfiguration.get(CLIConfigurationKeys.PHASE_CONFIG) ?: PhaseConfig(jvmPhases))
|
val codegenFactory = JvmIrCodegenFactory(moduleConfiguration.get(CLIConfigurationKeys.PHASE_CONFIG) ?: PhaseConfig(jvmPhases))
|
||||||
|
|
||||||
|
// Create and initialize the module and its dependencies
|
||||||
|
val container = TopDownAnalyzerFacadeForJVM.createContainer(
|
||||||
|
project, ktFiles, NoScopeRecordCliBindingTrace(), environment.configuration, environment::createPackagePartProvider,
|
||||||
|
::FileBasedDeclarationProviderFactory, CompilerEnvironment,
|
||||||
|
TopDownAnalyzerFacadeForJVM.newModuleSearchScope(project, ktFiles), emptyList()
|
||||||
|
)
|
||||||
|
|
||||||
val generationState = GenerationState.Builder(
|
val generationState = GenerationState.Builder(
|
||||||
environment.project, ClassBuilderFactories.BINARIES,
|
environment.project, ClassBuilderFactories.BINARIES,
|
||||||
moduleFragment.descriptor, dummyBindingContext, ktFiles,
|
container.get<ModuleDescriptor>(), dummyBindingContext, ktFiles,
|
||||||
moduleConfiguration
|
moduleConfiguration
|
||||||
).codegenFactory(
|
).codegenFactory(
|
||||||
codegenFactory
|
codegenFactory
|
||||||
|
|||||||
+21
-1
@@ -1,7 +1,7 @@
|
|||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
// KJS_WITH_FULL_RUNTIME
|
// KJS_WITH_FULL_RUNTIME
|
||||||
|
|
||||||
fun box(): String {
|
fun foo(): String {
|
||||||
val a = ArrayList<String>()
|
val a = ArrayList<String>()
|
||||||
a.add("OK")
|
a.add("OK")
|
||||||
for (i in a.indices) {
|
for (i in a.indices) {
|
||||||
@@ -9,3 +9,23 @@ fun box(): String {
|
|||||||
}
|
}
|
||||||
return "Fail"
|
return "Fail"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// KT-42642
|
||||||
|
fun bar(): String {
|
||||||
|
val a = ArrayList<String>()
|
||||||
|
a.add("O")
|
||||||
|
a.add("K")
|
||||||
|
val map = mutableMapOf<String, String>().apply {
|
||||||
|
for (i in a.indices step 2) {
|
||||||
|
put(a[i].toLowerCase(), a[i])
|
||||||
|
put(a[i + 1].toLowerCase(), a[i + 1])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return map.values.joinToString(separator = "")
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
val r = foo()
|
||||||
|
if (r != "OK") return r
|
||||||
|
return bar()
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user