add ModuleConfiguration to injectors

(to be able to use it in TypeResolver)
This commit is contained in:
Svetlana Isakova
2012-08-28 17:17:22 +04:00
parent 5aca16e65e
commit 7073b12d11
19 changed files with 125 additions and 49 deletions
@@ -235,7 +235,7 @@ public class ReplInterpreter {
}
GenerationState generationState = new GenerationState(psiFile.getProject(), ClassBuilderFactories.binaries(false), backendProgress,
AnalyzeExhaust.success(trace.getBindingContext()), Collections.singletonList(psiFile),
AnalyzeExhaust.success(trace.getBindingContext(), injector.getModuleConfiguration()), Collections.singletonList(psiFile),
BuiltinToJavaTypesMapping.ENABLED);
generationState.getScriptCodegen().compileScript(psiFile.getScript(), scriptClassName, earierScripts,
CompilationErrorHandler.THROW_EXCEPTION);
@@ -197,6 +197,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
typeResolver.setAnnotationResolver(annotationResolver);
typeResolver.setDescriptorResolver(descriptorResolver);
typeResolver.setModuleConfiguration(moduleConfiguration);
typeResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver);
importsResolver.setConfiguration(moduleConfiguration);
@@ -26,6 +26,7 @@ import org.jetbrains.jet.analyzer.AnalyzerFacade;
import org.jetbrains.jet.analyzer.AnalyzerFacadeForEverything;
import org.jetbrains.jet.di.InjectorForTopDownAnalyzerForJvm;
import org.jetbrains.jet.lang.BuiltinsScopeExtensionMode;
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.resolve.*;
@@ -61,11 +62,12 @@ public enum AnalyzerFacadeForJVM implements AnalyzerFacade {
@NotNull List<AnalyzerScriptParameter> scriptParameters,
@NotNull Predicate<PsiFile> filesForBodiesResolve,
@NotNull BindingTrace headersTraceContext,
@NotNull BodiesResolveContext bodiesResolveContext
@NotNull BodiesResolveContext bodiesResolveContext,
@NotNull ModuleConfiguration configuration
) {
return AnalyzerFacadeForEverything.analyzeBodiesInFilesWithJavaIntegration(
project, scriptParameters, filesForBodiesResolve,
headersTraceContext, bodiesResolveContext);
headersTraceContext, bodiesResolveContext, configuration);
}
public static AnalyzeExhaust analyzeOneFileWithJavaIntegrationAndCheckForErrors(
@@ -126,7 +128,7 @@ public enum AnalyzerFacadeForJVM implements AnalyzerFacade {
BodiesResolveContext bodiesResolveContext = storeContextForBodiesResolve ?
new CachedBodiesResolveContext(injector.getTopDownAnalysisContext()) :
null;
return AnalyzeExhaust.success(bindingTraceContext.getBindingContext(), bodiesResolveContext);
return AnalyzeExhaust.success(bindingTraceContext.getBindingContext(), bodiesResolveContext, injector.getModuleConfiguration());
} finally {
injector.destroy();
}
@@ -18,39 +18,50 @@ package org.jetbrains.jet.analyzer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.psi.JetImportDirective;
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.types.lang.JetStandardLibrary;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
import java.util.Collection;
/**
* @author Stepan Koltsov
*/
public class AnalyzeExhaust {
@NotNull
private final BindingContext bindingContext;
private final Throwable error;
@Nullable
private final BodiesResolveContext bodiesResolveContext;
private final ModuleConfiguration configuration;
private AnalyzeExhaust(@NotNull BindingContext bindingContext,
@Nullable BodiesResolveContext bodiesResolveContext, @Nullable Throwable error) {
private AnalyzeExhaust(
@NotNull BindingContext bindingContext,
@NotNull ModuleConfiguration configuration,
@Nullable BodiesResolveContext bodiesResolveContext,
@Nullable Throwable error
) {
this.bindingContext = bindingContext;
this.error = error;
this.bodiesResolveContext = bodiesResolveContext;
this.configuration = configuration;
}
public static AnalyzeExhaust success(@NotNull BindingContext bindingContext) {
return new AnalyzeExhaust(bindingContext, null, null);
public static AnalyzeExhaust success(@NotNull BindingContext bindingContext, @NotNull ModuleConfiguration configuration) {
return new AnalyzeExhaust(bindingContext, configuration, null, null);
}
public static AnalyzeExhaust success(@NotNull BindingContext bindingContext,
BodiesResolveContext bodiesResolveContext) {
return new AnalyzeExhaust(bindingContext, bodiesResolveContext, null);
@Nullable BodiesResolveContext bodiesResolveContext,
@NotNull ModuleConfiguration configuration
) {
return new AnalyzeExhaust(bindingContext, configuration, bodiesResolveContext, null);
}
public static AnalyzeExhaust error(@NotNull BindingContext bindingContext, @NotNull Throwable error) {
return new AnalyzeExhaust(bindingContext, null, error);
return new AnalyzeExhaust(bindingContext, ModuleConfiguration.EMPTY, null, error);
}
@Nullable
@@ -77,4 +88,9 @@ public class AnalyzeExhaust {
throw new IllegalStateException("failed to analyze: " + error, error);
}
}
@NotNull
public ModuleConfiguration getModuleConfiguration() {
return configuration;
}
}
@@ -20,6 +20,7 @@ import com.google.common.base.Predicate;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.AnalyzerScriptParameter;
import org.jetbrains.jet.lang.resolve.BindingTrace;
@@ -34,15 +35,20 @@ import java.util.List;
public interface AnalyzerFacade {
@NotNull
AnalyzeExhaust analyzeFiles(@NotNull Project project,
@NotNull Collection<JetFile> files,
@NotNull List<AnalyzerScriptParameter> scriptParameters,
@NotNull Predicate<PsiFile> filesToAnalyzeCompletely);
AnalyzeExhaust analyzeFiles(
@NotNull Project project,
@NotNull Collection<JetFile> files,
@NotNull List<AnalyzerScriptParameter> scriptParameters,
@NotNull Predicate<PsiFile> filesToAnalyzeCompletely
);
@NotNull
AnalyzeExhaust analyzeBodiesInFiles(@NotNull Project project,
@NotNull List<AnalyzerScriptParameter> scriptParameters,
@NotNull Predicate<PsiFile> filesForBodiesResolve,
@NotNull BindingTrace traceContext,
@NotNull BodiesResolveContext bodiesResolveContext);
AnalyzeExhaust analyzeBodiesInFiles(
@NotNull Project project,
@NotNull List<AnalyzerScriptParameter> scriptParameters,
@NotNull Predicate<PsiFile> filesForBodiesResolve,
@NotNull BindingTrace traceContext,
@NotNull BodiesResolveContext bodiesResolveContext,
@NotNull ModuleConfiguration configuration
);
}
@@ -21,6 +21,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.di.InjectorForBodyResolve;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.resolve.AnalyzerScriptParameter;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.BodiesResolveContext;
@@ -40,7 +41,8 @@ public class AnalyzerFacadeForEverything {
public static AnalyzeExhaust analyzeBodiesInFilesWithJavaIntegration(
Project project, List<AnalyzerScriptParameter> scriptParameters, Predicate<PsiFile> filesToAnalyzeCompletely,
@NotNull BindingTrace traceContext,
@NotNull BodiesResolveContext bodiesResolveContext) {
@NotNull BodiesResolveContext bodiesResolveContext,
@NotNull ModuleConfiguration configuration) {
TopDownAnalysisParameters topDownAnalysisParameters = new TopDownAnalysisParameters(
filesToAnalyzeCompletely, false, false, scriptParameters);
@@ -50,11 +52,11 @@ public class AnalyzerFacadeForEverything {
InjectorForBodyResolve injector = new InjectorForBodyResolve(
project, topDownAnalysisParameters,
new ObservableBindingTrace(traceContext),
bodiesResolveContext);
bodiesResolveContext, configuration);
try {
injector.getBodyResolver().resolveBodies();
return AnalyzeExhaust.success(traceContext.getBindingContext());
return AnalyzeExhaust.success(traceContext.getBindingContext(), configuration);
} finally {
injector.destroy();
}
@@ -22,6 +22,7 @@ import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.BodiesResolveContext;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
import org.jetbrains.jet.lang.resolve.AnnotationResolver;
@@ -44,6 +45,7 @@ public class InjectorForBodyResolve {
private final TopDownAnalysisParameters topDownAnalysisParameters;
private final BindingTrace bindingTrace;
private final BodiesResolveContext bodiesResolveContext;
private final ModuleConfiguration moduleConfiguration;
private CallResolver callResolver;
private DescriptorResolver descriptorResolver;
private AnnotationResolver annotationResolver;
@@ -60,13 +62,15 @@ public class InjectorForBodyResolve {
@NotNull Project project,
@NotNull TopDownAnalysisParameters topDownAnalysisParameters,
@NotNull BindingTrace bindingTrace,
@NotNull BodiesResolveContext bodiesResolveContext
@NotNull BodiesResolveContext bodiesResolveContext,
@NotNull ModuleConfiguration moduleConfiguration
) {
this.bodyResolver = new BodyResolver();
this.project = project;
this.topDownAnalysisParameters = topDownAnalysisParameters;
this.bindingTrace = bindingTrace;
this.bodiesResolveContext = bodiesResolveContext;
this.moduleConfiguration = moduleConfiguration;
this.callResolver = new CallResolver();
this.descriptorResolver = new DescriptorResolver();
this.annotationResolver = new AnnotationResolver();
@@ -108,6 +112,7 @@ public class InjectorForBodyResolve {
typeResolver.setAnnotationResolver(annotationResolver);
typeResolver.setDescriptorResolver(descriptorResolver);
typeResolver.setModuleConfiguration(moduleConfiguration);
typeResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver);
controlFlowAnalyzer.setTopDownAnalysisParameters(topDownAnalysisParameters);
@@ -20,6 +20,7 @@ package org.jetbrains.jet.di;
import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
import org.jetbrains.jet.lang.resolve.TypeResolver;
@@ -37,6 +38,7 @@ public class InjectorForLazyResolve {
private final Project project;
private final ResolveSession resolveSession;
private final BindingTrace bindingTrace;
private final ModuleConfiguration moduleConfiguration;
private DescriptorResolver descriptorResolver;
private ExpressionTypingServices expressionTypingServices;
private TypeResolver typeResolver;
@@ -49,11 +51,13 @@ public class InjectorForLazyResolve {
public InjectorForLazyResolve(
@NotNull Project project,
@NotNull ResolveSession resolveSession,
@NotNull BindingTrace bindingTrace
@NotNull BindingTrace bindingTrace,
@NotNull ModuleConfiguration moduleConfiguration
) {
this.project = project;
this.resolveSession = resolveSession;
this.bindingTrace = bindingTrace;
this.moduleConfiguration = moduleConfiguration;
this.descriptorResolver = new DescriptorResolver();
this.expressionTypingServices = new ExpressionTypingServices();
this.typeResolver = new TypeResolver();
@@ -74,6 +78,7 @@ public class InjectorForLazyResolve {
this.typeResolver.setAnnotationResolver(annotationResolver);
this.typeResolver.setDescriptorResolver(descriptorResolver);
this.typeResolver.setModuleConfiguration(moduleConfiguration);
this.typeResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver);
this.annotationResolver.setCallResolver(callResolver);
@@ -19,6 +19,7 @@ package org.jetbrains.jet.di;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
import org.jetbrains.jet.lang.resolve.AnnotationResolver;
@@ -33,6 +34,7 @@ public class InjectorForMacros {
private ExpressionTypingServices expressionTypingServices;
private final Project project;
private final ModuleConfiguration moduleConfiguration;
private CallResolver callResolver;
private DescriptorResolver descriptorResolver;
private AnnotationResolver annotationResolver;
@@ -41,10 +43,12 @@ public class InjectorForMacros {
private OverloadingConflictResolver overloadingConflictResolver;
public InjectorForMacros(
@NotNull Project project
@NotNull Project project,
@NotNull ModuleConfiguration moduleConfiguration
) {
this.expressionTypingServices = new ExpressionTypingServices();
this.project = project;
this.moduleConfiguration = moduleConfiguration;
this.callResolver = new CallResolver();
this.descriptorResolver = new DescriptorResolver();
this.annotationResolver = new AnnotationResolver();
@@ -71,6 +75,7 @@ public class InjectorForMacros {
typeResolver.setAnnotationResolver(annotationResolver);
typeResolver.setDescriptorResolver(descriptorResolver);
typeResolver.setModuleConfiguration(moduleConfiguration);
typeResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver);
}
@@ -168,6 +168,7 @@ public class InjectorForTopDownAnalyzerBasic {
typeResolver.setAnnotationResolver(annotationResolver);
typeResolver.setDescriptorResolver(descriptorResolver);
typeResolver.setModuleConfiguration(moduleConfiguration);
typeResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver);
importsResolver.setConfiguration(moduleConfiguration);
@@ -18,6 +18,7 @@ package org.jetbrains.jet.lang.resolve;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
@@ -47,6 +48,7 @@ public class TypeResolver {
private AnnotationResolver annotationResolver;
private DescriptorResolver descriptorResolver;
private QualifiedExpressionResolver qualifiedExpressionResolver;
private ModuleConfiguration moduleConfiguration;
@Inject
public void setDescriptorResolver(DescriptorResolver descriptorResolver) {
@@ -63,6 +65,11 @@ public class TypeResolver {
this.qualifiedExpressionResolver = qualifiedExpressionResolver;
}
@Inject
public void setModuleConfiguration(@NotNull ModuleConfiguration moduleConfiguration) {
this.moduleConfiguration = moduleConfiguration;
}
@NotNull
public JetType resolveType(@NotNull final JetScope scope, @NotNull final JetTypeReference typeReference, BindingTrace trace, boolean checkBounds) {
JetType cachedType = trace.getBindingContext().get(BindingContext.TYPE, typeReference);
@@ -85,7 +85,7 @@ public class ResolveSession {
) {
this.classifierAliases = classifierAliases;
this.specialClasses = specialClasses;
this.injector = new InjectorForLazyResolve(project, this, trace);
this.injector = new InjectorForLazyResolve(project, this, trace, moduleConfiguration);
this.module = rootDescriptor;
this.moduleConfiguration = moduleConfiguration;
PackageMemberDeclarationProvider provider = declarationProviderFactory.getPackageMemberDeclarationProvider(FqName.ROOT);
@@ -22,6 +22,7 @@ import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
import org.jetbrains.jet.lang.resolve.TypeResolver;
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
import org.jetbrains.jet.lang.ModuleConfiguration;
import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.resolve.AnnotationResolver;
import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver;
@@ -37,6 +38,7 @@ public class InjectorForTests {
private TypeResolver typeResolver;
private CallResolver callResolver;
private JetStandardLibrary jetStandardLibrary;
private ModuleConfiguration moduleConfiguration;
private final Project project;
private AnnotationResolver annotationResolver;
private QualifiedExpressionResolver qualifiedExpressionResolver;
@@ -50,6 +52,7 @@ public class InjectorForTests {
this.typeResolver = new TypeResolver();
this.callResolver = new CallResolver();
this.jetStandardLibrary = JetStandardLibrary.getInstance();
this.moduleConfiguration = ModuleConfiguration.EMPTY;
this.project = project;
this.annotationResolver = new AnnotationResolver();
this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
@@ -66,6 +69,7 @@ public class InjectorForTests {
this.typeResolver.setAnnotationResolver(annotationResolver);
this.typeResolver.setDescriptorResolver(descriptorResolver);
this.typeResolver.setModuleConfiguration(moduleConfiguration);
this.typeResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver);
this.callResolver.setDescriptorResolver(descriptorResolver);
@@ -29,6 +29,7 @@ import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiNamedElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.analyzer.AnalyzeExhaust;
import org.jetbrains.jet.cli.jvm.compiler.TipsManager;
import org.jetbrains.jet.di.InjectorForMacros;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
@@ -63,13 +64,14 @@ public abstract class BaseJetVariableMacro extends Macro {
JetExpression contextExpression = findContextExpression(psiFile, context.getStartOffset());
if (contextExpression == null) return null;
BindingContext bc = WholeProjectAnalyzerFacade.analyzeProjectWithCacheOnAFile((JetFile) psiFile).getBindingContext();
AnalyzeExhaust analyzeExhaust = WholeProjectAnalyzerFacade.analyzeProjectWithCacheOnAFile((JetFile) psiFile);
BindingContext bc = analyzeExhaust.getBindingContext();
JetScope scope = bc.get(BindingContext.RESOLUTION_SCOPE, contextExpression);
if (scope == null) {
return null;
}
ExpressionTypingServices callResolverContext = new InjectorForMacros(project).getExpressionTypingServices();
ExpressionTypingServices callResolverContext = new InjectorForMacros(project, analyzeExhaust.getModuleConfiguration()).getExpressionTypingServices();
List<VariableDescriptor> filteredDescriptors = new ArrayList<VariableDescriptor>();
for (DeclarationDescriptor declarationDescriptor : scope.getAllDescriptors()) {
@@ -22,6 +22,7 @@ import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.analyzer.AnalyzeExhaust;
import org.jetbrains.jet.analyzer.AnalyzerFacade;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.AnalyzerScriptParameter;
import org.jetbrains.jet.lang.resolve.BindingTrace;
@@ -43,20 +44,25 @@ public enum JSAnalyzerFacadeForIDEA implements AnalyzerFacade {
@NotNull
@Override
public AnalyzeExhaust analyzeFiles(@NotNull Project project,
@NotNull Collection<JetFile> files,
@NotNull List<AnalyzerScriptParameter> scriptParameters,
@NotNull Predicate<PsiFile> filesToAnalyzeCompletely) {
public AnalyzeExhaust analyzeFiles(
@NotNull Project project,
@NotNull Collection<JetFile> files,
@NotNull List<AnalyzerScriptParameter> scriptParameters,
@NotNull Predicate<PsiFile> filesToAnalyzeCompletely
) {
return AnalyzerFacadeForJS.analyzeFiles(files, filesToAnalyzeCompletely, new IDEAConfig(project), true);
}
@NotNull
@Override
public AnalyzeExhaust analyzeBodiesInFiles(@NotNull Project project,
@NotNull List<AnalyzerScriptParameter> scriptParameters,
@NotNull Predicate<PsiFile> filesForBodiesResolve,
@NotNull BindingTrace traceContext,
@NotNull BodiesResolveContext bodiesResolveContext) {
return AnalyzerFacadeForJS.analyzeBodiesInFiles(filesForBodiesResolve, new IDEAConfig(project), traceContext, bodiesResolveContext);
public AnalyzeExhaust analyzeBodiesInFiles(
@NotNull Project project,
@NotNull List<AnalyzerScriptParameter> scriptParameters,
@NotNull Predicate<PsiFile> filesForBodiesResolve,
@NotNull BindingTrace traceContext,
@NotNull BodiesResolveContext bodiesResolveContext,
@NotNull ModuleConfiguration configuration
) {
return AnalyzerFacadeForJS.analyzeBodiesInFiles(filesForBodiesResolve, new IDEAConfig(project), traceContext, bodiesResolveContext, configuration);
}
}
@@ -34,6 +34,7 @@ import com.intellij.refactoring.introduce.inplace.OccurrencesChooser;
import com.intellij.refactoring.util.CommonRefactoringUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.analyzer.AnalyzeExhaust;
import org.jetbrains.jet.di.InjectorForMacros;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.psi.*;
@@ -113,7 +114,8 @@ public class JetIntroduceVariableHandler extends JetIntroduceHandlerBase {
return;
}
}
BindingContext bindingContext = AnalyzeSingleFileUtil.getContextForSingleFile((JetFile)expression.getContainingFile());
AnalyzeExhaust analyzeExhaust = AnalyzeSingleFileUtil.analyzeSingleFileWithCache((JetFile) expression.getContainingFile());
BindingContext bindingContext = analyzeExhaust.getBindingContext();
final JetType expressionType = bindingContext.get(BindingContext.EXPRESSION_TYPE, expression); //can be null or error type
JetScope scope = bindingContext.get(BindingContext.RESOLUTION_SCOPE, expression);
if (scope != null) {
@@ -123,7 +125,7 @@ public class JetIntroduceVariableHandler extends JetIntroduceHandlerBase {
}
ObservableBindingTrace bindingTrace = new ObservableBindingTrace(new BindingTraceContext());
InjectorForMacros injector = new InjectorForMacros(project);
InjectorForMacros injector = new InjectorForMacros(project, analyzeExhaust.getModuleConfiguration());
JetType typeNoExpectedType = injector.getExpressionTypingServices().getType(scope, expression,
TypeUtils.NO_EXPECTED_TYPE, dataFlowInfo,
bindingTrace);
@@ -67,6 +67,7 @@ public class AllInjectorsGenerator {
generator.addParameter(Project.class);
generator.addParameter(ResolveSession.class);
generator.addParameter(BindingTrace.class);
generator.addParameter(ModuleConfiguration.class);
generator.addPublicField(DescriptorResolver.class);
generator.addPublicField(ExpressionTypingServices.class);
generator.addPublicField(TypeResolver.class);
@@ -88,7 +89,7 @@ public class AllInjectorsGenerator {
private static void generateInjectorForTopDownAnalyzerForJs() throws IOException {
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
generateInjectorForTopDownAnalyzerCommon(generator);
generator.addParameter(ModuleConfiguration.class);
generator.addPublicParameter(ModuleConfiguration.class);
generator.addField(DependencyClassByQualifiedNameResolverDummyImpl.class);
generator.addField(NamespaceFactoryImpl.class);
generator.generate("js/js.translator/src", "org.jetbrains.jet.di", "InjectorForTopDownAnalyzerForJs");
@@ -148,6 +149,7 @@ public class AllInjectorsGenerator {
// Parameters
generator.addPublicParameter(Project.class);
generator.addParameter(ModuleConfiguration.class);
generator.generate("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForMacros");
}
@@ -161,6 +163,7 @@ public class AllInjectorsGenerator {
generator.addPublicField(TypeResolver.class);
generator.addPublicField(CallResolver.class);
generator.addField(true, JetStandardLibrary.class, null, new GivenExpression("JetStandardLibrary.getInstance()"));
generator.addField(false, ModuleConfiguration.class, null, new GivenExpression("ModuleConfiguration.EMPTY"));
// Parameters
generator.addPublicParameter(Project.class);
@@ -226,6 +229,7 @@ public class AllInjectorsGenerator {
generator.addPublicParameter(TopDownAnalysisParameters.class);
generator.addPublicParameter(BindingTrace.class);
generator.addPublicParameter(BodiesResolveContext.class);
generator.addParameter(ModuleConfiguration.class);
generator.generate("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForBodyResolve");
}
}
@@ -168,6 +168,7 @@ public class InjectorForTopDownAnalyzerForJs {
typeResolver.setAnnotationResolver(annotationResolver);
typeResolver.setDescriptorResolver(descriptorResolver);
typeResolver.setModuleConfiguration(moduleConfiguration);
typeResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver);
importsResolver.setConfiguration(moduleConfiguration);
@@ -241,4 +242,8 @@ public class InjectorForTopDownAnalyzerForJs {
return this.bindingTrace;
}
public ModuleConfiguration getModuleConfiguration() {
return this.moduleConfiguration;
}
}
@@ -25,6 +25,7 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.analyzer.AnalyzeExhaust;
import org.jetbrains.jet.analyzer.AnalyzerFacadeForEverything;
import org.jetbrains.jet.di.InjectorForTopDownAnalyzerForJs;
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.resolve.*;
@@ -96,7 +97,7 @@ public final class AnalyzerFacadeForJS {
BodiesResolveContext bodiesResolveContext = storeContextForBodiesResolve ?
new CachedBodiesResolveContext(injector.getTopDownAnalysisContext()) :
null;
return AnalyzeExhaust.success(trace.getBindingContext(), bodiesResolveContext);
return AnalyzeExhaust.success(trace.getBindingContext(), bodiesResolveContext, injector.getModuleConfiguration());
}
finally {
injector.destroy();
@@ -108,11 +109,13 @@ public final class AnalyzerFacadeForJS {
@NotNull Predicate<PsiFile> filesToAnalyzeCompletely,
@NotNull Config config,
@NotNull BindingTrace traceContext,
@NotNull BodiesResolveContext bodiesResolveContext) {
@NotNull BodiesResolveContext bodiesResolveContext,
@NotNull ModuleConfiguration configuration) {
Predicate<PsiFile> completely = Predicates.and(notLibFiles(config.getLibFiles()), filesToAnalyzeCompletely);
return AnalyzerFacadeForEverything.analyzeBodiesInFilesWithJavaIntegration(
config.getProject(), Collections.<AnalyzerScriptParameter>emptyList(), completely, traceContext, bodiesResolveContext);
config.getProject(), Collections.<AnalyzerScriptParameter>emptyList(), completely, traceContext, bodiesResolveContext,
configuration);
}
public static void checkForErrors(@NotNull Collection<JetFile> allFiles, @NotNull BindingContext bindingContext) {