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
This commit is contained in:
Alexander Udalov
2016-05-19 16:21:45 +03:00
parent 6c0ff40197
commit 6d6488e795
8 changed files with 45 additions and 62 deletions
@@ -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() {
@@ -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<KtFile> 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<KtFile> files,
@NotNull BindingTrace trace,
@Nullable List<Module> 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<KtFile> files,
@NotNull BindingTrace trace,
@NotNull TopDownAnalysisMode topDownAnalysisMode,
@Nullable List<Module> 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<TargetId> targetIds = null;
List<Module> modules = configuration.get(JVMConfigurationKeys.MODULES);
if (modules != null) {
targetIds = new ArrayList<TargetId>(modules.size());
@@ -24,9 +24,15 @@ import java.util.*;
@SuppressWarnings("unchecked")
public class CompilerConfiguration {
public static CompilerConfiguration EMPTY = new CompilerConfiguration();
private final Map<Key, Object> map = new HashMap<Key, Object>();
private boolean readOnly = false;
static {
EMPTY.setReadOnly(true);
}
@Nullable
public <T> T get(@NotNull CompilerConfigurationKey<T> key) {
T data = (T) map.get(key.ideaKey);
@@ -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)
);
@@ -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<KtFile> 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
);
}
}
@@ -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<KtFile> files,
@NotNull KotlinCoreEnvironment environment,
boolean addBuiltIns
) {
return LazyResolveTestUtilsKt.createResolveSessionForFiles(environment.getProject(), files, addBuiltIns);
}
public static ModuleDescriptor resolveLazily(List<KtFile> files, KotlinCoreEnvironment environment) {
return resolveLazily(files, environment, true);
}
public static ModuleDescriptor resolveLazily(List<KtFile> files, KotlinCoreEnvironment environment, boolean addBuiltIns) {
return resolveLazilyWithSession(files, environment, addBuiltIns).getModuleDescriptor();
return LazyResolveTestUtilsKt.createResolveSessionForFiles(environment.getProject(), files, addBuiltIns).getModuleDescriptor();
}
@NotNull
@@ -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<KtFile> jetFiles,
@NotNull List<KtFile> 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())
);
}
@@ -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