From 4d28463f1a97a8ca04906a2c4dec21efa3cd33f9 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Tue, 13 Oct 2020 22:40:22 -0700 Subject: [PATCH] FIR CLI: initialize module and dependencies #KT-42624 Fixed --- .../compiler/KotlinToJVMBytecodeCompiler.kt | 14 +++++++++++- .../forInIndices/forInArrayListIndices.kt | 22 ++++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt index fe2a9675428..141f09b689a 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt @@ -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(), dummyBindingContext, ktFiles, moduleConfiguration ).codegenFactory( codegenFactory diff --git a/compiler/testData/codegen/box/ranges/forInIndices/forInArrayListIndices.kt b/compiler/testData/codegen/box/ranges/forInIndices/forInArrayListIndices.kt index 2a90ff45b41..dcc1c58d479 100644 --- a/compiler/testData/codegen/box/ranges/forInIndices/forInArrayListIndices.kt +++ b/compiler/testData/codegen/box/ranges/forInIndices/forInArrayListIndices.kt @@ -1,7 +1,7 @@ // WITH_RUNTIME // KJS_WITH_FULL_RUNTIME -fun box(): String { +fun foo(): String { val a = ArrayList() 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() + a.add("O") + a.add("K") + val map = mutableMapOf().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() +}