FIR CLI: initialize module and dependencies

#KT-42624 Fixed
This commit is contained in:
Jinseong Jeon
2020-10-13 22:40:22 -07:00
committed by Mikhail Glukhikh
parent 01ba1cded7
commit 4d28463f1a
2 changed files with 34 additions and 2 deletions
@@ -50,6 +50,8 @@ import org.jetbrains.kotlin.codegen.KotlinCodegenFacade
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.codegen.state.GenerationStateEventCallback
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.fileClasses.JvmFileClassUtil
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.progress.ProgressIndicatorAndCompilationCanceledStatus
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.CompilerEnvironment
import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
import org.jetbrains.kotlin.resolve.diagnostics.SimpleDiagnostics
import org.jetbrains.kotlin.resolve.jvm.KotlinJavaPsiFacade
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory
import org.jetbrains.kotlin.utils.newLinkedHashMapWithExpectedSize
import java.io.File
@@ -377,9 +381,17 @@ object KotlinToJVMBytecodeCompiler {
val dummyBindingContext = NoScopeRecordCliBindingTrace().bindingContext
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(
environment.project, ClassBuilderFactories.BINARIES,
moduleFragment.descriptor, dummyBindingContext, ktFiles,
container.get<ModuleDescriptor>(), dummyBindingContext, ktFiles,
moduleConfiguration
).codegenFactory(
codegenFactory
@@ -1,7 +1,7 @@
// WITH_RUNTIME
// KJS_WITH_FULL_RUNTIME
fun box(): String {
fun foo(): String {
val a = ArrayList<String>()
a.add("OK")
for (i in a.indices) {
@@ -9,3 +9,23 @@ fun box(): String {
}
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()
}