From 6d6488e7955b36d785acf78984c135d8c621f212 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 19 May 2016 16:21:45 +0300 Subject: [PATCH] Pass CompilerConfiguration to TopDownAnalyzerFacadeForJVM In most cases, the configuration can be loaded from KotlinCoreEnvironment. In other cases, such as IDE tests, there's no environment, so we pass EMPTY. Since currently the configuration is only used to load incremental compilation components and module information, it's fine to pass EMPTY --- .../compiler/KotlinToJVMBytecodeCompiler.kt | 10 +++---- .../jvm/TopDownAnalyzerFacadeForJVM.java | 29 +++++++------------ .../kotlin/config/CompilerConfiguration.java | 6 ++++ .../jvm/compiler/AbstractLoadJavaTest.java | 13 ++++----- .../kotlin/resolve/lazy/JvmResolveUtil.java | 22 ++++++-------- .../resolve/lazy/LazyResolveTestUtil.java | 15 ++-------- .../checkers/AbstractDiagnosticsTest.java | 8 ++--- .../DecompiledTextConsistencyTest.kt | 4 +-- 8 files changed, 45 insertions(+), 62 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 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