Use ModuleDescriptor instead of ModuleConfiguration

This commit is contained in:
Andrey Breslav
2013-04-16 19:32:50 +04:00
parent e29418cde5
commit a72e49d8f7
48 changed files with 208 additions and 244 deletions
@@ -95,7 +95,7 @@ public class ReplInterpreter {
true, true,
Collections.<AnalyzerScriptParameter>emptyList()); Collections.<AnalyzerScriptParameter>emptyList());
injector = new InjectorForTopDownAnalyzerForJvm(project, topDownAnalysisParameters, trace, module); injector = new InjectorForTopDownAnalyzerForJvm(project, topDownAnalysisParameters, trace, module);
module.setModuleConfiguration(injector.getModuleConfiguration()); module.setModuleConfiguration(injector.getModuleDescriptor().getModuleConfiguration());
List<URL> classpath = Lists.newArrayList(); List<URL> classpath = Lists.newArrayList();
@@ -225,7 +225,7 @@ public class ReplInterpreter {
earierScripts.add(Pair.create(earlierLine.getScriptDescriptor(), earlierLine.getClassName())); earierScripts.add(Pair.create(earlierLine.getScriptDescriptor(), earlierLine.getClassName()));
} }
BindingContext bindingContext = AnalyzeExhaust.success(trace.getBindingContext(), injector.getModuleConfiguration()).getBindingContext(); BindingContext bindingContext = AnalyzeExhaust.success(trace.getBindingContext(), module).getBindingContext();
GenerationState generationState = new GenerationState(psiFile.getProject(), ClassBuilderFactories.binaries(false), GenerationState generationState = new GenerationState(psiFile.getProject(), ClassBuilderFactories.binaries(false),
bindingContext, Collections.singletonList(psiFile)); bindingContext, Collections.singletonList(psiFile));
generationState.getScriptCodegen().compileScript(psiFile.getScript(), scriptClassName, earierScripts, generationState.getScriptCodegen().compileScript(psiFile.getScript(), scriptClassName, earierScripts,
@@ -61,7 +61,6 @@ import org.jetbrains.jet.lang.resolve.java.resolver.JavaValueParameterResolver;
import org.jetbrains.jet.lang.resolve.java.resolver.JavaFunctionResolver; import org.jetbrains.jet.lang.resolve.java.resolver.JavaFunctionResolver;
import org.jetbrains.jet.lang.resolve.java.resolver.JavaInnerClassResolver; import org.jetbrains.jet.lang.resolve.java.resolver.JavaInnerClassResolver;
import org.jetbrains.jet.lang.resolve.java.resolver.JavaPropertyResolver; import org.jetbrains.jet.lang.resolve.java.resolver.JavaPropertyResolver;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import javax.annotation.PreDestroy; import javax.annotation.PreDestroy;
@@ -78,7 +77,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
private final TopDownAnalysisParameters topDownAnalysisParameters; private final TopDownAnalysisParameters topDownAnalysisParameters;
private final BindingTrace bindingTrace; private final BindingTrace bindingTrace;
private final ModuleDescriptorImpl moduleDescriptor; private final ModuleDescriptorImpl moduleDescriptor;
private JavaBridgeConfiguration moduleConfiguration; private JavaBridgeConfiguration javaBridgeConfiguration;
private JavaDescriptorResolver javaDescriptorResolver; private JavaDescriptorResolver javaDescriptorResolver;
private PsiClassFinderImpl psiClassFinder; private PsiClassFinderImpl psiClassFinder;
private NamespaceFactoryImpl namespaceFactory; private NamespaceFactoryImpl namespaceFactory;
@@ -130,7 +129,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
this.topDownAnalysisParameters = topDownAnalysisParameters; this.topDownAnalysisParameters = topDownAnalysisParameters;
this.bindingTrace = bindingTrace; this.bindingTrace = bindingTrace;
this.moduleDescriptor = moduleDescriptor; this.moduleDescriptor = moduleDescriptor;
this.moduleConfiguration = new JavaBridgeConfiguration(); this.javaBridgeConfiguration = new JavaBridgeConfiguration();
this.javaDescriptorResolver = new JavaDescriptorResolver(); this.javaDescriptorResolver = new JavaDescriptorResolver();
this.psiClassFinder = new PsiClassFinderImpl(); this.psiClassFinder = new PsiClassFinderImpl();
this.namespaceFactory = new NamespaceFactoryImpl(); this.namespaceFactory = new NamespaceFactoryImpl();
@@ -198,7 +197,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
this.descriptorResolver.setExpressionTypingServices(expressionTypingServices); this.descriptorResolver.setExpressionTypingServices(expressionTypingServices);
this.descriptorResolver.setTypeResolver(typeResolver); this.descriptorResolver.setTypeResolver(typeResolver);
this.moduleConfiguration.setJavaSemanticServices(javaSemanticServices); this.javaBridgeConfiguration.setJavaSemanticServices(javaSemanticServices);
javaDescriptorResolver.setClassResolver(javaClassResolver); javaDescriptorResolver.setClassResolver(javaClassResolver);
javaDescriptorResolver.setConstructorResolver(javaConstructorResolver); javaDescriptorResolver.setConstructorResolver(javaConstructorResolver);
@@ -209,7 +208,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
psiClassFinder.setProject(project); psiClassFinder.setProject(project);
this.namespaceFactory.setConfiguration(moduleConfiguration);
this.namespaceFactory.setModuleDescriptor(moduleDescriptor); this.namespaceFactory.setModuleDescriptor(moduleDescriptor);
this.namespaceFactory.setTrace(bindingTrace); this.namespaceFactory.setTrace(bindingTrace);
@@ -241,14 +239,14 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
typeResolver.setAnnotationResolver(annotationResolver); typeResolver.setAnnotationResolver(annotationResolver);
typeResolver.setDescriptorResolver(descriptorResolver); typeResolver.setDescriptorResolver(descriptorResolver);
typeResolver.setModuleConfiguration(moduleConfiguration); typeResolver.setModuleDescriptor(moduleDescriptor);
typeResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver); typeResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver);
candidateResolver.setArgumentTypeResolver(argumentTypeResolver); candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
importsResolver.setConfiguration(moduleConfiguration);
importsResolver.setContext(topDownAnalysisContext); importsResolver.setContext(topDownAnalysisContext);
importsResolver.setImportsFactory(jetImportsFactory); importsResolver.setImportsFactory(jetImportsFactory);
importsResolver.setModuleDescriptor(moduleDescriptor);
importsResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver); importsResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver);
importsResolver.setTrace(bindingTrace); importsResolver.setTrace(bindingTrace);
@@ -336,7 +334,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
javaPropertyResolver.setSemanticServices(javaSemanticServices); javaPropertyResolver.setSemanticServices(javaSemanticServices);
javaPropertyResolver.setTrace(bindingTrace); javaPropertyResolver.setTrace(bindingTrace);
moduleConfiguration.init(); javaBridgeConfiguration.init();
psiClassFinder.initialize(); psiClassFinder.initialize();
@@ -382,8 +380,12 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
return this.bindingTrace; return this.bindingTrace;
} }
public ModuleConfiguration getModuleConfiguration() { public ModuleDescriptorImpl getModuleDescriptor() {
return this.moduleConfiguration; return this.moduleDescriptor;
}
public JavaBridgeConfiguration getJavaBridgeConfiguration() {
return this.javaBridgeConfiguration;
} }
public NamespaceFactoryImpl getNamespaceFactory() { public NamespaceFactoryImpl getNamespaceFactory() {
@@ -31,6 +31,7 @@ import org.jetbrains.jet.di.InjectorForTopDownAnalyzerForJvm;
import org.jetbrains.jet.lang.DefaultModuleConfiguration; import org.jetbrains.jet.lang.DefaultModuleConfiguration;
import org.jetbrains.jet.lang.ModuleConfiguration; import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap; import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl; import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetFile;
@@ -72,11 +73,11 @@ public enum AnalyzerFacadeForJVM implements AnalyzerFacade {
@NotNull Predicate<PsiFile> filesForBodiesResolve, @NotNull Predicate<PsiFile> filesForBodiesResolve,
@NotNull BindingTrace headersTraceContext, @NotNull BindingTrace headersTraceContext,
@NotNull BodiesResolveContext bodiesResolveContext, @NotNull BodiesResolveContext bodiesResolveContext,
@NotNull ModuleConfiguration configuration @NotNull ModuleDescriptor module
) { ) {
return AnalyzerFacadeForEverything.analyzeBodiesInFilesWithJavaIntegration( return AnalyzerFacadeForEverything.analyzeBodiesInFilesWithJavaIntegration(
project, scriptParameters, filesForBodiesResolve, project, scriptParameters, filesForBodiesResolve,
headersTraceContext, bodiesResolveContext, configuration); headersTraceContext, bodiesResolveContext, module);
} }
@NotNull @NotNull
@@ -136,7 +137,7 @@ public enum AnalyzerFacadeForJVM implements AnalyzerFacade {
ModuleDescriptorImpl lazyModule = new ModuleDescriptorImpl(Name.special("<lazy module>")); ModuleDescriptorImpl lazyModule = new ModuleDescriptorImpl(Name.special("<lazy module>"));
lazyModule.setModuleConfiguration(moduleConfiguration); lazyModule.setModuleConfiguration(moduleConfiguration);
return new ResolveSession(fileProject, storageManager, lazyModule, moduleConfiguration, declarationProviderFactory, javaResolverTrace); return new ResolveSession(fileProject, storageManager, lazyModule, declarationProviderFactory, javaResolverTrace);
} }
public static AnalyzeExhaust analyzeOneFileWithJavaIntegrationAndCheckForErrors( public static AnalyzeExhaust analyzeOneFileWithJavaIntegrationAndCheckForErrors(
@@ -209,13 +210,13 @@ public enum AnalyzerFacadeForJVM implements AnalyzerFacade {
InjectorForTopDownAnalyzerForJvm injector = new InjectorForTopDownAnalyzerForJvm( InjectorForTopDownAnalyzerForJvm injector = new InjectorForTopDownAnalyzerForJvm(
project, topDownAnalysisParameters, project, topDownAnalysisParameters,
new ObservableBindingTrace(trace), owner); new ObservableBindingTrace(trace), owner);
owner.setModuleConfiguration(injector.getModuleConfiguration()); owner.setModuleConfiguration(injector.getJavaBridgeConfiguration());
try { try {
injector.getTopDownAnalyzer().analyzeFiles(files, scriptParameters); injector.getTopDownAnalyzer().analyzeFiles(files, scriptParameters);
BodiesResolveContext bodiesResolveContext = storeContextForBodiesResolve ? BodiesResolveContext bodiesResolveContext = storeContextForBodiesResolve ?
new CachedBodiesResolveContext(injector.getTopDownAnalysisContext()) : new CachedBodiesResolveContext(injector.getTopDownAnalysisContext()) :
null; null;
return AnalyzeExhaust.success(trace.getBindingContext(), bodiesResolveContext, injector.getModuleConfiguration()); return AnalyzeExhaust.success(trace.getBindingContext(), bodiesResolveContext, owner);
} finally { } finally {
injector.destroy(); injector.destroy();
} }
@@ -18,70 +18,43 @@ package org.jetbrains.jet.analyzer;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.ModuleConfiguration; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.BodiesResolveContext; import org.jetbrains.jet.lang.resolve.BodiesResolveContext;
import org.jetbrains.jet.lang.resolve.ImportPath; import org.jetbrains.jet.lang.types.ErrorUtils;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
import java.util.Collections;
import java.util.List;
public class AnalyzeExhaust { public class AnalyzeExhaust {
private static final ModuleConfiguration ERROR_CONFIGURATION = new ModuleConfiguration() {
@Override
public List<ImportPath> getDefaultImports() {
return Collections.emptyList();
}
@Override public static AnalyzeExhaust success(@NotNull BindingContext bindingContext, @NotNull ModuleDescriptor module) {
public void extendNamespaceScope(@NotNull BindingTrace trace, @NotNull NamespaceDescriptor namespaceDescriptor, @NotNull WritableScope namespaceMemberScope) { return new AnalyzeExhaust(bindingContext, module, null, null);
}
@NotNull
@Override
public PlatformToKotlinClassMap getPlatformToKotlinClassMap() {
return PlatformToKotlinClassMap.EMPTY;
}
@Override
public String toString() {
return "ERROR_CONFIGURATION";
}
};
public static AnalyzeExhaust success(@NotNull BindingContext bindingContext, @NotNull ModuleConfiguration configuration) {
return new AnalyzeExhaust(bindingContext, configuration, null, null);
} }
public static AnalyzeExhaust success(@NotNull BindingContext bindingContext, public static AnalyzeExhaust success(@NotNull BindingContext bindingContext,
@Nullable BodiesResolveContext bodiesResolveContext, @Nullable BodiesResolveContext bodiesResolveContext,
@NotNull ModuleConfiguration configuration @NotNull ModuleDescriptor module
) { ) {
return new AnalyzeExhaust(bindingContext, configuration, bodiesResolveContext, null); return new AnalyzeExhaust(bindingContext, module, bodiesResolveContext, null);
} }
public static AnalyzeExhaust error(@NotNull BindingContext bindingContext, @NotNull Throwable error) { public static AnalyzeExhaust error(@NotNull BindingContext bindingContext, @NotNull Throwable error) {
return new AnalyzeExhaust(bindingContext, ERROR_CONFIGURATION, null, error); return new AnalyzeExhaust(bindingContext, ErrorUtils.getErrorModule(), null, error);
} }
private final BindingContext bindingContext; private final BindingContext bindingContext;
private final Throwable error; private final Throwable error;
private final BodiesResolveContext bodiesResolveContext; private final BodiesResolveContext bodiesResolveContext;
private final ModuleConfiguration configuration; private final ModuleDescriptor moduleDescriptor;
private AnalyzeExhaust( private AnalyzeExhaust(
@NotNull BindingContext bindingContext, @NotNull BindingContext bindingContext,
@NotNull ModuleConfiguration configuration, @NotNull ModuleDescriptor moduleDescriptor,
@Nullable BodiesResolveContext bodiesResolveContext, @Nullable BodiesResolveContext bodiesResolveContext,
@Nullable Throwable error @Nullable Throwable error
) { ) {
this.bindingContext = bindingContext; this.bindingContext = bindingContext;
this.error = error; this.error = error;
this.bodiesResolveContext = bodiesResolveContext; this.bodiesResolveContext = bodiesResolveContext;
this.configuration = configuration; this.moduleDescriptor = moduleDescriptor;
} }
@Nullable @Nullable
@@ -110,7 +83,7 @@ public class AnalyzeExhaust {
} }
@NotNull @NotNull
public ModuleConfiguration getModuleConfiguration() { public ModuleDescriptor getModuleDescriptor() {
return configuration; return moduleDescriptor;
} }
} }
@@ -20,7 +20,7 @@ import com.google.common.base.Predicate;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.ModuleConfiguration; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.AnalyzerScriptParameter; import org.jetbrains.jet.lang.resolve.AnalyzerScriptParameter;
import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.BindingTrace;
@@ -47,7 +47,7 @@ public interface AnalyzerFacade {
@NotNull Predicate<PsiFile> filesForBodiesResolve, @NotNull Predicate<PsiFile> filesForBodiesResolve,
@NotNull BindingTrace traceContext, @NotNull BindingTrace traceContext,
@NotNull BodiesResolveContext bodiesResolveContext, @NotNull BodiesResolveContext bodiesResolveContext,
@NotNull ModuleConfiguration configuration @NotNull ModuleDescriptor module
); );
@NotNull @NotNull
@@ -21,12 +21,8 @@ import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.di.InjectorForBodyResolve; import org.jetbrains.jet.di.InjectorForBodyResolve;
import org.jetbrains.jet.lang.ModuleConfiguration; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.resolve.AnalyzerScriptParameter; import org.jetbrains.jet.lang.resolve.*;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.BodiesResolveContext;
import org.jetbrains.jet.lang.resolve.ObservableBindingTrace;
import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
import java.util.List; import java.util.List;
@@ -39,7 +35,7 @@ public class AnalyzerFacadeForEverything {
Project project, List<AnalyzerScriptParameter> scriptParameters, Predicate<PsiFile> filesToAnalyzeCompletely, Project project, List<AnalyzerScriptParameter> scriptParameters, Predicate<PsiFile> filesToAnalyzeCompletely,
@NotNull BindingTrace traceContext, @NotNull BindingTrace traceContext,
@NotNull BodiesResolveContext bodiesResolveContext, @NotNull BodiesResolveContext bodiesResolveContext,
@NotNull ModuleConfiguration configuration) { @NotNull ModuleDescriptor module) {
TopDownAnalysisParameters topDownAnalysisParameters = new TopDownAnalysisParameters( TopDownAnalysisParameters topDownAnalysisParameters = new TopDownAnalysisParameters(
filesToAnalyzeCompletely, false, false, scriptParameters); filesToAnalyzeCompletely, false, false, scriptParameters);
@@ -49,11 +45,11 @@ public class AnalyzerFacadeForEverything {
InjectorForBodyResolve injector = new InjectorForBodyResolve( InjectorForBodyResolve injector = new InjectorForBodyResolve(
project, topDownAnalysisParameters, project, topDownAnalysisParameters,
new ObservableBindingTrace(traceContext), new ObservableBindingTrace(traceContext),
bodiesResolveContext, configuration); bodiesResolveContext, module);
try { try {
injector.getBodyResolver().resolveBodies(); injector.getBodyResolver().resolveBodies();
return AnalyzeExhaust.success(traceContext.getBindingContext(), configuration); return AnalyzeExhaust.success(traceContext.getBindingContext(), module);
} finally { } finally {
injector.destroy(); injector.destroy();
} }
@@ -21,7 +21,7 @@ import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters; import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.BodiesResolveContext; import org.jetbrains.jet.lang.resolve.BodiesResolveContext;
import org.jetbrains.jet.lang.ModuleConfiguration; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.resolve.calls.CallResolver; import org.jetbrains.jet.lang.resolve.calls.CallResolver;
import org.jetbrains.jet.lang.resolve.calls.ArgumentTypeResolver; import org.jetbrains.jet.lang.resolve.calls.ArgumentTypeResolver;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
@@ -46,7 +46,7 @@ public class InjectorForBodyResolve {
private final TopDownAnalysisParameters topDownAnalysisParameters; private final TopDownAnalysisParameters topDownAnalysisParameters;
private final BindingTrace bindingTrace; private final BindingTrace bindingTrace;
private final BodiesResolveContext bodiesResolveContext; private final BodiesResolveContext bodiesResolveContext;
private final ModuleConfiguration moduleConfiguration; private final ModuleDescriptor moduleDescriptor;
private CallResolver callResolver; private CallResolver callResolver;
private ArgumentTypeResolver argumentTypeResolver; private ArgumentTypeResolver argumentTypeResolver;
private ExpressionTypingServices expressionTypingServices; private ExpressionTypingServices expressionTypingServices;
@@ -66,14 +66,14 @@ public class InjectorForBodyResolve {
@NotNull TopDownAnalysisParameters topDownAnalysisParameters, @NotNull TopDownAnalysisParameters topDownAnalysisParameters,
@NotNull BindingTrace bindingTrace, @NotNull BindingTrace bindingTrace,
@NotNull BodiesResolveContext bodiesResolveContext, @NotNull BodiesResolveContext bodiesResolveContext,
@NotNull ModuleConfiguration moduleConfiguration @NotNull ModuleDescriptor moduleDescriptor
) { ) {
this.bodyResolver = new BodyResolver(); this.bodyResolver = new BodyResolver();
this.project = project; this.project = project;
this.topDownAnalysisParameters = topDownAnalysisParameters; this.topDownAnalysisParameters = topDownAnalysisParameters;
this.bindingTrace = bindingTrace; this.bindingTrace = bindingTrace;
this.bodiesResolveContext = bodiesResolveContext; this.bodiesResolveContext = bodiesResolveContext;
this.moduleConfiguration = moduleConfiguration; this.moduleDescriptor = moduleDescriptor;
this.callResolver = new CallResolver(); this.callResolver = new CallResolver();
this.argumentTypeResolver = new ArgumentTypeResolver(); this.argumentTypeResolver = new ArgumentTypeResolver();
this.expressionTypingServices = new ExpressionTypingServices(); this.expressionTypingServices = new ExpressionTypingServices();
@@ -123,7 +123,7 @@ public class InjectorForBodyResolve {
typeResolver.setAnnotationResolver(annotationResolver); typeResolver.setAnnotationResolver(annotationResolver);
typeResolver.setDescriptorResolver(descriptorResolver); typeResolver.setDescriptorResolver(descriptorResolver);
typeResolver.setModuleConfiguration(moduleConfiguration); typeResolver.setModuleDescriptor(moduleDescriptor);
typeResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver); typeResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver);
candidateResolver.setArgumentTypeResolver(argumentTypeResolver); candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
@@ -18,7 +18,7 @@ package org.jetbrains.jet.di;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession; import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.ModuleConfiguration; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.resolve.DescriptorResolver; import org.jetbrains.jet.lang.resolve.DescriptorResolver;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
import org.jetbrains.jet.lang.resolve.TypeResolver; import org.jetbrains.jet.lang.resolve.TypeResolver;
@@ -38,7 +38,7 @@ public class InjectorForLazyResolve {
private final Project project; private final Project project;
private final ResolveSession resolveSession; private final ResolveSession resolveSession;
private final ModuleConfiguration moduleConfiguration; private final ModuleDescriptor moduleDescriptor;
private DescriptorResolver descriptorResolver; private DescriptorResolver descriptorResolver;
private ExpressionTypingServices expressionTypingServices; private ExpressionTypingServices expressionTypingServices;
private TypeResolver typeResolver; private TypeResolver typeResolver;
@@ -54,11 +54,11 @@ public class InjectorForLazyResolve {
public InjectorForLazyResolve( public InjectorForLazyResolve(
@NotNull Project project, @NotNull Project project,
@NotNull ResolveSession resolveSession, @NotNull ResolveSession resolveSession,
@NotNull ModuleConfiguration moduleConfiguration @NotNull ModuleDescriptor moduleDescriptor
) { ) {
this.project = project; this.project = project;
this.resolveSession = resolveSession; this.resolveSession = resolveSession;
this.moduleConfiguration = moduleConfiguration; this.moduleDescriptor = moduleDescriptor;
this.descriptorResolver = new DescriptorResolver(); this.descriptorResolver = new DescriptorResolver();
this.expressionTypingServices = new ExpressionTypingServices(); this.expressionTypingServices = new ExpressionTypingServices();
this.typeResolver = new TypeResolver(); this.typeResolver = new TypeResolver();
@@ -83,7 +83,7 @@ public class InjectorForLazyResolve {
this.typeResolver.setAnnotationResolver(annotationResolver); this.typeResolver.setAnnotationResolver(annotationResolver);
this.typeResolver.setDescriptorResolver(descriptorResolver); this.typeResolver.setDescriptorResolver(descriptorResolver);
this.typeResolver.setModuleConfiguration(moduleConfiguration); this.typeResolver.setModuleDescriptor(moduleDescriptor);
this.typeResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver); this.typeResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver);
this.annotationResolver.setCallResolver(callResolver); this.annotationResolver.setCallResolver(callResolver);
@@ -18,7 +18,7 @@ package org.jetbrains.jet.di;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.ModuleConfiguration; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver; import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver;
import org.jetbrains.jet.lang.resolve.calls.CallResolver; import org.jetbrains.jet.lang.resolve.calls.CallResolver;
import org.jetbrains.jet.lang.resolve.calls.ArgumentTypeResolver; import org.jetbrains.jet.lang.resolve.calls.ArgumentTypeResolver;
@@ -35,7 +35,7 @@ public class InjectorForMacros {
private ExpressionTypingServices expressionTypingServices; private ExpressionTypingServices expressionTypingServices;
private final Project project; private final Project project;
private final ModuleConfiguration moduleConfiguration; private final ModuleDescriptor moduleDescriptor;
private CallExpressionResolver callExpressionResolver; private CallExpressionResolver callExpressionResolver;
private CallResolver callResolver; private CallResolver callResolver;
private ArgumentTypeResolver argumentTypeResolver; private ArgumentTypeResolver argumentTypeResolver;
@@ -47,11 +47,11 @@ public class InjectorForMacros {
public InjectorForMacros( public InjectorForMacros(
@NotNull Project project, @NotNull Project project,
@NotNull ModuleConfiguration moduleConfiguration @NotNull ModuleDescriptor moduleDescriptor
) { ) {
this.expressionTypingServices = new ExpressionTypingServices(); this.expressionTypingServices = new ExpressionTypingServices();
this.project = project; this.project = project;
this.moduleConfiguration = moduleConfiguration; this.moduleDescriptor = moduleDescriptor;
this.callExpressionResolver = new CallExpressionResolver(); this.callExpressionResolver = new CallExpressionResolver();
this.callResolver = new CallResolver(); this.callResolver = new CallResolver();
this.argumentTypeResolver = new ArgumentTypeResolver(); this.argumentTypeResolver = new ArgumentTypeResolver();
@@ -79,7 +79,7 @@ public class InjectorForMacros {
typeResolver.setAnnotationResolver(annotationResolver); typeResolver.setAnnotationResolver(annotationResolver);
typeResolver.setDescriptorResolver(descriptorResolver); typeResolver.setDescriptorResolver(descriptorResolver);
typeResolver.setModuleConfiguration(moduleConfiguration); typeResolver.setModuleDescriptor(moduleDescriptor);
typeResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver); typeResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver);
annotationResolver.setCallResolver(callResolver); annotationResolver.setCallResolver(callResolver);
@@ -16,11 +16,11 @@
package org.jetbrains.jet.di; package org.jetbrains.jet.di;
import org.jetbrains.jet.lang.ModuleConfiguration; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.resolve.TopDownAnalyzer; import org.jetbrains.jet.lang.resolve.TopDownAnalyzer;
public interface InjectorForTopDownAnalyzer { public interface InjectorForTopDownAnalyzer {
ModuleConfiguration getModuleConfiguration(); ModuleDescriptor getModuleDescriptor();
TopDownAnalyzer getTopDownAnalyzer(); TopDownAnalyzer getTopDownAnalyzer();
} }
@@ -26,7 +26,6 @@ import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters; import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl; import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolverDummyImpl; import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolverDummyImpl;
import org.jetbrains.jet.lang.resolve.NamespaceFactoryImpl; import org.jetbrains.jet.lang.resolve.NamespaceFactoryImpl;
import org.jetbrains.jet.lang.resolve.DeclarationResolver; import org.jetbrains.jet.lang.resolve.DeclarationResolver;
@@ -61,7 +60,6 @@ public class InjectorForTopDownAnalyzerBasic {
private final TopDownAnalysisParameters topDownAnalysisParameters; private final TopDownAnalysisParameters topDownAnalysisParameters;
private final BindingTrace bindingTrace; private final BindingTrace bindingTrace;
private final ModuleDescriptorImpl moduleDescriptor; private final ModuleDescriptorImpl moduleDescriptor;
private final ModuleConfiguration moduleConfiguration;
private DependencyClassByQualifiedNameResolverDummyImpl dependencyClassByQualifiedNameResolverDummy; private DependencyClassByQualifiedNameResolverDummyImpl dependencyClassByQualifiedNameResolverDummy;
private NamespaceFactoryImpl namespaceFactory; private NamespaceFactoryImpl namespaceFactory;
private DeclarationResolver declarationResolver; private DeclarationResolver declarationResolver;
@@ -85,8 +83,7 @@ public class InjectorForTopDownAnalyzerBasic {
@NotNull Project project, @NotNull Project project,
@NotNull TopDownAnalysisParameters topDownAnalysisParameters, @NotNull TopDownAnalysisParameters topDownAnalysisParameters,
@NotNull BindingTrace bindingTrace, @NotNull BindingTrace bindingTrace,
@NotNull ModuleDescriptorImpl moduleDescriptor, @NotNull ModuleDescriptorImpl moduleDescriptor
@NotNull ModuleConfiguration moduleConfiguration
) { ) {
this.topDownAnalyzer = new TopDownAnalyzer(); this.topDownAnalyzer = new TopDownAnalyzer();
this.topDownAnalysisContext = new TopDownAnalysisContext(); this.topDownAnalysisContext = new TopDownAnalysisContext();
@@ -98,7 +95,6 @@ public class InjectorForTopDownAnalyzerBasic {
this.topDownAnalysisParameters = topDownAnalysisParameters; this.topDownAnalysisParameters = topDownAnalysisParameters;
this.bindingTrace = bindingTrace; this.bindingTrace = bindingTrace;
this.moduleDescriptor = moduleDescriptor; this.moduleDescriptor = moduleDescriptor;
this.moduleConfiguration = moduleConfiguration;
this.dependencyClassByQualifiedNameResolverDummy = new DependencyClassByQualifiedNameResolverDummyImpl(); this.dependencyClassByQualifiedNameResolverDummy = new DependencyClassByQualifiedNameResolverDummyImpl();
this.namespaceFactory = new NamespaceFactoryImpl(); this.namespaceFactory = new NamespaceFactoryImpl();
this.declarationResolver = new DeclarationResolver(); this.declarationResolver = new DeclarationResolver();
@@ -150,7 +146,6 @@ public class InjectorForTopDownAnalyzerBasic {
this.descriptorResolver.setExpressionTypingServices(expressionTypingServices); this.descriptorResolver.setExpressionTypingServices(expressionTypingServices);
this.descriptorResolver.setTypeResolver(typeResolver); this.descriptorResolver.setTypeResolver(typeResolver);
namespaceFactory.setConfiguration(moduleConfiguration);
namespaceFactory.setModuleDescriptor(moduleDescriptor); namespaceFactory.setModuleDescriptor(moduleDescriptor);
namespaceFactory.setTrace(bindingTrace); namespaceFactory.setTrace(bindingTrace);
@@ -182,14 +177,14 @@ public class InjectorForTopDownAnalyzerBasic {
typeResolver.setAnnotationResolver(annotationResolver); typeResolver.setAnnotationResolver(annotationResolver);
typeResolver.setDescriptorResolver(descriptorResolver); typeResolver.setDescriptorResolver(descriptorResolver);
typeResolver.setModuleConfiguration(moduleConfiguration); typeResolver.setModuleDescriptor(moduleDescriptor);
typeResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver); typeResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver);
candidateResolver.setArgumentTypeResolver(argumentTypeResolver); candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
importsResolver.setConfiguration(moduleConfiguration);
importsResolver.setContext(topDownAnalysisContext); importsResolver.setContext(topDownAnalysisContext);
importsResolver.setImportsFactory(jetImportsFactory); importsResolver.setImportsFactory(jetImportsFactory);
importsResolver.setModuleDescriptor(moduleDescriptor);
importsResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver); importsResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver);
importsResolver.setTrace(bindingTrace); importsResolver.setTrace(bindingTrace);
@@ -261,4 +256,8 @@ public class InjectorForTopDownAnalyzerBasic {
return this.bindingTrace; return this.bindingTrace;
} }
public ModuleDescriptorImpl getModuleDescriptor() {
return this.moduleDescriptor;
}
} }
@@ -19,9 +19,13 @@ package org.jetbrains.jet.lang.descriptors;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.ModuleConfiguration; import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.lang.descriptors.impl.NamespaceDescriptorParent; import org.jetbrains.jet.lang.descriptors.impl.NamespaceDescriptorParent;
import org.jetbrains.jet.lang.resolve.ImportPath;
import org.jetbrains.jet.lang.types.TypeSubstitutor; import org.jetbrains.jet.lang.types.TypeSubstitutor;
import java.util.List;
public interface ModuleDescriptor extends DeclarationDescriptor, NamespaceDescriptorParent { public interface ModuleDescriptor extends DeclarationDescriptor, NamespaceDescriptorParent {
@Override @Override
@Nullable @Nullable
@@ -32,6 +36,12 @@ public interface ModuleDescriptor extends DeclarationDescriptor, NamespaceDescri
@NotNull @NotNull
ModuleConfiguration getModuleConfiguration(); ModuleConfiguration getModuleConfiguration();
@NotNull
List<ImportPath> getDefaultImports();
@NotNull
PlatformToKotlinClassMap getPlatformToKotlinClassMap();
@NotNull @NotNull
@Override @Override
ModuleDescriptor substitute(@NotNull TypeSubstitutor substitutor); ModuleDescriptor substitute(@NotNull TypeSubstitutor substitutor);
@@ -19,14 +19,17 @@ package org.jetbrains.jet.lang.descriptors;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.ModuleConfiguration; import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.descriptors.impl.DeclarationDescriptorImpl; import org.jetbrains.jet.lang.descriptors.impl.DeclarationDescriptorImpl;
import org.jetbrains.jet.lang.descriptors.impl.NamespaceDescriptorImpl; import org.jetbrains.jet.lang.descriptors.impl.NamespaceDescriptorImpl;
import org.jetbrains.jet.lang.resolve.ImportPath;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.types.TypeSubstitutor; import org.jetbrains.jet.lang.types.TypeSubstitutor;
import javax.inject.Inject; import javax.inject.Inject;
import java.util.Collections; import java.util.Collections;
import java.util.List;
public class ModuleDescriptorImpl extends DeclarationDescriptorImpl implements ClassOrNamespaceDescriptor, ModuleDescriptor { public class ModuleDescriptorImpl extends DeclarationDescriptorImpl implements ClassOrNamespaceDescriptor, ModuleDescriptor {
private NamespaceDescriptor rootNamepsace; private NamespaceDescriptor rootNamepsace;
@@ -63,6 +66,18 @@ public class ModuleDescriptorImpl extends DeclarationDescriptorImpl implements C
return moduleConfiguration; return moduleConfiguration;
} }
@NotNull
@Override
public List<ImportPath> getDefaultImports() {
return getModuleConfiguration().getDefaultImports();
}
@NotNull
@Override
public PlatformToKotlinClassMap getPlatformToKotlinClassMap() {
return getModuleConfiguration().getPlatformToKotlinClassMap();
}
@Inject @Inject
public ModuleDescriptorImpl setModuleConfiguration(@NotNull ModuleConfiguration moduleConfiguration) { public ModuleDescriptorImpl setModuleConfiguration(@NotNull ModuleConfiguration moduleConfiguration) {
this.moduleConfiguration = moduleConfiguration; this.moduleConfiguration = moduleConfiguration;
@@ -19,12 +19,8 @@ package org.jetbrains.jet.lang.resolve;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap; import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.JetScope;
@@ -42,7 +38,7 @@ public class ImportsResolver {
@NotNull @NotNull
private TopDownAnalysisContext context; private TopDownAnalysisContext context;
@NotNull @NotNull
private ModuleConfiguration configuration; private ModuleDescriptor moduleDescriptor;
@NotNull @NotNull
private QualifiedExpressionResolver qualifiedExpressionResolver; private QualifiedExpressionResolver qualifiedExpressionResolver;
@NotNull @NotNull
@@ -56,8 +52,8 @@ public class ImportsResolver {
} }
@Inject @Inject
public void setConfiguration(@NotNull ModuleConfiguration configuration) { public void setModuleDescriptor(@NotNull ModuleDescriptor moduleDescriptor) {
this.configuration = configuration; this.moduleDescriptor = moduleDescriptor;
} }
@Inject @Inject
@@ -95,7 +91,7 @@ public class ImportsResolver {
} }
private void processImportsInFile(@NotNull LookupMode lookupMode, WritableScope scope, List<JetImportDirective> directives, JetScope rootScope) { private void processImportsInFile(@NotNull LookupMode lookupMode, WritableScope scope, List<JetImportDirective> directives, JetScope rootScope) {
processImportsInFile(lookupMode, scope, directives, rootScope, configuration, trace, qualifiedExpressionResolver, importsFactory); processImportsInFile(lookupMode, scope, directives, rootScope, moduleDescriptor, trace, qualifiedExpressionResolver, importsFactory);
} }
public static void processImportsInFile( public static void processImportsInFile(
@@ -103,7 +99,7 @@ public class ImportsResolver {
@NotNull WritableScope namespaceScope, @NotNull WritableScope namespaceScope,
@NotNull List<JetImportDirective> importDirectives, @NotNull List<JetImportDirective> importDirectives,
@NotNull JetScope rootScope, @NotNull JetScope rootScope,
@NotNull ModuleConfiguration configuration, @NotNull ModuleDescriptor module,
@NotNull BindingTrace trace, @NotNull BindingTrace trace,
@NotNull QualifiedExpressionResolver qualifiedExpressionResolver, @NotNull QualifiedExpressionResolver qualifiedExpressionResolver,
@NotNull JetImportsFactory importsFactory @NotNull JetImportsFactory importsFactory
@@ -114,13 +110,13 @@ public class ImportsResolver {
namespaceScope.clearImports(); namespaceScope.clearImports();
} }
for (ImportPath defaultImportPath : configuration.getDefaultImports()) { for (ImportPath defaultImportPath : module.getDefaultImports()) {
TemporaryBindingTrace temporaryTrace = TemporaryBindingTrace.create( TemporaryBindingTrace temporaryTrace = TemporaryBindingTrace.create(
trace, "transient trace to resolve default imports"); //not to trace errors of default imports trace, "transient trace to resolve default imports"); //not to trace errors of default imports
JetImportDirective defaultImportDirective = importsFactory.createImportDirective(defaultImportPath); JetImportDirective defaultImportDirective = importsFactory.createImportDirective(defaultImportPath);
qualifiedExpressionResolver.processImportReference(defaultImportDirective, rootScope, namespaceScope, delayedImporter, qualifiedExpressionResolver.processImportReference(defaultImportDirective, rootScope, namespaceScope, delayedImporter,
temporaryTrace, configuration, lookupMode); temporaryTrace, module, lookupMode);
} }
Map<JetImportDirective, Collection<? extends DeclarationDescriptor>> resolvedDirectives = Maps.newHashMap(); Map<JetImportDirective, Collection<? extends DeclarationDescriptor>> resolvedDirectives = Maps.newHashMap();
@@ -128,7 +124,7 @@ public class ImportsResolver {
for (JetImportDirective importDirective : importDirectives) { for (JetImportDirective importDirective : importDirectives) {
Collection<? extends DeclarationDescriptor> descriptors = Collection<? extends DeclarationDescriptor> descriptors =
qualifiedExpressionResolver.processImportReference(importDirective, rootScope, namespaceScope, delayedImporter, qualifiedExpressionResolver.processImportReference(importDirective, rootScope, namespaceScope, delayedImporter,
trace, configuration, lookupMode); trace, module, lookupMode);
if (!descriptors.isEmpty()) { if (!descriptors.isEmpty()) {
resolvedDirectives.put(importDirective, descriptors); resolvedDirectives.put(importDirective, descriptors);
} }
@@ -136,7 +132,7 @@ public class ImportsResolver {
JetExpression importedReference = importDirective.getImportedReference(); JetExpression importedReference = importDirective.getImportedReference();
if (lookupMode != LookupMode.ONLY_CLASSES && importedReference != null) { if (lookupMode != LookupMode.ONLY_CLASSES && importedReference != null) {
for (DeclarationDescriptor descriptor : descriptors) { for (DeclarationDescriptor descriptor : descriptors) {
reportPlatformClassMappedToKotlin(configuration, trace, importedReference, descriptor); reportPlatformClassMappedToKotlin(module, trace, importedReference, descriptor);
} }
} }
} }
@@ -150,14 +146,14 @@ public class ImportsResolver {
} }
public static void reportPlatformClassMappedToKotlin( public static void reportPlatformClassMappedToKotlin(
@NotNull ModuleConfiguration configuration, @NotNull ModuleDescriptor module,
@NotNull BindingTrace trace, @NotNull BindingTrace trace,
@NotNull JetElement element, @NotNull JetElement element,
@NotNull DeclarationDescriptor descriptor @NotNull DeclarationDescriptor descriptor
) { ) {
if (!(descriptor instanceof ClassDescriptor)) return; if (!(descriptor instanceof ClassDescriptor)) return;
PlatformToKotlinClassMap platformToKotlinMap = configuration.getPlatformToKotlinClassMap(); PlatformToKotlinClassMap platformToKotlinMap = module.getPlatformToKotlinClassMap();
Collection<ClassDescriptor> kotlinAnalogsForClass = platformToKotlinMap.mapPlatformClass((ClassDescriptor) descriptor); Collection<ClassDescriptor> kotlinAnalogsForClass = platformToKotlinMap.mapPlatformClass((ClassDescriptor) descriptor);
if (!kotlinAnalogsForClass.isEmpty()) { if (!kotlinAnalogsForClass.isEmpty()) {
trace.report(PLATFORM_CLASS_MAPPED_TO_KOTLIN.on(element, kotlinAnalogsForClass)); trace.report(PLATFORM_CLASS_MAPPED_TO_KOTLIN.on(element, kotlinAnalogsForClass));
@@ -20,13 +20,15 @@ import com.google.common.collect.Sets;
import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl; import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.descriptors.impl.NamespaceDescriptorImpl; import org.jetbrains.jet.lang.descriptors.impl.NamespaceDescriptorImpl;
import org.jetbrains.jet.lang.descriptors.impl.NamespaceDescriptorParent; import org.jetbrains.jet.lang.descriptors.impl.NamespaceDescriptorParent;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.JetNamespaceHeader;
import org.jetbrains.jet.lang.psi.JetReferenceExpression;
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
@@ -45,7 +47,6 @@ public class NamespaceFactoryImpl implements NamespaceFactory {
private ModuleDescriptorImpl moduleDescriptor; private ModuleDescriptorImpl moduleDescriptor;
private BindingTrace trace; private BindingTrace trace;
private ModuleConfiguration configuration;
@Inject @Inject
public void setModuleDescriptor(ModuleDescriptorImpl moduleDescriptor) { public void setModuleDescriptor(ModuleDescriptorImpl moduleDescriptor) {
@@ -57,11 +58,6 @@ public class NamespaceFactoryImpl implements NamespaceFactory {
this.trace = trace; this.trace = trace;
} }
@Inject
public void setConfiguration(ModuleConfiguration configuration) {
this.configuration = configuration;
}
@NotNull @NotNull
public NamespaceDescriptorImpl createNamespaceDescriptorPathIfNeeded(@NotNull JetFile file, public NamespaceDescriptorImpl createNamespaceDescriptorPathIfNeeded(@NotNull JetFile file,
@NotNull JetScope outerScope, @NotNull JetScope outerScope,
@@ -190,7 +186,7 @@ public class NamespaceFactoryImpl implements NamespaceFactory {
namespaceDescriptor.initialize(scope); namespaceDescriptor.initialize(scope);
scope.changeLockLevel(WritableScope.LockLevel.BOTH); scope.changeLockLevel(WritableScope.LockLevel.BOTH);
// //
configuration.extendNamespaceScope(trace, namespaceDescriptor, scope); moduleDescriptor.getModuleConfiguration().extendNamespaceScope(trace, namespaceDescriptor, scope);
owner.addNamespace(namespaceDescriptor); owner.addNamespace(namespaceDescriptor);
if (expression != null) { if (expression != null) {
trace.record(BindingContext.NAMESPACE, expression, namespaceDescriptor); trace.record(BindingContext.NAMESPACE, expression, namespaceDescriptor);
@@ -22,7 +22,6 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.diagnostics.Errors; import org.jetbrains.jet.lang.diagnostics.Errors;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
@@ -49,9 +48,9 @@ public class QualifiedExpressionResolver {
@NotNull JetImportDirective importDirective, @NotNull JetImportDirective importDirective,
@NotNull JetScope scope, @NotNull JetScope scope,
@NotNull BindingTrace trace, @NotNull BindingTrace trace,
@NotNull ModuleConfiguration moduleConfiguration @NotNull ModuleDescriptor module
) { ) {
return processImportReference(importDirective, scope, scope, Importer.DO_NOTHING, trace, moduleConfiguration, LookupMode.EVERYTHING); return processImportReference(importDirective, scope, scope, Importer.DO_NOTHING, trace, module, LookupMode.EVERYTHING);
} }
@NotNull @NotNull
@@ -61,7 +60,7 @@ public class QualifiedExpressionResolver {
@NotNull JetScope scopeToCheckVisibility, @NotNull JetScope scopeToCheckVisibility,
@NotNull Importer importer, @NotNull Importer importer,
@NotNull BindingTrace trace, @NotNull BindingTrace trace,
@NotNull ModuleConfiguration moduleConfiguration, @NotNull ModuleDescriptor module,
@NotNull LookupMode lookupMode @NotNull LookupMode lookupMode
) { ) {
if (importDirective.isAbsoluteInRootNamespace()) { if (importDirective.isAbsoluteInRootNamespace()) {
@@ -94,7 +93,7 @@ public class QualifiedExpressionResolver {
} }
for (DeclarationDescriptor descriptor : descriptors) { for (DeclarationDescriptor descriptor : descriptors) {
importer.addAllUnderImport(descriptor, moduleConfiguration.getPlatformToKotlinClassMap()); importer.addAllUnderImport(descriptor, module.getPlatformToKotlinClassMap());
} }
return Collections.emptyList(); return Collections.emptyList();
} }
@@ -161,7 +161,7 @@ public class TopDownAnalyzer {
Predicates.<PsiFile>alwaysFalse(), true, false, Collections.<AnalyzerScriptParameter>emptyList()); Predicates.<PsiFile>alwaysFalse(), true, false, Collections.<AnalyzerScriptParameter>emptyList());
InjectorForTopDownAnalyzerBasic injector = new InjectorForTopDownAnalyzerBasic( InjectorForTopDownAnalyzerBasic injector = new InjectorForTopDownAnalyzerBasic(
project, topDownAnalysisParameters, new ObservableBindingTrace(trace), project, topDownAnalysisParameters, new ObservableBindingTrace(trace),
KotlinBuiltIns.getInstance().getBuiltInsModule(), ModuleConfiguration.EMPTY); KotlinBuiltIns.getInstance().getBuiltInsModule());
injector.getTopDownAnalyzer().doProcessStandardLibraryNamespace(outerScope, standardLibraryNamespace, files); injector.getTopDownAnalyzer().doProcessStandardLibraryNamespace(outerScope, standardLibraryNamespace, files);
} }
@@ -194,8 +194,7 @@ public class TopDownAnalyzer {
false, true, Collections.<AnalyzerScriptParameter>emptyList()); false, true, Collections.<AnalyzerScriptParameter>emptyList());
InjectorForTopDownAnalyzerBasic injector = new InjectorForTopDownAnalyzerBasic( InjectorForTopDownAnalyzerBasic injector = new InjectorForTopDownAnalyzerBasic(
project, topDownAnalysisParameters, new ObservableBindingTrace(trace), moduleDescriptor, project, topDownAnalysisParameters, new ObservableBindingTrace(trace), moduleDescriptor);
ModuleConfiguration.EMPTY);
injector.getTopDownAnalyzer().doProcess(outerScope, new NamespaceLikeBuilder() { injector.getTopDownAnalyzer().doProcess(outerScope, new NamespaceLikeBuilder() {
@@ -19,11 +19,7 @@ package org.jetbrains.jet.lang.resolve;
import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.ModuleConfiguration; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.JetScope;
@@ -46,7 +42,7 @@ public class TypeResolver {
private AnnotationResolver annotationResolver; private AnnotationResolver annotationResolver;
private DescriptorResolver descriptorResolver; private DescriptorResolver descriptorResolver;
private QualifiedExpressionResolver qualifiedExpressionResolver; private QualifiedExpressionResolver qualifiedExpressionResolver;
private ModuleConfiguration moduleConfiguration; private ModuleDescriptor moduleDescriptor;
@Inject @Inject
public void setDescriptorResolver(DescriptorResolver descriptorResolver) { public void setDescriptorResolver(DescriptorResolver descriptorResolver) {
@@ -64,8 +60,8 @@ public class TypeResolver {
} }
@Inject @Inject
public void setModuleConfiguration(@NotNull ModuleConfiguration moduleConfiguration) { public void setModuleDescriptor(@NotNull ModuleDescriptor moduleDescriptor) {
this.moduleConfiguration = moduleConfiguration; this.moduleDescriptor = moduleDescriptor;
} }
@NotNull @NotNull
@@ -333,7 +329,7 @@ public class TypeResolver {
Collection<? extends DeclarationDescriptor> descriptors = qualifiedExpressionResolver.lookupDescriptorsForUserType(userType, scope, trace); Collection<? extends DeclarationDescriptor> descriptors = qualifiedExpressionResolver.lookupDescriptorsForUserType(userType, scope, trace);
for (DeclarationDescriptor descriptor : descriptors) { for (DeclarationDescriptor descriptor : descriptors) {
if (descriptor instanceof ClassifierDescriptor) { if (descriptor instanceof ClassifierDescriptor) {
ImportsResolver.reportPlatformClassMappedToKotlin(moduleConfiguration, trace, userType, descriptor); ImportsResolver.reportPlatformClassMappedToKotlin(moduleDescriptor, trace, userType, descriptor);
return (ClassifierDescriptor) descriptor; return (ClassifierDescriptor) descriptor;
} }
} }
@@ -18,7 +18,6 @@ package org.jetbrains.jet.lang.resolve.lazy;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
@@ -32,9 +31,6 @@ import org.jetbrains.jet.lang.resolve.name.Name;
public interface KotlinCodeAnalyzer { public interface KotlinCodeAnalyzer {
ModuleDescriptor getRootModuleDescriptor(); ModuleDescriptor getRootModuleDescriptor();
@NotNull
ModuleConfiguration getModuleConfiguration();
@Nullable @Nullable
NamespaceDescriptor getPackageDescriptor(@NotNull Name shortName); NamespaceDescriptor getPackageDescriptor(@NotNull Name shortName);
@@ -171,7 +171,7 @@ public class LazyImportScope implements JetScope {
packageDescriptor.getMemberScope(), packageDescriptor.getMemberScope(),
importer, importer,
traceForImportResolve, traceForImportResolve,
resolveSession.getModuleConfiguration(), resolveSession.getRootModuleDescriptor(),
lookupMode); lookupMode);
} }
finally { finally {
@@ -25,11 +25,12 @@ import com.intellij.util.Function;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.di.InjectorForLazyResolve; import org.jetbrains.jet.di.InjectorForLazyResolve;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.impl.DeclarationDescriptorVisitorEmptyBodies; import org.jetbrains.jet.lang.descriptors.impl.DeclarationDescriptorVisitorEmptyBodies;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.*; import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.BindingTraceContext;
import org.jetbrains.jet.lang.resolve.lazy.declarations.DeclarationProviderFactory; import org.jetbrains.jet.lang.resolve.lazy.declarations.DeclarationProviderFactory;
import org.jetbrains.jet.lang.resolve.lazy.declarations.PackageMemberDeclarationProvider; import org.jetbrains.jet.lang.resolve.lazy.declarations.PackageMemberDeclarationProvider;
import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyClassDescriptor; import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyClassDescriptor;
@@ -65,18 +66,16 @@ public class ResolveSession implements KotlinCodeAnalyzer {
private final InjectorForLazyResolve injector; private final InjectorForLazyResolve injector;
private final ModuleConfiguration moduleConfiguration;
private final Function<FqName, Name> classifierAliases; private final Function<FqName, Name> classifierAliases;
public ResolveSession( public ResolveSession(
@NotNull Project project, @NotNull Project project,
@NotNull StorageManager storageManager, @NotNull StorageManager storageManager,
@NotNull ModuleDescriptorImpl rootDescriptor, @NotNull ModuleDescriptorImpl rootDescriptor,
@NotNull ModuleConfiguration moduleConfiguration, @NotNull DeclarationProviderFactory declarationProviderFactory
@NotNull DeclarationProviderFactory declarationProviderFactory
) { ) {
this(project, storageManager, rootDescriptor, moduleConfiguration, declarationProviderFactory, NO_ALIASES, this(project, storageManager, rootDescriptor, declarationProviderFactory, NO_ALIASES,
Predicates.<FqNameUnsafe>alwaysFalse(), Predicates.<FqNameUnsafe>alwaysFalse(),
new BindingTraceContext()); new BindingTraceContext());
} }
@@ -85,14 +84,12 @@ public class ResolveSession implements KotlinCodeAnalyzer {
@NotNull Project project, @NotNull Project project,
@NotNull StorageManager storageManager, @NotNull StorageManager storageManager,
@NotNull ModuleDescriptorImpl rootDescriptor, @NotNull ModuleDescriptorImpl rootDescriptor,
@NotNull ModuleConfiguration moduleConfiguration,
@NotNull DeclarationProviderFactory declarationProviderFactory, @NotNull DeclarationProviderFactory declarationProviderFactory,
@NotNull BindingTrace delegationTrace @NotNull BindingTrace delegationTrace
) { ) {
this(project, this(project,
storageManager, storageManager,
rootDescriptor, rootDescriptor,
moduleConfiguration,
declarationProviderFactory, declarationProviderFactory,
NO_ALIASES, NO_ALIASES,
Predicates.<FqNameUnsafe>alwaysFalse(), Predicates.<FqNameUnsafe>alwaysFalse(),
@@ -104,7 +101,6 @@ public class ResolveSession implements KotlinCodeAnalyzer {
@NotNull Project project, @NotNull Project project,
@NotNull StorageManager storageManager, @NotNull StorageManager storageManager,
@NotNull ModuleDescriptorImpl rootDescriptor, @NotNull ModuleDescriptorImpl rootDescriptor,
@NotNull ModuleConfiguration moduleConfiguration,
@NotNull DeclarationProviderFactory declarationProviderFactory, @NotNull DeclarationProviderFactory declarationProviderFactory,
@NotNull Function<FqName, Name> classifierAliases, @NotNull Function<FqName, Name> classifierAliases,
@NotNull Predicate<FqNameUnsafe> specialClasses, @NotNull Predicate<FqNameUnsafe> specialClasses,
@@ -114,9 +110,8 @@ public class ResolveSession implements KotlinCodeAnalyzer {
this.classifierAliases = classifierAliases; this.classifierAliases = classifierAliases;
this.specialClasses = specialClasses; this.specialClasses = specialClasses;
this.trace = storageManager.createSafeTrace(delegationTrace); this.trace = storageManager.createSafeTrace(delegationTrace);
this.injector = new InjectorForLazyResolve(project, this, moduleConfiguration); this.injector = new InjectorForLazyResolve(project, this, rootDescriptor);
this.module = rootDescriptor; this.module = rootDescriptor;
this.moduleConfiguration = moduleConfiguration;
PackageMemberDeclarationProvider provider = declarationProviderFactory.getPackageMemberDeclarationProvider(FqName.ROOT); PackageMemberDeclarationProvider provider = declarationProviderFactory.getPackageMemberDeclarationProvider(FqName.ROOT);
assert provider != null : "No declaration provider for root package in " + rootDescriptor; assert provider != null : "No declaration provider for root package in " + rootDescriptor;
this.rootPackage = new LazyPackageDescriptor(rootDescriptor, FqNameUnsafe.ROOT_NAME, this, provider); this.rootPackage = new LazyPackageDescriptor(rootDescriptor, FqNameUnsafe.ROOT_NAME, this, provider);
@@ -144,12 +139,6 @@ public class ResolveSession implements KotlinCodeAnalyzer {
return storageManager; return storageManager;
} }
@Override
@NotNull
public ModuleConfiguration getModuleConfiguration() {
return moduleConfiguration;
}
@Override @Override
@Nullable @Nullable
public NamespaceDescriptor getPackageDescriptor(@NotNull Name shortName) { public NamespaceDescriptor getPackageDescriptor(@NotNull Name shortName) {
@@ -26,7 +26,6 @@ import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.di.InjectorForBodyResolve; import org.jetbrains.jet.di.InjectorForBodyResolve;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.impl.ClassDescriptorBase; import org.jetbrains.jet.lang.descriptors.impl.ClassDescriptorBase;
import org.jetbrains.jet.lang.descriptors.impl.MutableClassDescriptor; import org.jetbrains.jet.lang.descriptors.impl.MutableClassDescriptor;
@@ -161,7 +160,7 @@ public class ResolveSessionUtils {
private static void delegationSpecifierAdditionalResolve( private static void delegationSpecifierAdditionalResolve(
KotlinCodeAnalyzer analyzer, KotlinCodeAnalyzer analyzer,
JetDelegationSpecifierList specifier, DelegatingBindingTrace trace, JetFile file) { JetDelegationSpecifierList specifier, DelegatingBindingTrace trace, JetFile file) {
BodyResolver bodyResolver = createBodyResolverWithEmptyContext(trace, file, analyzer.getModuleConfiguration()); BodyResolver bodyResolver = createBodyResolverWithEmptyContext(trace, file, analyzer.getRootModuleDescriptor());
JetClassOrObject classOrObject = (JetClassOrObject) specifier.getParent(); JetClassOrObject classOrObject = (JetClassOrObject) specifier.getParent();
LazyClassDescriptor descriptor = (LazyClassDescriptor) analyzer.resolveToDescriptor(classOrObject); LazyClassDescriptor descriptor = (LazyClassDescriptor) analyzer.resolveToDescriptor(classOrObject);
@@ -186,7 +185,7 @@ public class ResolveSessionUtils {
return propertyResolutionScope; return propertyResolutionScope;
} }
}); });
BodyResolver bodyResolver = createBodyResolver(trace, file, bodyResolveContext, resolveSession.getModuleConfiguration()); BodyResolver bodyResolver = createBodyResolver(trace, file, bodyResolveContext, resolveSession.getRootModuleDescriptor());
PropertyDescriptor descriptor = (PropertyDescriptor) resolveSession.resolveToDescriptor(jetProperty); PropertyDescriptor descriptor = (PropertyDescriptor) resolveSession.resolveToDescriptor(jetProperty);
JetExpression propertyInitializer = jetProperty.getInitializer(); JetExpression propertyInitializer = jetProperty.getInitializer();
@@ -204,7 +203,7 @@ public class ResolveSessionUtils {
DelegatingBindingTrace trace, DelegatingBindingTrace trace,
JetFile file JetFile file
) { ) {
BodyResolver bodyResolver = createBodyResolverWithEmptyContext(trace, file, resolveSession.getModuleConfiguration()); BodyResolver bodyResolver = createBodyResolverWithEmptyContext(trace, file, resolveSession.getRootModuleDescriptor());
JetScope scope = resolveSession.getInjector().getScopeProvider().getResolutionScopeForDeclaration(namedFunction); JetScope scope = resolveSession.getInjector().getScopeProvider().getResolutionScopeForDeclaration(namedFunction);
FunctionDescriptor functionDescriptor = (FunctionDescriptor) resolveSession.resolveToDescriptor(namedFunction); FunctionDescriptor functionDescriptor = (FunctionDescriptor) resolveSession.resolveToDescriptor(namedFunction);
bodyResolver.resolveFunctionBody(trace, namedFunction, functionDescriptor, scope); bodyResolver.resolveFunctionBody(trace, namedFunction, functionDescriptor, scope);
@@ -216,7 +215,7 @@ public class ResolveSessionUtils {
DelegatingBindingTrace trace, DelegatingBindingTrace trace,
JetFile file JetFile file
) { ) {
BodyResolver bodyResolver = createBodyResolverWithEmptyContext(trace, file, analyzer.getModuleConfiguration()); BodyResolver bodyResolver = createBodyResolverWithEmptyContext(trace, file, analyzer.getRootModuleDescriptor());
JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(classInitializer, JetClassOrObject.class); JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(classInitializer, JetClassOrObject.class);
LazyClassDescriptor classOrObjectDescriptor = (LazyClassDescriptor) analyzer.resolveToDescriptor(classOrObject); LazyClassDescriptor classOrObjectDescriptor = (LazyClassDescriptor) analyzer.resolveToDescriptor(classOrObject);
bodyResolver.resolveAnonymousInitializers(classOrObject, classOrObjectDescriptor.getUnsubstitutedPrimaryConstructor(), bodyResolver.resolveAnonymousInitializers(classOrObject, classOrObjectDescriptor.getUnsubstitutedPrimaryConstructor(),
@@ -226,19 +225,19 @@ public class ResolveSessionUtils {
} }
private static BodyResolver createBodyResolver(DelegatingBindingTrace trace, JetFile file, BodyResolveContextForLazy bodyResolveContext, private static BodyResolver createBodyResolver(DelegatingBindingTrace trace, JetFile file, BodyResolveContextForLazy bodyResolveContext,
ModuleConfiguration moduleConfiguration) { ModuleDescriptor module) {
TopDownAnalysisParameters parameters = new TopDownAnalysisParameters( TopDownAnalysisParameters parameters = new TopDownAnalysisParameters(
Predicates.<PsiFile>alwaysTrue(), false, true, Collections.<AnalyzerScriptParameter>emptyList()); Predicates.<PsiFile>alwaysTrue(), false, true, Collections.<AnalyzerScriptParameter>emptyList());
InjectorForBodyResolve bodyResolve = new InjectorForBodyResolve(file.getProject(), parameters, trace, bodyResolveContext, moduleConfiguration); InjectorForBodyResolve bodyResolve = new InjectorForBodyResolve(file.getProject(), parameters, trace, bodyResolveContext, module);
return bodyResolve.getBodyResolver(); return bodyResolve.getBodyResolver();
} }
private static BodyResolver createBodyResolverWithEmptyContext( private static BodyResolver createBodyResolverWithEmptyContext(
DelegatingBindingTrace trace, DelegatingBindingTrace trace,
JetFile file, JetFile file,
ModuleConfiguration moduleConfiguration ModuleDescriptor module
) { ) {
return createBodyResolver(trace, file, EMPTY_CONTEXT, moduleConfiguration); return createBodyResolver(trace, file, EMPTY_CONTEXT, module);
} }
private static JetScope getExpressionResolutionScope(@NotNull ResolveSession resolveSession, @NotNull JetExpression expression) { private static JetScope getExpressionResolutionScope(@NotNull ResolveSession resolveSession, @NotNull JetExpression expression) {
@@ -99,7 +99,7 @@ public class ScopeProvider {
} }
JetImportsFactory importsFactory = resolveSession.getInjector().getJetImportsFactory(); JetImportsFactory importsFactory = resolveSession.getInjector().getJetImportsFactory();
List<ImportPath> defaultImports = resolveSession.getModuleConfiguration().getDefaultImports(); List<ImportPath> defaultImports = resolveSession.getRootModuleDescriptor().getDefaultImports();
Collection<JetImportDirective> defaultImportDirectives = importsFactory.createImportDirectives(defaultImports); Collection<JetImportDirective> defaultImportDirectives = importsFactory.createImportDirectives(defaultImports);
@@ -45,7 +45,7 @@ public class LazyPackageDescriptor extends AbstractNamespaceDescriptorImpl imple
super(containingDeclaration, Collections.<AnnotationDescriptor>emptyList(), name); super(containingDeclaration, Collections.<AnnotationDescriptor>emptyList(), name);
WritableScopeImpl scope = new WritableScopeImpl(JetScope.EMPTY, this, RedeclarationHandler.DO_NOTHING, "Package scope"); WritableScopeImpl scope = new WritableScopeImpl(JetScope.EMPTY, this, RedeclarationHandler.DO_NOTHING, "Package scope");
resolveSession.getModuleConfiguration().extendNamespaceScope(resolveSession.getTrace(), this, scope); resolveSession.getRootModuleDescriptor().getModuleConfiguration().extendNamespaceScope(resolveSession.getTrace(), this, scope);
scope.changeLockLevel(WritableScope.LockLevel.READING); scope.changeLockLevel(WritableScope.LockLevel.READING);
this.lazyScope = new LazyPackageMemberScope(resolveSession, declarationProvider, this); this.lazyScope = new LazyPackageMemberScope(resolveSession, declarationProvider, this);
@@ -309,5 +309,9 @@ public class ErrorUtils {
} }
} }
public static ModuleDescriptor getErrorModule() {
return ERROR_MODULE;
}
private ErrorUtils() {} private ErrorUtils() {}
} }
@@ -244,12 +244,12 @@ public class ExpressionTypingUtils {
@NotNull JetExpression receiverExpression, @NotNull JetExpression receiverExpression,
@NotNull JetType receiverType, @NotNull JetType receiverType,
@NotNull JetScope scope, @NotNull JetScope scope,
@NotNull ModuleConfiguration moduleConfiguration @NotNull ModuleDescriptor module
) { ) {
JetImportDirective importDirective = JetPsiFactory.createImportDirective(project, callableFQN.getFqName()); JetImportDirective importDirective = JetPsiFactory.createImportDirective(project, callableFQN.getFqName());
Collection<? extends DeclarationDescriptor> declarationDescriptors = new QualifiedExpressionResolver() Collection<? extends DeclarationDescriptor> declarationDescriptors = new QualifiedExpressionResolver()
.analyseImportReference(importDirective, scope, new BindingTraceContext(), moduleConfiguration); .analyseImportReference(importDirective, scope, new BindingTraceContext(), module);
List<CallableDescriptor> callableExtensionDescriptors = new ArrayList<CallableDescriptor>(); List<CallableDescriptor> callableExtensionDescriptors = new ArrayList<CallableDescriptor>();
ReceiverValue receiverValue = new ExpressionReceiver(receiverExpression, receiverType); ReceiverValue receiverValue = new ExpressionReceiver(receiverExpression, receiverType);
@@ -229,7 +229,6 @@ public class KotlinBuiltIns {
project, project,
storageManager, storageManager,
builtInsModule, builtInsModule,
SpecialModuleConfiguration.INSTANCE,
new FileBasedDeclarationProviderFactory(storageManager, files), new FileBasedDeclarationProviderFactory(storageManager, files),
ResolveSession.NO_ALIASES, ResolveSession.NO_ALIASES,
Predicates.in(Sets.newHashSet(new FqNameUnsafe("jet.Any"), new FqNameUnsafe("jet.Nothing"))), Predicates.in(Sets.newHashSet(new FqNameUnsafe("jet.Any"), new FqNameUnsafe("jet.Nothing"))),
@@ -39,6 +39,9 @@ import org.jetbrains.jet.codegen.forTestCompile.ForTestCompileRuntime;
import org.jetbrains.jet.codegen.forTestCompile.ForTestPackJdkAnnotations; import org.jetbrains.jet.codegen.forTestCompile.ForTestPackJdkAnnotations;
import org.jetbrains.jet.config.CommonConfigurationKeys; import org.jetbrains.jet.config.CommonConfigurationKeys;
import org.jetbrains.jet.config.CompilerConfiguration; import org.jetbrains.jet.config.CompilerConfiguration;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.diagnostics.Diagnostic; import org.jetbrains.jet.lang.diagnostics.Diagnostic;
import org.jetbrains.jet.lang.diagnostics.Errors; import org.jetbrains.jet.lang.diagnostics.Errors;
import org.jetbrains.jet.lang.diagnostics.Severity; import org.jetbrains.jet.lang.diagnostics.Severity;
@@ -50,6 +53,7 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM; import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
import org.jetbrains.jet.lang.resolve.lazy.LazyResolveTestUtil; import org.jetbrains.jet.lang.resolve.lazy.LazyResolveTestUtil;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.plugin.JetLanguage; import org.jetbrains.jet.plugin.JetLanguage;
import org.jetbrains.jet.test.InnerTestClasses; import org.jetbrains.jet.test.InnerTestClasses;
import org.jetbrains.jet.test.TestMetadata; import org.jetbrains.jet.test.TestMetadata;
@@ -553,4 +557,10 @@ public class JetTestUtils {
String text = FileUtil.loadFile(ioFile); String text = FileUtil.loadFile(ioFile);
return JetPsiFactory.createPhysicalFile(project, ioFile.getName(), text); return JetPsiFactory.createPhysicalFile(project, ioFile.getName(), text);
} }
public static ModuleDescriptor createEmptyModule() {
ModuleDescriptorImpl descriptor = new ModuleDescriptorImpl(Name.special("<empty-for-test>"));
descriptor.setModuleConfiguration(ModuleConfiguration.EMPTY);
return descriptor;
}
} }
@@ -21,8 +21,8 @@ import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
import org.jetbrains.jet.lang.resolve.TypeResolver; import org.jetbrains.jet.lang.resolve.TypeResolver;
import org.jetbrains.jet.lang.resolve.calls.CallResolver; import org.jetbrains.jet.lang.resolve.calls.CallResolver;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.lang.ModuleConfiguration;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.resolve.AnnotationResolver; import org.jetbrains.jet.lang.resolve.AnnotationResolver;
import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver; import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver;
import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver; import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver;
@@ -39,8 +39,8 @@ public class InjectorForTests {
private TypeResolver typeResolver; private TypeResolver typeResolver;
private CallResolver callResolver; private CallResolver callResolver;
private KotlinBuiltIns kotlinBuiltIns; private KotlinBuiltIns kotlinBuiltIns;
private ModuleConfiguration moduleConfiguration;
private final Project project; private final Project project;
private final ModuleDescriptor moduleDescriptor;
private AnnotationResolver annotationResolver; private AnnotationResolver annotationResolver;
private CallExpressionResolver callExpressionResolver; private CallExpressionResolver callExpressionResolver;
private QualifiedExpressionResolver qualifiedExpressionResolver; private QualifiedExpressionResolver qualifiedExpressionResolver;
@@ -48,15 +48,16 @@ public class InjectorForTests {
private CandidateResolver candidateResolver; private CandidateResolver candidateResolver;
public InjectorForTests( public InjectorForTests(
@NotNull Project project @NotNull Project project,
@NotNull ModuleDescriptor moduleDescriptor
) { ) {
this.descriptorResolver = new DescriptorResolver(); this.descriptorResolver = new DescriptorResolver();
this.expressionTypingServices = new ExpressionTypingServices(); this.expressionTypingServices = new ExpressionTypingServices();
this.typeResolver = new TypeResolver(); this.typeResolver = new TypeResolver();
this.callResolver = new CallResolver(); this.callResolver = new CallResolver();
this.kotlinBuiltIns = KotlinBuiltIns.getInstance(); this.kotlinBuiltIns = KotlinBuiltIns.getInstance();
this.moduleConfiguration = ModuleConfiguration.EMPTY;
this.project = project; this.project = project;
this.moduleDescriptor = moduleDescriptor;
this.annotationResolver = new AnnotationResolver(); this.annotationResolver = new AnnotationResolver();
this.callExpressionResolver = new CallExpressionResolver(); this.callExpressionResolver = new CallExpressionResolver();
this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
@@ -75,7 +76,7 @@ public class InjectorForTests {
this.typeResolver.setAnnotationResolver(annotationResolver); this.typeResolver.setAnnotationResolver(annotationResolver);
this.typeResolver.setDescriptorResolver(descriptorResolver); this.typeResolver.setDescriptorResolver(descriptorResolver);
this.typeResolver.setModuleConfiguration(moduleConfiguration); this.typeResolver.setModuleDescriptor(moduleDescriptor);
this.typeResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver); this.typeResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver);
this.callResolver.setArgumentTypeResolver(argumentTypeResolver); this.callResolver.setArgumentTypeResolver(argumentTypeResolver);
@@ -153,7 +153,7 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir {
Predicates.<PsiFile>alwaysFalse(), false, false, Collections.<AnalyzerScriptParameter>emptyList()), Predicates.<PsiFile>alwaysFalse(), false, false, Collections.<AnalyzerScriptParameter>emptyList()),
trace, trace,
moduleDescriptor); moduleDescriptor);
moduleDescriptor.setModuleConfiguration(injectorForAnalyzer.getModuleConfiguration()); moduleDescriptor.setModuleConfiguration(injectorForAnalyzer.getJavaBridgeConfiguration());
injectorForAnalyzer.getTopDownAnalyzer().analyzeFiles(environment.getSourceFiles(), Collections.<AnalyzerScriptParameter>emptyList()); injectorForAnalyzer.getTopDownAnalyzer().analyzeFiles(environment.getSourceFiles(), Collections.<AnalyzerScriptParameter>emptyList());
@@ -55,10 +55,10 @@ public abstract class AbstractLazyResolveDescriptorRendererTest extends KotlinTe
Collection<JetFile> files = Lists.newArrayList(psiFile); Collection<JetFile> files = Lists.newArrayList(psiFile);
ModuleDescriptorImpl lazyModule = new ModuleDescriptorImpl(Name.special("<lazy module>")); ModuleDescriptorImpl lazyModule = new ModuleDescriptorImpl(Name.special("<lazy module>"));
lazyModule.setModuleConfiguration(injectorForTopDownAnalyzer.getModuleConfiguration()); lazyModule.setModuleConfiguration(injectorForTopDownAnalyzer.getModuleDescriptor().getModuleConfiguration());
LockBasedStorageManager storageManager = new LockBasedStorageManager(); LockBasedStorageManager storageManager = new LockBasedStorageManager();
final ResolveSession resolveSession = new ResolveSession(getProject(), storageManager, lazyModule, injectorForTopDownAnalyzer.getModuleConfiguration(), final ResolveSession resolveSession = new ResolveSession(getProject(), storageManager, lazyModule,
new FileBasedDeclarationProviderFactory(storageManager, files)); new FileBasedDeclarationProviderFactory(storageManager, files));
final List<DeclarationDescriptor> descriptors = new ArrayList<DeclarationDescriptor>(); final List<DeclarationDescriptor> descriptors = new ArrayList<DeclarationDescriptor>();
psiFile.accept(new JetVisitorVoid() { psiFile.accept(new JetVisitorVoid() {
@@ -63,7 +63,6 @@ public class LazyResolveTestUtil {
ModuleDescriptorImpl eagerModuleForLazy = new ModuleDescriptorImpl(Name.special("<eager module for lazy>")); ModuleDescriptorImpl eagerModuleForLazy = new ModuleDescriptorImpl(Name.special("<eager module for lazy>"));
InjectorForTopDownAnalyzer tdaInjectorForLazy = createInjectorForTDA(eagerModuleForLazy, environment); InjectorForTopDownAnalyzer tdaInjectorForLazy = createInjectorForTDA(eagerModuleForLazy, environment);
eagerModuleForLazy.setModuleConfiguration(tdaInjectorForLazy.getModuleConfiguration());
// This line is required fro the 'jet' namespace to be filled in with functions // This line is required fro the 'jet' namespace to be filled in with functions
tdaInjectorForLazy.getTopDownAnalyzer().analyzeFiles( tdaInjectorForLazy.getTopDownAnalyzer().analyzeFiles(
Collections.singletonList(JetPsiFactory.createFile(environment.getProject(), "")), Collections.<AnalyzerScriptParameter>emptyList()); Collections.singletonList(JetPsiFactory.createFile(environment.getProject(), "")), Collections.<AnalyzerScriptParameter>emptyList());
@@ -76,13 +75,14 @@ public class LazyResolveTestUtil {
TopDownAnalysisParameters params = new TopDownAnalysisParameters( TopDownAnalysisParameters params = new TopDownAnalysisParameters(
Predicates.<PsiFile>alwaysTrue(), false, false, Collections.<AnalyzerScriptParameter>emptyList()); Predicates.<PsiFile>alwaysTrue(), false, false, Collections.<AnalyzerScriptParameter>emptyList());
BindingTrace sharedTrace = CliLightClassGenerationSupport.getInstanceForCli(environment.getProject()).getTrace(); BindingTrace sharedTrace = CliLightClassGenerationSupport.getInstanceForCli(environment.getProject()).getTrace();
return new InjectorForTopDownAnalyzerForJvm(environment.getProject(), params, sharedTrace, module); InjectorForTopDownAnalyzerForJvm injector = new InjectorForTopDownAnalyzerForJvm(environment.getProject(), params, sharedTrace, module);
module.setModuleConfiguration(injector.getJavaBridgeConfiguration());
return injector;
} }
public static ModuleDescriptor resolveEagerly(List<JetFile> files, JetCoreEnvironment environment) { public static ModuleDescriptor resolveEagerly(List<JetFile> files, JetCoreEnvironment environment) {
ModuleDescriptorImpl module = new ModuleDescriptorImpl(Name.special("<test module>")); ModuleDescriptorImpl module = new ModuleDescriptorImpl(Name.special("<test module>"));
InjectorForTopDownAnalyzer injector = createInjectorForTDA(module, environment); InjectorForTopDownAnalyzer injector = createInjectorForTDA(module, environment);
module.setModuleConfiguration(injector.getModuleConfiguration());
injector.getTopDownAnalyzer().analyzeFiles(files, Collections.<AnalyzerScriptParameter>emptyList()); injector.getTopDownAnalyzer().analyzeFiles(files, Collections.<AnalyzerScriptParameter>emptyList());
return module; return module;
} }
@@ -143,7 +143,7 @@ public class LazyResolveTestUtil {
ModuleDescriptorImpl lazyModule = new ModuleDescriptorImpl(Name.special("<lazy module>")); ModuleDescriptorImpl lazyModule = new ModuleDescriptorImpl(Name.special("<lazy module>"));
lazyModule.setModuleConfiguration(moduleConfiguration); lazyModule.setModuleConfiguration(moduleConfiguration);
return new ResolveSession(project, storageManager, lazyModule, moduleConfiguration, declarationProviderFactory, sharedTrace); return new ResolveSession(project, storageManager, lazyModule, declarationProviderFactory, sharedTrace);
} }
public static ModuleDescriptor resolveLazily(List<JetFile> files, JetCoreEnvironment environment) { public static ModuleDescriptor resolveLazily(List<JetFile> files, JetCoreEnvironment environment) {
@@ -20,12 +20,10 @@ import com.intellij.openapi.project.Project;
import com.intellij.psi.*; import com.intellij.psi.*;
import junit.framework.Assert; import junit.framework.Assert;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.JetTestUtils;
import org.jetbrains.jet.di.InjectorForJavaSemanticServices; import org.jetbrains.jet.di.InjectorForJavaSemanticServices;
import org.jetbrains.jet.di.InjectorForTests; import org.jetbrains.jet.di.InjectorForTests;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
import org.jetbrains.jet.lang.resolve.BindingTraceContext; import org.jetbrains.jet.lang.resolve.BindingTraceContext;
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo; import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
import org.jetbrains.jet.lang.resolve.calls.context.ExpressionPosition; import org.jetbrains.jet.lang.resolve.calls.context.ExpressionPosition;
@@ -129,7 +127,8 @@ public class JetExpectedResolveDataUtil {
Project project, Project project,
JetType... parameterTypes JetType... parameterTypes
) { ) {
ExpressionTypingServices expressionTypingServices = new InjectorForTests(project).getExpressionTypingServices(); ModuleDescriptor emptyModule = JetTestUtils.createEmptyModule();
ExpressionTypingServices expressionTypingServices = new InjectorForTests(project, emptyModule).getExpressionTypingServices();
ExpressionTypingContext context = ExpressionTypingContext.newContext( ExpressionTypingContext context = ExpressionTypingContext.newContext(
expressionTypingServices, new BindingTraceContext(), classDescriptor.getDefaultType().getMemberScope(), expressionTypingServices, new BindingTraceContext(), classDescriptor.getDefaultType().getMemberScope(),
@@ -65,7 +65,7 @@ public class JetDefaultModalityModifiersTest extends JetLiteFixture {
private JetScope scope; private JetScope scope;
public void setUp() throws Exception { public void setUp() throws Exception {
InjectorForTests injector = new InjectorForTests(getProject()); InjectorForTests injector = new InjectorForTests(getProject(), root);
KotlinBuiltIns builtIns = injector.getKotlinBuiltIns(); KotlinBuiltIns builtIns = injector.getKotlinBuiltIns();
descriptorResolver = injector.getDescriptorResolver(); descriptorResolver = injector.getDescriptorResolver();
scope = createScope(builtIns.getBuiltInsScope()); scope = createScope(builtIns.getBuiltInsScope());
@@ -46,7 +46,7 @@ public class JetOverloadTest extends JetLiteFixture {
@Override @Override
public void setUp() throws Exception { public void setUp() throws Exception {
super.setUp(); super.setUp();
InjectorForTests injector = new InjectorForTests(getProject()); InjectorForTests injector = new InjectorForTests(getProject(), root);
builtIns = injector.getKotlinBuiltIns(); builtIns = injector.getKotlinBuiltIns();
descriptorResolver = injector.getDescriptorResolver(); descriptorResolver = injector.getDescriptorResolver();
} }
@@ -46,7 +46,7 @@ public class JetOverridingTest extends JetLiteFixture {
@Override @Override
public void setUp() throws Exception { public void setUp() throws Exception {
super.setUp(); super.setUp();
InjectorForTests injector = new InjectorForTests(getProject()); InjectorForTests injector = new InjectorForTests(getProject(), root);
builtIns = injector.getKotlinBuiltIns(); builtIns = injector.getKotlinBuiltIns();
descriptorResolver = injector.getDescriptorResolver(); descriptorResolver = injector.getDescriptorResolver();
} }
@@ -79,7 +79,7 @@ public class JetTypeCheckerTest extends JetLiteFixture {
builtIns = KotlinBuiltIns.getInstance(); builtIns = KotlinBuiltIns.getInstance();
InjectorForTests injector = new InjectorForTests(getProject()); InjectorForTests injector = new InjectorForTests(getProject(), JetTestUtils.createEmptyModule());
descriptorResolver = injector.getDescriptorResolver(); descriptorResolver = injector.getDescriptorResolver();
typeResolver = injector.getTypeResolver(); typeResolver = injector.getTypeResolver();
expressionTypingServices = injector.getExpressionTypingServices(); expressionTypingServices = injector.getExpressionTypingServices();
@@ -24,6 +24,7 @@ import com.intellij.util.Function;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.ConfigurationKind; import org.jetbrains.jet.ConfigurationKind;
import org.jetbrains.jet.JetTestUtils;
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment; import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
import org.jetbrains.jet.di.InjectorForTests; import org.jetbrains.jet.di.InjectorForTests;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
@@ -65,7 +66,7 @@ public class TypeSubstitutorTest extends KotlinTestWithEnvironment {
protected void setUp() throws Exception { protected void setUp() throws Exception {
super.setUp(); super.setUp();
injector = new InjectorForTests(getProject()); injector = new InjectorForTests(getProject(), JetTestUtils.createEmptyModule());
scope = getContextScope(); scope = getContextScope();
} }
@@ -27,8 +27,6 @@ import org.jetbrains.jet.codegen.state.JetTypeMapper;
import org.jetbrains.jet.di.DependencyInjectorGenerator; import org.jetbrains.jet.di.DependencyInjectorGenerator;
import org.jetbrains.jet.di.GivenExpression; import org.jetbrains.jet.di.GivenExpression;
import org.jetbrains.jet.di.InjectorForTopDownAnalyzer; import org.jetbrains.jet.di.InjectorForTopDownAnalyzer;
import org.jetbrains.jet.di.InstantiateType;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl; import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.psi.JetImportsFactory; import org.jetbrains.jet.lang.psi.JetImportsFactory;
@@ -70,7 +68,7 @@ public class GenerateInjectors {
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(); DependencyInjectorGenerator generator = new DependencyInjectorGenerator();
generator.addParameter(Project.class); generator.addParameter(Project.class);
generator.addParameter(ResolveSession.class); generator.addParameter(ResolveSession.class);
generator.addParameter(ModuleConfiguration.class); generator.addParameter(ModuleDescriptor.class);
generator.addPublicField(DescriptorResolver.class); generator.addPublicField(DescriptorResolver.class);
generator.addPublicField(ExpressionTypingServices.class); generator.addPublicField(ExpressionTypingServices.class);
generator.addPublicField(TypeResolver.class); generator.addPublicField(TypeResolver.class);
@@ -84,7 +82,6 @@ public class GenerateInjectors {
private static void generateInjectorForTopDownAnalyzerBasic() throws IOException { private static void generateInjectorForTopDownAnalyzerBasic() throws IOException {
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(); DependencyInjectorGenerator generator = new DependencyInjectorGenerator();
generateInjectorForTopDownAnalyzerCommon(generator); generateInjectorForTopDownAnalyzerCommon(generator);
generator.addParameter(ModuleConfiguration.class);
generator.addField(DependencyClassByQualifiedNameResolverDummyImpl.class); generator.addField(DependencyClassByQualifiedNameResolverDummyImpl.class);
generator.addField(NamespaceFactoryImpl.class); generator.addField(NamespaceFactoryImpl.class);
generator.generate("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForTopDownAnalyzerBasic", GenerateInjectors.class); generator.generate("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForTopDownAnalyzerBasic", GenerateInjectors.class);
@@ -93,7 +90,6 @@ public class GenerateInjectors {
private static void generateInjectorForTopDownAnalyzerForJs() throws IOException { private static void generateInjectorForTopDownAnalyzerForJs() throws IOException {
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(); DependencyInjectorGenerator generator = new DependencyInjectorGenerator();
generateInjectorForTopDownAnalyzerCommon(generator); generateInjectorForTopDownAnalyzerCommon(generator);
generator.addPublicParameter(ModuleConfiguration.class);
generator.addField(DependencyClassByQualifiedNameResolverDummyImpl.class); generator.addField(DependencyClassByQualifiedNameResolverDummyImpl.class);
generator.addField(NamespaceFactoryImpl.class); generator.addField(NamespaceFactoryImpl.class);
generator.generate("js/js.translator/src", "org.jetbrains.jet.di", "InjectorForTopDownAnalyzerForJs", GenerateInjectors.class); generator.generate("js/js.translator/src", "org.jetbrains.jet.di", "InjectorForTopDownAnalyzerForJs", GenerateInjectors.class);
@@ -103,7 +99,7 @@ public class GenerateInjectors {
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(); DependencyInjectorGenerator generator = new DependencyInjectorGenerator();
generator.implementInterface(InjectorForTopDownAnalyzer.class); generator.implementInterface(InjectorForTopDownAnalyzer.class);
generateInjectorForTopDownAnalyzerCommon(generator); generateInjectorForTopDownAnalyzerCommon(generator);
generator.addField(true, ModuleConfiguration.class, null, new InstantiateType(JavaBridgeConfiguration.class)); generator.addPublicField(JavaBridgeConfiguration.class);
generator.addField(JavaDescriptorResolver.class); generator.addField(JavaDescriptorResolver.class);
generator.addField(PsiClassFinderImpl.class); generator.addField(PsiClassFinderImpl.class);
generator.addPublicField(NamespaceFactoryImpl.class); generator.addPublicField(NamespaceFactoryImpl.class);
@@ -142,7 +138,7 @@ public class GenerateInjectors {
generator.addPublicParameter(Project.class); generator.addPublicParameter(Project.class);
generator.addPublicParameter(TopDownAnalysisParameters.class); generator.addPublicParameter(TopDownAnalysisParameters.class);
generator.addPublicParameter(BindingTrace.class); generator.addPublicParameter(BindingTrace.class);
generator.addParameter(ModuleDescriptorImpl.class); generator.addPublicParameter(ModuleDescriptorImpl.class);
} }
private static void generateMacroInjector() throws IOException { private static void generateMacroInjector() throws IOException {
@@ -153,7 +149,7 @@ public class GenerateInjectors {
// Parameters // Parameters
generator.addPublicParameter(Project.class); generator.addPublicParameter(Project.class);
generator.addParameter(ModuleConfiguration.class); generator.addParameter(ModuleDescriptor.class);
generator.generate("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForMacros", GenerateInjectors.class); generator.generate("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForMacros", GenerateInjectors.class);
} }
@@ -167,10 +163,10 @@ public class GenerateInjectors {
generator.addPublicField(TypeResolver.class); generator.addPublicField(TypeResolver.class);
generator.addPublicField(CallResolver.class); generator.addPublicField(CallResolver.class);
generator.addField(true, KotlinBuiltIns.class, null, new GivenExpression("KotlinBuiltIns.getInstance()")); generator.addField(true, KotlinBuiltIns.class, null, new GivenExpression("KotlinBuiltIns.getInstance()"));
generator.addField(false, ModuleConfiguration.class, null, new GivenExpression("ModuleConfiguration.EMPTY"));
// Parameters // Parameters
generator.addPublicParameter(Project.class); generator.addPublicParameter(Project.class);
generator.addParameter(ModuleDescriptor.class);
generator.generate("compiler/tests", "org.jetbrains.jet.di", "InjectorForTests", GenerateInjectors.class); generator.generate("compiler/tests", "org.jetbrains.jet.di", "InjectorForTests", GenerateInjectors.class);
} }
@@ -229,7 +225,7 @@ public class GenerateInjectors {
generator.addPublicParameter(TopDownAnalysisParameters.class); generator.addPublicParameter(TopDownAnalysisParameters.class);
generator.addPublicParameter(BindingTrace.class); generator.addPublicParameter(BindingTrace.class);
generator.addPublicParameter(BodiesResolveContext.class); generator.addPublicParameter(BodiesResolveContext.class);
generator.addParameter(ModuleConfiguration.class); generator.addParameter(ModuleDescriptor.class);
generator.generate("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForBodyResolve", GenerateInjectors.class); generator.generate("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForBodyResolve", GenerateInjectors.class);
} }
} }
@@ -236,7 +236,7 @@ public class JetShortNamesCache extends PsiShortNamesCache {
if (functionFQN != null) { if (functionFQN != null) {
JetImportDirective importDirective = JetPsiFactory.createImportDirective(project, new ImportPath(functionFQN, false)); JetImportDirective importDirective = JetPsiFactory.createImportDirective(project, new ImportPath(functionFQN, false));
Collection<? extends DeclarationDescriptor> declarationDescriptors = new QualifiedExpressionResolver().analyseImportReference( Collection<? extends DeclarationDescriptor> declarationDescriptors = new QualifiedExpressionResolver().analyseImportReference(
importDirective, jetScope, new BindingTraceContext(), resolveSession.getModuleConfiguration()); importDirective, jetScope, new BindingTraceContext(), resolveSession.getRootModuleDescriptor());
for (DeclarationDescriptor declarationDescriptor : declarationDescriptors) { for (DeclarationDescriptor declarationDescriptor : declarationDescriptors) {
if (declarationDescriptor instanceof FunctionDescriptor) { if (declarationDescriptor instanceof FunctionDescriptor) {
result.add((FunctionDescriptor) declarationDescriptor); result.add((FunctionDescriptor) declarationDescriptor);
@@ -335,7 +335,7 @@ public class JetShortNamesCache extends PsiShortNamesCache {
// Iterate through the function with attempt to resolve found functions // Iterate through the function with attempt to resolve found functions
for (FqName functionFQN : functionFQNs) { for (FqName functionFQN : functionFQNs) {
for (CallableDescriptor functionDescriptor : ExpressionTypingUtils.canFindSuitableCall( for (CallableDescriptor functionDescriptor : ExpressionTypingUtils.canFindSuitableCall(
functionFQN, project, receiverExpression, expressionType, scope, resolveSession.getModuleConfiguration())) { functionFQN, project, receiverExpression, expressionType, scope, resolveSession.getRootModuleDescriptor())) {
resultDescriptors.add(functionDescriptor); resultDescriptors.add(functionDescriptor);
} }
@@ -227,7 +227,6 @@ public class JetSourceNavigationHelper {
project, project,
storageManager, storageManager,
moduleDescriptor, moduleDescriptor,
DefaultModuleConfiguration.createStandardConfiguration(),
providerFactory); providerFactory);
for (JetNamedDeclaration candidate : candidates) { for (JetNamedDeclaration candidate : candidates) {
@@ -67,7 +67,7 @@ public abstract class BaseJetVariableMacro extends Macro {
return null; return null;
} }
ExpressionTypingServices callResolverContext = new InjectorForMacros(project, analyzeExhaust.getModuleConfiguration()).getExpressionTypingServices(); ExpressionTypingServices callResolverContext = new InjectorForMacros(project, analyzeExhaust.getModuleDescriptor()).getExpressionTypingServices();
List<VariableDescriptor> filteredDescriptors = new ArrayList<VariableDescriptor>(); List<VariableDescriptor> filteredDescriptors = new ArrayList<VariableDescriptor>();
for (DeclarationDescriptor declarationDescriptor : scope.getAllDescriptors()) { for (DeclarationDescriptor declarationDescriptor : scope.getAllDescriptors()) {
@@ -38,7 +38,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.analyzer.AnalyzeExhaust; import org.jetbrains.jet.analyzer.AnalyzeExhaust;
import org.jetbrains.jet.asJava.LightClassUtil; import org.jetbrains.jet.asJava.LightClassUtil;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.diagnostics.DiagnosticUtils; import org.jetbrains.jet.lang.diagnostics.DiagnosticUtils;
import org.jetbrains.jet.lang.diagnostics.Errors; import org.jetbrains.jet.lang.diagnostics.Errors;
import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetFile;
@@ -46,6 +45,7 @@ import org.jetbrains.jet.lang.resolve.*;
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM; import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
import org.jetbrains.jet.lang.resolve.java.JetFilesProvider; import org.jetbrains.jet.lang.resolve.java.JetFilesProvider;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession; import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.types.ErrorUtils;
import org.jetbrains.jet.plugin.caches.resolve.KotlinCacheManagerUtil; import org.jetbrains.jet.plugin.caches.resolve.KotlinCacheManagerUtil;
import org.jetbrains.jet.plugin.caches.resolve.KotlinDeclarationsCache; import org.jetbrains.jet.plugin.caches.resolve.KotlinDeclarationsCache;
import org.jetbrains.jet.plugin.caches.resolve.KotlinDeclarationsCacheImpl; import org.jetbrains.jet.plugin.caches.resolve.KotlinDeclarationsCacheImpl;
@@ -121,7 +121,7 @@ public final class AnalyzerFacadeWithCache {
} }
private static AnalyzeExhaust emptyExhaust() { private static AnalyzeExhaust emptyExhaust() {
return AnalyzeExhaust.success(BindingContext.EMPTY, ModuleConfiguration.EMPTY); return AnalyzeExhaust.success(BindingContext.EMPTY, ErrorUtils.getErrorModule());
} }
private static AnalyzeExhaust analyzeHeadersWithCacheOnFile(@NotNull JetFile fileToCache) { private static AnalyzeExhaust analyzeHeadersWithCacheOnFile(@NotNull JetFile fileToCache) {
@@ -143,7 +143,6 @@ public final class AnalyzerFacadeWithCache {
private static AnalyzeExhaust analyzeBodies(AnalyzeExhaust analyzeExhaustHeaders, JetFile file) { private static AnalyzeExhaust analyzeBodies(AnalyzeExhaust analyzeExhaustHeaders, JetFile file) {
BodiesResolveContext context = analyzeExhaustHeaders.getBodiesResolveContext(); BodiesResolveContext context = analyzeExhaustHeaders.getBodiesResolveContext();
ModuleConfiguration moduleConfiguration = analyzeExhaustHeaders.getModuleConfiguration();
assert context != null : "Headers resolver should prepare and stored information for bodies resolve"; assert context != null : "Headers resolver should prepare and stored information for bodies resolve";
// Need to resolve bodies in given file and all in the same package // Need to resolve bodies in given file and all in the same package
@@ -154,7 +153,7 @@ public final class AnalyzerFacadeWithCache {
new DelegatingBindingTrace(analyzeExhaustHeaders.getBindingContext(), new DelegatingBindingTrace(analyzeExhaustHeaders.getBindingContext(),
"trace to resolve bodies in file", file.getName()), "trace to resolve bodies in file", file.getName()),
context, context,
moduleConfiguration); analyzeExhaustHeaders.getModuleDescriptor());
} }
@NotNull @NotNull
@@ -22,7 +22,7 @@ import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.analyzer.AnalyzeExhaust; import org.jetbrains.jet.analyzer.AnalyzeExhaust;
import org.jetbrains.jet.analyzer.AnalyzerFacade; import org.jetbrains.jet.analyzer.AnalyzerFacade;
import org.jetbrains.jet.lang.ModuleConfiguration; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.AnalyzerScriptParameter; import org.jetbrains.jet.lang.resolve.AnalyzerScriptParameter;
import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.BindingTrace;
@@ -59,9 +59,9 @@ public enum JSAnalyzerFacadeForIDEA implements AnalyzerFacade {
@NotNull Predicate<PsiFile> filesForBodiesResolve, @NotNull Predicate<PsiFile> filesForBodiesResolve,
@NotNull BindingTrace traceContext, @NotNull BindingTrace traceContext,
@NotNull BodiesResolveContext bodiesResolveContext, @NotNull BodiesResolveContext bodiesResolveContext,
@NotNull ModuleConfiguration configuration @NotNull ModuleDescriptor module
) { ) {
return AnalyzerFacadeForJS.analyzeBodiesInFiles(filesForBodiesResolve, new IDEAConfig(project), traceContext, bodiesResolveContext, configuration); return AnalyzerFacadeForJS.analyzeBodiesInFiles(filesForBodiesResolve, new IDEAConfig(project), traceContext, bodiesResolveContext, module);
} }
@NotNull @NotNull
@@ -25,7 +25,6 @@ import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.analyzer.AnalyzeExhaust; import org.jetbrains.jet.analyzer.AnalyzeExhaust;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.diagnostics.Diagnostic; import org.jetbrains.jet.lang.diagnostics.Diagnostic;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
@@ -155,7 +154,6 @@ public class MigrateSureInProjectFix extends JetIntentionAction<PsiElement> {
Predicates.<PsiFile>alwaysFalse()); Predicates.<PsiFile>alwaysFalse());
BodiesResolveContext context = analyzeExhaustHeaders.getBodiesResolveContext(); BodiesResolveContext context = analyzeExhaustHeaders.getBodiesResolveContext();
ModuleConfiguration moduleConfiguration = analyzeExhaustHeaders.getModuleConfiguration();
assert context != null : "Headers resolver should prepare and stored information for bodies resolve"; assert context != null : "Headers resolver should prepare and stored information for bodies resolve";
// Need to resolve bodies in given file and all in the same package // Need to resolve bodies in given file and all in the same package
@@ -165,6 +163,6 @@ public class MigrateSureInProjectFix extends JetIntentionAction<PsiElement> {
Predicates.<PsiFile>alwaysTrue(), Predicates.<PsiFile>alwaysTrue(),
new DelegatingBindingTrace(analyzeExhaustHeaders.getBindingContext(), "trace in migrate sure fix"), new DelegatingBindingTrace(analyzeExhaustHeaders.getBindingContext(), "trace in migrate sure fix"),
context, context,
moduleConfiguration); analyzeExhaustHeaders.getModuleDescriptor());
} }
} }
@@ -31,7 +31,6 @@ import com.intellij.psi.PsiWhiteSpace;
import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.refactoring.HelpID; import com.intellij.refactoring.HelpID;
import com.intellij.refactoring.introduce.inplace.OccurrencesChooser; import com.intellij.refactoring.introduce.inplace.OccurrencesChooser;
import com.intellij.refactoring.util.CommonRefactoringUtil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.analyzer.AnalyzeExhaust; import org.jetbrains.jet.analyzer.AnalyzeExhaust;
@@ -128,7 +127,7 @@ public class JetIntroduceVariableHandler extends JetIntroduceHandlerBase {
} }
ObservableBindingTrace bindingTrace = new ObservableBindingTrace(new BindingTraceContext()); ObservableBindingTrace bindingTrace = new ObservableBindingTrace(new BindingTraceContext());
InjectorForMacros injector = new InjectorForMacros(project, analyzeExhaust.getModuleConfiguration()); InjectorForMacros injector = new InjectorForMacros(project, analyzeExhaust.getModuleDescriptor());
JetType typeNoExpectedType = injector.getExpressionTypingServices().getType(scope, expression, JetType typeNoExpectedType = injector.getExpressionTypingServices().getType(scope, expression,
TypeUtils.NO_EXPECTED_TYPE, dataFlowInfo, TypeUtils.NO_EXPECTED_TYPE, dataFlowInfo,
bindingTrace); bindingTrace);
@@ -26,7 +26,6 @@ import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters; import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl; import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolverDummyImpl; import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolverDummyImpl;
import org.jetbrains.jet.lang.resolve.NamespaceFactoryImpl; import org.jetbrains.jet.lang.resolve.NamespaceFactoryImpl;
import org.jetbrains.jet.lang.resolve.DeclarationResolver; import org.jetbrains.jet.lang.resolve.DeclarationResolver;
@@ -61,7 +60,6 @@ public class InjectorForTopDownAnalyzerForJs {
private final TopDownAnalysisParameters topDownAnalysisParameters; private final TopDownAnalysisParameters topDownAnalysisParameters;
private final BindingTrace bindingTrace; private final BindingTrace bindingTrace;
private final ModuleDescriptorImpl moduleDescriptor; private final ModuleDescriptorImpl moduleDescriptor;
private final ModuleConfiguration moduleConfiguration;
private DependencyClassByQualifiedNameResolverDummyImpl dependencyClassByQualifiedNameResolverDummy; private DependencyClassByQualifiedNameResolverDummyImpl dependencyClassByQualifiedNameResolverDummy;
private NamespaceFactoryImpl namespaceFactory; private NamespaceFactoryImpl namespaceFactory;
private DeclarationResolver declarationResolver; private DeclarationResolver declarationResolver;
@@ -85,8 +83,7 @@ public class InjectorForTopDownAnalyzerForJs {
@NotNull Project project, @NotNull Project project,
@NotNull TopDownAnalysisParameters topDownAnalysisParameters, @NotNull TopDownAnalysisParameters topDownAnalysisParameters,
@NotNull BindingTrace bindingTrace, @NotNull BindingTrace bindingTrace,
@NotNull ModuleDescriptorImpl moduleDescriptor, @NotNull ModuleDescriptorImpl moduleDescriptor
@NotNull ModuleConfiguration moduleConfiguration
) { ) {
this.topDownAnalyzer = new TopDownAnalyzer(); this.topDownAnalyzer = new TopDownAnalyzer();
this.topDownAnalysisContext = new TopDownAnalysisContext(); this.topDownAnalysisContext = new TopDownAnalysisContext();
@@ -98,7 +95,6 @@ public class InjectorForTopDownAnalyzerForJs {
this.topDownAnalysisParameters = topDownAnalysisParameters; this.topDownAnalysisParameters = topDownAnalysisParameters;
this.bindingTrace = bindingTrace; this.bindingTrace = bindingTrace;
this.moduleDescriptor = moduleDescriptor; this.moduleDescriptor = moduleDescriptor;
this.moduleConfiguration = moduleConfiguration;
this.dependencyClassByQualifiedNameResolverDummy = new DependencyClassByQualifiedNameResolverDummyImpl(); this.dependencyClassByQualifiedNameResolverDummy = new DependencyClassByQualifiedNameResolverDummyImpl();
this.namespaceFactory = new NamespaceFactoryImpl(); this.namespaceFactory = new NamespaceFactoryImpl();
this.declarationResolver = new DeclarationResolver(); this.declarationResolver = new DeclarationResolver();
@@ -150,7 +146,6 @@ public class InjectorForTopDownAnalyzerForJs {
this.descriptorResolver.setExpressionTypingServices(expressionTypingServices); this.descriptorResolver.setExpressionTypingServices(expressionTypingServices);
this.descriptorResolver.setTypeResolver(typeResolver); this.descriptorResolver.setTypeResolver(typeResolver);
namespaceFactory.setConfiguration(moduleConfiguration);
namespaceFactory.setModuleDescriptor(moduleDescriptor); namespaceFactory.setModuleDescriptor(moduleDescriptor);
namespaceFactory.setTrace(bindingTrace); namespaceFactory.setTrace(bindingTrace);
@@ -182,14 +177,14 @@ public class InjectorForTopDownAnalyzerForJs {
typeResolver.setAnnotationResolver(annotationResolver); typeResolver.setAnnotationResolver(annotationResolver);
typeResolver.setDescriptorResolver(descriptorResolver); typeResolver.setDescriptorResolver(descriptorResolver);
typeResolver.setModuleConfiguration(moduleConfiguration); typeResolver.setModuleDescriptor(moduleDescriptor);
typeResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver); typeResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver);
candidateResolver.setArgumentTypeResolver(argumentTypeResolver); candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
importsResolver.setConfiguration(moduleConfiguration);
importsResolver.setContext(topDownAnalysisContext); importsResolver.setContext(topDownAnalysisContext);
importsResolver.setImportsFactory(jetImportsFactory); importsResolver.setImportsFactory(jetImportsFactory);
importsResolver.setModuleDescriptor(moduleDescriptor);
importsResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver); importsResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver);
importsResolver.setTrace(bindingTrace); importsResolver.setTrace(bindingTrace);
@@ -261,8 +256,8 @@ public class InjectorForTopDownAnalyzerForJs {
return this.bindingTrace; return this.bindingTrace;
} }
public ModuleConfiguration getModuleConfiguration() { public ModuleDescriptorImpl getModuleDescriptor() {
return this.moduleConfiguration; return this.moduleDescriptor;
} }
} }
@@ -25,13 +25,13 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.analyzer.AnalyzeExhaust; import org.jetbrains.jet.analyzer.AnalyzeExhaust;
import org.jetbrains.jet.analyzer.AnalyzerFacadeForEverything; import org.jetbrains.jet.analyzer.AnalyzerFacadeForEverything;
import org.jetbrains.jet.di.InjectorForTopDownAnalyzerForJs; import org.jetbrains.jet.di.InjectorForTopDownAnalyzerForJs;
import org.jetbrains.jet.lang.ModuleConfiguration; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl; import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.*; import org.jetbrains.jet.lang.resolve.*;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.lazy.declarations.FileBasedDeclarationProviderFactory; import org.jetbrains.jet.lang.resolve.lazy.declarations.FileBasedDeclarationProviderFactory;
import org.jetbrains.jet.lang.resolve.lazy.storage.LockBasedStorageManager; import org.jetbrains.jet.lang.resolve.lazy.storage.LockBasedStorageManager;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.k2js.config.Config; import org.jetbrains.k2js.config.Config;
@@ -87,10 +87,8 @@ public final class AnalyzerFacadeForJS {
BindingTrace trace = libraryBindingContext == null ? BindingTrace trace = libraryBindingContext == null ?
new ObservableBindingTrace(new BindingTraceContext()) : new ObservableBindingTrace(new BindingTraceContext()) :
new DelegatingBindingTrace(libraryBindingContext, "trace for analyzing library in js"); new DelegatingBindingTrace(libraryBindingContext, "trace for analyzing library in js");
InjectorForTopDownAnalyzerForJs injector = new InjectorForTopDownAnalyzerForJs( owner.setModuleConfiguration(new JsConfiguration(libraryBindingContext));
project, topDownAnalysisParameters, trace, owner, InjectorForTopDownAnalyzerForJs injector = new InjectorForTopDownAnalyzerForJs(project, topDownAnalysisParameters, trace, owner);
new JsConfiguration(libraryBindingContext));
owner.setModuleConfiguration(injector.getModuleConfiguration());
try { try {
Collection<JetFile> allFiles = libraryBindingContext != null ? Collection<JetFile> allFiles = libraryBindingContext != null ?
files : files :
@@ -99,7 +97,7 @@ public final class AnalyzerFacadeForJS {
BodiesResolveContext bodiesResolveContext = storeContextForBodiesResolve ? BodiesResolveContext bodiesResolveContext = storeContextForBodiesResolve ?
new CachedBodiesResolveContext(injector.getTopDownAnalysisContext()) : new CachedBodiesResolveContext(injector.getTopDownAnalysisContext()) :
null; null;
return AnalyzeExhaust.success(trace.getBindingContext(), bodiesResolveContext, injector.getModuleConfiguration()); return AnalyzeExhaust.success(trace.getBindingContext(), bodiesResolveContext, owner);
} }
finally { finally {
injector.destroy(); injector.destroy();
@@ -112,12 +110,12 @@ public final class AnalyzerFacadeForJS {
@NotNull Config config, @NotNull Config config,
@NotNull BindingTrace traceContext, @NotNull BindingTrace traceContext,
@NotNull BodiesResolveContext bodiesResolveContext, @NotNull BodiesResolveContext bodiesResolveContext,
@NotNull ModuleConfiguration configuration) { @NotNull ModuleDescriptor module) {
Predicate<PsiFile> completely = Predicates.and(notLibFiles(config.getLibFiles()), filesToAnalyzeCompletely); Predicate<PsiFile> completely = Predicates.and(notLibFiles(config.getLibFiles()), filesToAnalyzeCompletely);
return AnalyzerFacadeForEverything.analyzeBodiesInFilesWithJavaIntegration( return AnalyzerFacadeForEverything.analyzeBodiesInFilesWithJavaIntegration(
config.getProject(), Collections.<AnalyzerScriptParameter>emptyList(), completely, traceContext, bodiesResolveContext, config.getProject(), Collections.<AnalyzerScriptParameter>emptyList(), completely, traceContext, bodiesResolveContext,
configuration); module);
} }
public static void checkForErrors(@NotNull Collection<JetFile> allFiles, @NotNull BindingContext bindingContext) { public static void checkForErrors(@NotNull Collection<JetFile> allFiles, @NotNull BindingContext bindingContext) {
@@ -146,6 +144,6 @@ public final class AnalyzerFacadeForJS {
storageManager, Config.withJsLibAdded(files, config), Predicates.<FqName>alwaysFalse()); storageManager, Config.withJsLibAdded(files, config), Predicates.<FqName>alwaysFalse());
ModuleDescriptorImpl lazyModule = new ModuleDescriptorImpl(Name.special("<lazy module>")); ModuleDescriptorImpl lazyModule = new ModuleDescriptorImpl(Name.special("<lazy module>"));
lazyModule.setModuleConfiguration(new JsConfiguration(null)); lazyModule.setModuleConfiguration(new JsConfiguration(null));
return new ResolveSession(config.getProject(), storageManager, lazyModule, lazyModule.getModuleConfiguration(), declarationProviderFactory); return new ResolveSession(config.getProject(), storageManager, lazyModule, declarationProviderFactory);
} }
} }