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 3fe1bb047e4..a3e4a17e0a6 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 @@ -323,16 +323,16 @@ object KotlinToJVMBytecodeCompiler { environment.getSourceFiles(), object : AnalyzerWithCompilerReport.Analyzer { override fun analyze(): AnalysisResult { val sharedTrace = CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace() - val moduleContext = TopDownAnalyzerFacadeForJVM.createContextWithSealedModule(environment.project, - environment.getModuleName()) + val moduleContext = + TopDownAnalyzerFacadeForJVM.createContextWithSealedModule(environment.project, environment.getModuleName()) return TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegrationWithCustomContext( moduleContext, environment.getSourceFiles(), sharedTrace, - environment.configuration.get(JVMConfigurationKeys.MODULES), - environment.configuration.get(JVMConfigurationKeys.INCREMENTAL_COMPILATION_COMPONENTS), - JvmPackagePartProvider(environment)) + environment.configuration, + JvmPackagePartProvider(environment) + ) } override fun reportEnvironmentErrors() { diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.java b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.java index 220eee00014..6cc59106259 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/TopDownAnalyzerFacadeForJVM.java @@ -19,8 +19,9 @@ package org.jetbrains.kotlin.resolve.jvm; import com.intellij.openapi.project.Project; import com.intellij.psi.search.GlobalSearchScope; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.analyzer.AnalysisResult; +import org.jetbrains.kotlin.config.CompilerConfiguration; +import org.jetbrains.kotlin.config.JVMConfigurationKeys; import org.jetbrains.kotlin.context.ContextKt; import org.jetbrains.kotlin.context.ModuleContext; import org.jetbrains.kotlin.context.MutableModuleContext; @@ -57,39 +58,26 @@ public enum TopDownAnalyzerFacadeForJVM { INSTANCE; - @NotNull - public static AnalysisResult analyzeFilesWithJavaIntegrationNoIncremental( - @NotNull ModuleContext moduleContext, - @NotNull Collection files, - @NotNull BindingTrace trace, - @NotNull TopDownAnalysisMode topDownAnalysisMode, - PackagePartProvider packagePartProvider - ) { - return analyzeFilesWithJavaIntegration(moduleContext, files, trace, topDownAnalysisMode, null, null, packagePartProvider); - } - @NotNull public static AnalysisResult analyzeFilesWithJavaIntegrationWithCustomContext( @NotNull ModuleContext moduleContext, @NotNull Collection files, @NotNull BindingTrace trace, - @Nullable List modules, - @Nullable IncrementalCompilationComponents incrementalCompilationComponents, + @NotNull CompilerConfiguration configuration, @NotNull PackagePartProvider packagePartProvider ) { return analyzeFilesWithJavaIntegration( - moduleContext, files, trace, TopDownAnalysisMode.TopLevelDeclarations, modules, incrementalCompilationComponents, - packagePartProvider); + moduleContext, files, trace, TopDownAnalysisMode.TopLevelDeclarations, configuration, packagePartProvider + ); } @NotNull - private static AnalysisResult analyzeFilesWithJavaIntegration( + public static AnalysisResult analyzeFilesWithJavaIntegration( @NotNull ModuleContext moduleContext, @NotNull Collection files, @NotNull BindingTrace trace, @NotNull TopDownAnalysisMode topDownAnalysisMode, - @Nullable List modules, - @Nullable IncrementalCompilationComponents incrementalCompilationComponents, + @NotNull CompilerConfiguration configuration, @NotNull PackagePartProvider packagePartProvider ) { Project project = moduleContext.getProject(); @@ -98,10 +86,13 @@ public enum TopDownAnalyzerFacadeForJVM { FileBasedDeclarationProviderFactory providerFactory = new FileBasedDeclarationProviderFactory(moduleContext.getStorageManager(), allFiles); + IncrementalCompilationComponents incrementalCompilationComponents = + configuration.get(JVMConfigurationKeys.INCREMENTAL_COMPILATION_COMPONENTS); LookupTracker lookupTracker = incrementalCompilationComponents != null ? incrementalCompilationComponents.getLookupTracker() : LookupTracker.Companion.getDO_NOTHING(); List targetIds = null; + List modules = configuration.get(JVMConfigurationKeys.MODULES); if (modules != null) { targetIds = new ArrayList(modules.size()); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/config/CompilerConfiguration.java b/compiler/frontend/src/org/jetbrains/kotlin/config/CompilerConfiguration.java index 1a53dc19f5c..d9723bf5313 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/config/CompilerConfiguration.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/config/CompilerConfiguration.java @@ -24,9 +24,15 @@ import java.util.*; @SuppressWarnings("unchecked") public class CompilerConfiguration { + public static CompilerConfiguration EMPTY = new CompilerConfiguration(); + private final Map map = new HashMap(); private boolean readOnly = false; + static { + EMPTY.setReadOnly(true); + } + @Nullable public T get(@NotNull CompilerConfigurationKey key) { T data = (T) map.get(key.ideaKey); diff --git a/compiler/tests-common/org/jetbrains/kotlin/jvm/compiler/AbstractLoadJavaTest.java b/compiler/tests-common/org/jetbrains/kotlin/jvm/compiler/AbstractLoadJavaTest.java index c509801f886..085e0574fc5 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/jvm/compiler/AbstractLoadJavaTest.java +++ b/compiler/tests-common/org/jetbrains/kotlin/jvm/compiler/AbstractLoadJavaTest.java @@ -155,14 +155,13 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir { KotlinCoreEnvironment.createForTests(getTestRootDisposable(), configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES); BindingTrace trace = new CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(); - ModuleContext moduleContext = TopDownAnalyzerFacadeForJVM.createContextWithSealedModule(environment.getProject(), - ModuleNameKt.getModuleName(environment)); + ModuleContext moduleContext = TopDownAnalyzerFacadeForJVM.createContextWithSealedModule( + environment.getProject(), ModuleNameKt.getModuleName(environment) + ); - TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegrationNoIncremental( - moduleContext, - environment.getSourceFiles(), - trace, - TopDownAnalysisMode.TopLevelDeclarations, + TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration( + moduleContext, environment.getSourceFiles(), trace, + TopDownAnalysisMode.TopLevelDeclarations, configuration, new JvmPackagePartProvider(environment) ); diff --git a/compiler/tests-common/org/jetbrains/kotlin/resolve/lazy/JvmResolveUtil.java b/compiler/tests-common/org/jetbrains/kotlin/resolve/lazy/JvmResolveUtil.java index 960d881543e..3590e85038b 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/resolve/lazy/JvmResolveUtil.java +++ b/compiler/tests-common/org/jetbrains/kotlin/resolve/lazy/JvmResolveUtil.java @@ -22,19 +22,18 @@ import org.jetbrains.kotlin.analyzer.AnalysisResult; import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport; import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider; import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment; -import org.jetbrains.kotlin.context.ModuleContext; +import org.jetbrains.kotlin.config.CompilerConfiguration; import org.jetbrains.kotlin.descriptors.PackagePartProvider; import org.jetbrains.kotlin.psi.KtFile; import org.jetbrains.kotlin.resolve.AnalyzingUtils; -import org.jetbrains.kotlin.resolve.BindingTrace; import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM; import java.util.Collection; import java.util.Collections; public class JvmResolveUtil { - public static String TEST_MODULE_NAME = "java-integration-test"; + @NotNull public static AnalysisResult analyzeOneFileWithJavaIntegrationAndCheckForErrors(@NotNull KtFile file) { return analyzeOneFileWithJavaIntegrationAndCheckForErrors(file, PackagePartProvider.Companion.getEMPTY()); @@ -52,12 +51,12 @@ public class JvmResolveUtil { } @NotNull - public static AnalysisResult analyzeOneFileWithJavaIntegration(@NotNull KtFile file, @NotNull KotlinCoreEnvironment environment) { + public static AnalysisResult analyzeOneFileWithJavaIntegration(@NotNull KtFile file, @NotNull KotlinCoreEnvironment environment) { return analyzeOneFileWithJavaIntegration(file, new JvmPackagePartProvider(environment)); } @NotNull - public static AnalysisResult analyzeOneFileWithJavaIntegration(@NotNull KtFile file, @NotNull PackagePartProvider provider) { + private static AnalysisResult analyzeOneFileWithJavaIntegration(@NotNull KtFile file, @NotNull PackagePartProvider provider) { return analyzeFilesWithJavaIntegration(file.getProject(), Collections.singleton(file), provider); } @@ -101,17 +100,14 @@ public class JvmResolveUtil { } @NotNull - public static AnalysisResult analyzeFilesWithJavaIntegration( + private static AnalysisResult analyzeFilesWithJavaIntegration( @NotNull Project project, @NotNull Collection files, @NotNull PackagePartProvider packagePartProvider ) { - - ModuleContext moduleContext = TopDownAnalyzerFacadeForJVM.createContextWithSealedModule(project, TEST_MODULE_NAME); - - BindingTrace trace = new CliLightClassGenerationSupport.CliBindingTrace(); - - return TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegrationWithCustomContext(moduleContext, files, trace, null, null, - packagePartProvider); + return TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegrationWithCustomContext( + TopDownAnalyzerFacadeForJVM.createContextWithSealedModule(project, TEST_MODULE_NAME), + files, new CliLightClassGenerationSupport.CliBindingTrace(), CompilerConfiguration.EMPTY, packagePartProvider + ); } } diff --git a/compiler/tests-common/org/jetbrains/kotlin/resolve/lazy/LazyResolveTestUtil.java b/compiler/tests-common/org/jetbrains/kotlin/resolve/lazy/LazyResolveTestUtil.java index c413501352d..3a0a214124d 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/resolve/lazy/LazyResolveTestUtil.java +++ b/compiler/tests-common/org/jetbrains/kotlin/resolve/lazy/LazyResolveTestUtil.java @@ -58,29 +58,20 @@ public class LazyResolveTestUtil { ) { ModuleContext moduleContext = TopDownAnalyzerFacadeForJVM.createContextWithSealedModule(project, JvmResolveUtil.TEST_MODULE_NAME); - TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegrationNoIncremental( - moduleContext, sourceFiles, trace, TopDownAnalysisMode.TopLevelDeclarations, + TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration( + moduleContext, sourceFiles, trace, TopDownAnalysisMode.TopLevelDeclarations, environment.getConfiguration(), new JvmPackagePartProvider(environment) ); return moduleContext.getModule(); } - @NotNull - public static KotlinCodeAnalyzer resolveLazilyWithSession( - @NotNull List files, - @NotNull KotlinCoreEnvironment environment, - boolean addBuiltIns - ) { - return LazyResolveTestUtilsKt.createResolveSessionForFiles(environment.getProject(), files, addBuiltIns); - } - public static ModuleDescriptor resolveLazily(List files, KotlinCoreEnvironment environment) { return resolveLazily(files, environment, true); } public static ModuleDescriptor resolveLazily(List files, KotlinCoreEnvironment environment, boolean addBuiltIns) { - return resolveLazilyWithSession(files, environment, addBuiltIns).getModuleDescriptor(); + return LazyResolveTestUtilsKt.createResolveSessionForFiles(environment.getProject(), files, addBuiltIns).getModuleDescriptor(); } @NotNull diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java index 1662a339330..32e863f4400 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.java @@ -28,6 +28,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport; import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider; +import org.jetbrains.kotlin.config.CompilerConfiguration; import org.jetbrains.kotlin.context.ContextKt; import org.jetbrains.kotlin.context.GlobalContext; import org.jetbrains.kotlin.context.ModuleContext; @@ -238,17 +239,16 @@ public abstract class AbstractDiagnosticsTest extends BaseDiagnosticsTest { protected void analyzeModuleContents( @NotNull ModuleContext moduleContext, - @NotNull List jetFiles, + @NotNull List files, @NotNull BindingTrace moduleTrace ) { // New JavaDescriptorResolver is created for each module, which is good because it emulates different Java libraries for each module, // albeit with same class names TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegrationWithCustomContext( moduleContext, - jetFiles, + files, moduleTrace, - null, - null, + getEnvironment().getConfiguration(), new JvmPackagePartProvider(getEnvironment()) ); } diff --git a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextConsistencyTest.kt b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextConsistencyTest.kt index 07e29b407ae..02001641822 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextConsistencyTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextConsistencyTest.kt @@ -18,11 +18,11 @@ package org.jetbrains.kotlin.idea.decompiler.textBuilder import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil import org.jetbrains.kotlin.idea.caches.resolve.IDEPackagePartProvider -import org.jetbrains.kotlin.idea.decompiler.classFile.DeserializerForClassfileDecompiler import org.jetbrains.kotlin.idea.decompiler.classFile.buildDecompiledTextForClassFile import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor import org.jetbrains.kotlin.idea.test.PluginTestCaseBase @@ -51,7 +51,7 @@ class DecompiledTextConsistencyTest : TextConsistencyBaseTest() { override fun getModuleDescriptor(): ModuleDescriptor = TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegrationWithCustomContext( TopDownAnalyzerFacadeForJVM.createContextWithSealedModule(project, JvmResolveUtil.TEST_MODULE_NAME), - listOf(), BindingTraceContext(), null, null, + listOf(), BindingTraceContext(), CompilerConfiguration.EMPTY, IDEPackagePartProvider(GlobalSearchScope.allScope(project)) ).moduleDescriptor