Inject StorageManager to ResolutionTaskHolder

This commit is contained in:
Stanislav Erokhin
2014-10-27 19:45:14 +03:00
parent b7f7a3349d
commit eb50e4adb3
11 changed files with 59 additions and 11 deletions
@@ -57,6 +57,7 @@ import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver;
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
import org.jetbrains.jet.lang.resolve.calls.CallCompleter; import org.jetbrains.jet.lang.resolve.calls.CallCompleter;
import org.jetbrains.jet.lang.resolve.calls.CandidateResolver; import org.jetbrains.jet.lang.resolve.calls.CandidateResolver;
import org.jetbrains.jet.lang.resolve.calls.tasks.TaskPrioritizer;
import org.jetbrains.jet.lang.psi.JetImportsFactory; import org.jetbrains.jet.lang.psi.JetImportsFactory;
import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider; import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider;
import org.jetbrains.jet.lang.resolve.ScriptBodyResolver; import org.jetbrains.jet.lang.resolve.ScriptBodyResolver;
@@ -116,6 +117,7 @@ public class InjectorForLazyResolveWithJava {
private final CallResolverExtensionProvider callResolverExtensionProvider; private final CallResolverExtensionProvider callResolverExtensionProvider;
private final CallCompleter callCompleter; private final CallCompleter callCompleter;
private final CandidateResolver candidateResolver; private final CandidateResolver candidateResolver;
private final TaskPrioritizer taskPrioritizer;
private final JetImportsFactory jetImportsFactory; private final JetImportsFactory jetImportsFactory;
private final ScopeProvider scopeProvider; private final ScopeProvider scopeProvider;
private final ScriptBodyResolver scriptBodyResolver; private final ScriptBodyResolver scriptBodyResolver;
@@ -181,6 +183,7 @@ public class InjectorForLazyResolveWithJava {
this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.callResolverExtensionProvider = new CallResolverExtensionProvider();
this.candidateResolver = new CandidateResolver(); this.candidateResolver = new CandidateResolver();
this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver); this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver);
this.taskPrioritizer = new TaskPrioritizer(storageManager);
this.jetImportsFactory = new JetImportsFactory(); this.jetImportsFactory = new JetImportsFactory();
this.scopeProvider = new ScopeProvider(getResolveSession()); this.scopeProvider = new ScopeProvider(getResolveSession());
this.scriptBodyResolver = new ScriptBodyResolver(); this.scriptBodyResolver = new ScriptBodyResolver();
@@ -220,6 +223,7 @@ public class InjectorForLazyResolveWithJava {
callResolver.setCallCompleter(callCompleter); callResolver.setCallCompleter(callCompleter);
callResolver.setCandidateResolver(candidateResolver); callResolver.setCandidateResolver(candidateResolver);
callResolver.setExpressionTypingServices(expressionTypingServices); callResolver.setExpressionTypingServices(expressionTypingServices);
callResolver.setTaskPrioritizer(taskPrioritizer);
callResolver.setTypeResolver(typeResolver); callResolver.setTypeResolver(typeResolver);
argumentTypeResolver.setExpressionTypingServices(expressionTypingServices); argumentTypeResolver.setExpressionTypingServices(expressionTypingServices);
@@ -60,6 +60,7 @@ import org.jetbrains.jet.context.LazinessToken;
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
import org.jetbrains.jet.lang.resolve.calls.CallCompleter; import org.jetbrains.jet.lang.resolve.calls.CallCompleter;
import org.jetbrains.jet.lang.resolve.calls.CandidateResolver; import org.jetbrains.jet.lang.resolve.calls.CandidateResolver;
import org.jetbrains.jet.lang.resolve.calls.tasks.TaskPrioritizer;
import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer; import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer;
import org.jetbrains.jet.lang.resolve.DeclarationsChecker; import org.jetbrains.jet.lang.resolve.DeclarationsChecker;
import org.jetbrains.jet.lang.resolve.ModifiersChecker; import org.jetbrains.jet.lang.resolve.ModifiersChecker;
@@ -130,6 +131,7 @@ public class InjectorForTopDownAnalyzerForJvm {
private final CallResolverExtensionProvider callResolverExtensionProvider; private final CallResolverExtensionProvider callResolverExtensionProvider;
private final CallCompleter callCompleter; private final CallCompleter callCompleter;
private final CandidateResolver candidateResolver; private final CandidateResolver candidateResolver;
private final TaskPrioritizer taskPrioritizer;
private final ControlFlowAnalyzer controlFlowAnalyzer; private final ControlFlowAnalyzer controlFlowAnalyzer;
private final DeclarationsChecker declarationsChecker; private final DeclarationsChecker declarationsChecker;
private final ModifiersChecker modifiersChecker; private final ModifiersChecker modifiersChecker;
@@ -206,6 +208,7 @@ public class InjectorForTopDownAnalyzerForJvm {
this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.callResolverExtensionProvider = new CallResolverExtensionProvider();
this.candidateResolver = new CandidateResolver(); this.candidateResolver = new CandidateResolver();
this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver); this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver);
this.taskPrioritizer = new TaskPrioritizer(storageManager);
this.controlFlowAnalyzer = new ControlFlowAnalyzer(); this.controlFlowAnalyzer = new ControlFlowAnalyzer();
this.declarationsChecker = new DeclarationsChecker(); this.declarationsChecker = new DeclarationsChecker();
this.modifiersChecker = new ModifiersChecker(bindingTrace, additionalCheckerProvider); this.modifiersChecker = new ModifiersChecker(bindingTrace, additionalCheckerProvider);
@@ -273,6 +276,7 @@ public class InjectorForTopDownAnalyzerForJvm {
callResolver.setCallCompleter(callCompleter); callResolver.setCallCompleter(callCompleter);
callResolver.setCandidateResolver(candidateResolver); callResolver.setCandidateResolver(candidateResolver);
callResolver.setExpressionTypingServices(expressionTypingServices); callResolver.setExpressionTypingServices(expressionTypingServices);
callResolver.setTaskPrioritizer(taskPrioritizer);
callResolver.setTypeResolver(typeResolver); callResolver.setTypeResolver(typeResolver);
argumentTypeResolver.setExpressionTypingServices(expressionTypingServices); argumentTypeResolver.setExpressionTypingServices(expressionTypingServices);
@@ -43,6 +43,7 @@ import org.jetbrains.jet.context.LazinessToken;
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
import org.jetbrains.jet.lang.resolve.calls.CallCompleter; import org.jetbrains.jet.lang.resolve.calls.CallCompleter;
import org.jetbrains.jet.lang.resolve.calls.CandidateResolver; import org.jetbrains.jet.lang.resolve.calls.CandidateResolver;
import org.jetbrains.jet.lang.resolve.calls.tasks.TaskPrioritizer;
import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer; import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer;
import org.jetbrains.jet.lang.resolve.DeclarationsChecker; import org.jetbrains.jet.lang.resolve.DeclarationsChecker;
import org.jetbrains.jet.lang.resolve.ModifiersChecker; import org.jetbrains.jet.lang.resolve.ModifiersChecker;
@@ -82,6 +83,7 @@ public class InjectorForBodyResolve {
private final CallResolverExtensionProvider callResolverExtensionProvider; private final CallResolverExtensionProvider callResolverExtensionProvider;
private final CallCompleter callCompleter; private final CallCompleter callCompleter;
private final CandidateResolver candidateResolver; private final CandidateResolver candidateResolver;
private final TaskPrioritizer taskPrioritizer;
private final ControlFlowAnalyzer controlFlowAnalyzer; private final ControlFlowAnalyzer controlFlowAnalyzer;
private final DeclarationsChecker declarationsChecker; private final DeclarationsChecker declarationsChecker;
private final ModifiersChecker modifiersChecker; private final ModifiersChecker modifiersChecker;
@@ -122,6 +124,7 @@ public class InjectorForBodyResolve {
this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.callResolverExtensionProvider = new CallResolverExtensionProvider();
this.candidateResolver = new CandidateResolver(); this.candidateResolver = new CandidateResolver();
this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver); this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver);
this.taskPrioritizer = new TaskPrioritizer(storageManager);
this.controlFlowAnalyzer = new ControlFlowAnalyzer(); this.controlFlowAnalyzer = new ControlFlowAnalyzer();
this.declarationsChecker = new DeclarationsChecker(); this.declarationsChecker = new DeclarationsChecker();
this.modifiersChecker = new ModifiersChecker(bindingTrace, additionalCheckerProvider); this.modifiersChecker = new ModifiersChecker(bindingTrace, additionalCheckerProvider);
@@ -146,6 +149,7 @@ public class InjectorForBodyResolve {
callResolver.setCallCompleter(callCompleter); callResolver.setCallCompleter(callCompleter);
callResolver.setCandidateResolver(candidateResolver); callResolver.setCandidateResolver(candidateResolver);
callResolver.setExpressionTypingServices(expressionTypingServices); callResolver.setExpressionTypingServices(expressionTypingServices);
callResolver.setTaskPrioritizer(taskPrioritizer);
callResolver.setTypeResolver(typeResolver); callResolver.setTypeResolver(typeResolver);
argumentTypeResolver.setExpressionTypingServices(expressionTypingServices); argumentTypeResolver.setExpressionTypingServices(expressionTypingServices);
@@ -44,6 +44,7 @@ import org.jetbrains.jet.lang.resolve.TypeResolver.FlexibleTypeCapabilitiesProvi
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
import org.jetbrains.jet.lang.resolve.calls.CallCompleter; import org.jetbrains.jet.lang.resolve.calls.CallCompleter;
import org.jetbrains.jet.lang.resolve.calls.CandidateResolver; import org.jetbrains.jet.lang.resolve.calls.CandidateResolver;
import org.jetbrains.jet.lang.resolve.calls.tasks.TaskPrioritizer;
import org.jetbrains.jet.lang.psi.JetImportsFactory; import org.jetbrains.jet.lang.psi.JetImportsFactory;
import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider; import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider;
import org.jetbrains.jet.lang.resolve.ScriptBodyResolver; import org.jetbrains.jet.lang.resolve.ScriptBodyResolver;
@@ -82,6 +83,7 @@ public class InjectorForLazyResolve {
private final CallResolverExtensionProvider callResolverExtensionProvider; private final CallResolverExtensionProvider callResolverExtensionProvider;
private final CallCompleter callCompleter; private final CallCompleter callCompleter;
private final CandidateResolver candidateResolver; private final CandidateResolver candidateResolver;
private final TaskPrioritizer taskPrioritizer;
private final JetImportsFactory jetImportsFactory; private final JetImportsFactory jetImportsFactory;
private final ScopeProvider scopeProvider; private final ScopeProvider scopeProvider;
private final ScriptBodyResolver scriptBodyResolver; private final ScriptBodyResolver scriptBodyResolver;
@@ -122,6 +124,7 @@ public class InjectorForLazyResolve {
this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.callResolverExtensionProvider = new CallResolverExtensionProvider();
this.candidateResolver = new CandidateResolver(); this.candidateResolver = new CandidateResolver();
this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver); this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver);
this.taskPrioritizer = new TaskPrioritizer(storageManager);
this.jetImportsFactory = new JetImportsFactory(); this.jetImportsFactory = new JetImportsFactory();
this.scopeProvider = new ScopeProvider(getResolveSession()); this.scopeProvider = new ScopeProvider(getResolveSession());
this.scriptBodyResolver = new ScriptBodyResolver(); this.scriptBodyResolver = new ScriptBodyResolver();
@@ -142,6 +145,7 @@ public class InjectorForLazyResolve {
callResolver.setCallCompleter(callCompleter); callResolver.setCallCompleter(callCompleter);
callResolver.setCandidateResolver(candidateResolver); callResolver.setCandidateResolver(candidateResolver);
callResolver.setExpressionTypingServices(expressionTypingServices); callResolver.setExpressionTypingServices(expressionTypingServices);
callResolver.setTaskPrioritizer(taskPrioritizer);
callResolver.setTypeResolver(typeResolver); callResolver.setTypeResolver(typeResolver);
argumentTypeResolver.setExpressionTypingServices(expressionTypingServices); argumentTypeResolver.setExpressionTypingServices(expressionTypingServices);
@@ -41,6 +41,7 @@ import org.jetbrains.jet.lang.reflect.ReflectionTypes;
import org.jetbrains.jet.lang.resolve.calls.ArgumentTypeResolver; import org.jetbrains.jet.lang.resolve.calls.ArgumentTypeResolver;
import org.jetbrains.jet.lang.resolve.calls.CallCompleter; import org.jetbrains.jet.lang.resolve.calls.CallCompleter;
import org.jetbrains.jet.lang.resolve.calls.CandidateResolver; import org.jetbrains.jet.lang.resolve.calls.CandidateResolver;
import org.jetbrains.jet.lang.resolve.calls.tasks.TaskPrioritizer;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import javax.annotation.PreDestroy; import javax.annotation.PreDestroy;
@@ -73,6 +74,7 @@ public class InjectorForMacros {
private final ArgumentTypeResolver argumentTypeResolver; private final ArgumentTypeResolver argumentTypeResolver;
private final CallCompleter callCompleter; private final CallCompleter callCompleter;
private final CandidateResolver candidateResolver; private final CandidateResolver candidateResolver;
private final TaskPrioritizer taskPrioritizer;
public InjectorForMacros( public InjectorForMacros(
@NotNull Project project, @NotNull Project project,
@@ -103,6 +105,7 @@ public class InjectorForMacros {
this.argumentTypeResolver = new ArgumentTypeResolver(); this.argumentTypeResolver = new ArgumentTypeResolver();
this.candidateResolver = new CandidateResolver(); this.candidateResolver = new CandidateResolver();
this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver); this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver);
this.taskPrioritizer = new TaskPrioritizer(storageManager);
this.expressionTypingServices.setAnnotationResolver(annotationResolver); this.expressionTypingServices.setAnnotationResolver(annotationResolver);
this.expressionTypingServices.setCallExpressionResolver(callExpressionResolver); this.expressionTypingServices.setCallExpressionResolver(callExpressionResolver);
@@ -126,6 +129,7 @@ public class InjectorForMacros {
this.callResolver.setCallCompleter(callCompleter); this.callResolver.setCallCompleter(callCompleter);
this.callResolver.setCandidateResolver(candidateResolver); this.callResolver.setCandidateResolver(candidateResolver);
this.callResolver.setExpressionTypingServices(expressionTypingServices); this.callResolver.setExpressionTypingServices(expressionTypingServices);
this.callResolver.setTaskPrioritizer(taskPrioritizer);
this.callResolver.setTypeResolver(typeResolver); this.callResolver.setTypeResolver(typeResolver);
annotationResolver.setCallResolver(callResolver); annotationResolver.setCallResolver(callResolver);
@@ -46,6 +46,7 @@ import org.jetbrains.jet.context.LazinessToken;
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
import org.jetbrains.jet.lang.resolve.calls.CallCompleter; import org.jetbrains.jet.lang.resolve.calls.CallCompleter;
import org.jetbrains.jet.lang.resolve.calls.CandidateResolver; import org.jetbrains.jet.lang.resolve.calls.CandidateResolver;
import org.jetbrains.jet.lang.resolve.calls.tasks.TaskPrioritizer;
import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer; import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer;
import org.jetbrains.jet.lang.resolve.DeclarationsChecker; import org.jetbrains.jet.lang.resolve.DeclarationsChecker;
import org.jetbrains.jet.lang.resolve.ModifiersChecker; import org.jetbrains.jet.lang.resolve.ModifiersChecker;
@@ -95,6 +96,7 @@ public class InjectorForTopDownAnalyzerBasic {
private final CallResolverExtensionProvider callResolverExtensionProvider; private final CallResolverExtensionProvider callResolverExtensionProvider;
private final CallCompleter callCompleter; private final CallCompleter callCompleter;
private final CandidateResolver candidateResolver; private final CandidateResolver candidateResolver;
private final TaskPrioritizer taskPrioritizer;
private final ControlFlowAnalyzer controlFlowAnalyzer; private final ControlFlowAnalyzer controlFlowAnalyzer;
private final DeclarationsChecker declarationsChecker; private final DeclarationsChecker declarationsChecker;
private final ModifiersChecker modifiersChecker; private final ModifiersChecker modifiersChecker;
@@ -145,6 +147,7 @@ public class InjectorForTopDownAnalyzerBasic {
this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.callResolverExtensionProvider = new CallResolverExtensionProvider();
this.candidateResolver = new CandidateResolver(); this.candidateResolver = new CandidateResolver();
this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver); this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver);
this.taskPrioritizer = new TaskPrioritizer(storageManager);
this.controlFlowAnalyzer = new ControlFlowAnalyzer(); this.controlFlowAnalyzer = new ControlFlowAnalyzer();
this.declarationsChecker = new DeclarationsChecker(); this.declarationsChecker = new DeclarationsChecker();
this.modifiersChecker = new ModifiersChecker(bindingTrace, additionalCheckerProvider); this.modifiersChecker = new ModifiersChecker(bindingTrace, additionalCheckerProvider);
@@ -195,6 +198,7 @@ public class InjectorForTopDownAnalyzerBasic {
callResolver.setCallCompleter(callCompleter); callResolver.setCallCompleter(callCompleter);
callResolver.setCandidateResolver(candidateResolver); callResolver.setCandidateResolver(candidateResolver);
callResolver.setExpressionTypingServices(expressionTypingServices); callResolver.setExpressionTypingServices(expressionTypingServices);
callResolver.setTaskPrioritizer(taskPrioritizer);
callResolver.setTypeResolver(typeResolver); callResolver.setTypeResolver(typeResolver);
argumentTypeResolver.setExpressionTypingServices(expressionTypingServices); argumentTypeResolver.setExpressionTypingServices(expressionTypingServices);
@@ -72,6 +72,9 @@ public class CallResolver {
private ArgumentTypeResolver argumentTypeResolver; private ArgumentTypeResolver argumentTypeResolver;
@NotNull @NotNull
private CallCompleter callCompleter; private CallCompleter callCompleter;
@NotNull
private TaskPrioritizer taskPrioritizer;
@Inject @Inject
public void setExpressionTypingServices(@NotNull ExpressionTypingServices expressionTypingServices) { public void setExpressionTypingServices(@NotNull ExpressionTypingServices expressionTypingServices) {
this.expressionTypingServices = expressionTypingServices; this.expressionTypingServices = expressionTypingServices;
@@ -97,6 +100,11 @@ public class CallResolver {
this.callCompleter = callCompleter; this.callCompleter = callCompleter;
} }
@Inject
public void setTaskPrioritizer(@NotNull TaskPrioritizer taskPrioritizer) {
this.taskPrioritizer = taskPrioritizer;
}
@NotNull @NotNull
public OverloadResolutionResults<VariableDescriptor> resolveSimpleProperty(@NotNull BasicCallResolutionContext context) { public OverloadResolutionResults<VariableDescriptor> resolveSimpleProperty(@NotNull BasicCallResolutionContext context) {
JetExpression calleeExpression = context.call.getCalleeExpression(); JetExpression calleeExpression = context.call.getCalleeExpression();
@@ -113,8 +121,7 @@ public class CallResolver {
} }
TracingStrategy tracing = TracingStrategyImpl.create(nameExpression, context.call); TracingStrategy tracing = TracingStrategyImpl.create(nameExpression, context.call);
List<ResolutionTask<VariableDescriptor, VariableDescriptor>> prioritizedTasks = List<ResolutionTask<VariableDescriptor, VariableDescriptor>> prioritizedTasks =
TaskPrioritizer.<VariableDescriptor, VariableDescriptor>computePrioritizedTasks( taskPrioritizer.<VariableDescriptor, VariableDescriptor>computePrioritizedTasks(context, referencedName, tracing, callableDescriptorCollectors);
context, referencedName, tracing, callableDescriptorCollectors);
return doResolveCallOrGetCachedResults(context, prioritizedTasks, CallTransformer.PROPERTY_CALL_TRANSFORMER, tracing); return doResolveCallOrGetCachedResults(context, prioritizedTasks, CallTransformer.PROPERTY_CALL_TRANSFORMER, tracing);
} }
@@ -158,7 +165,7 @@ public class CallResolver {
@NotNull CallableDescriptorCollectors<CallableDescriptor> collectors @NotNull CallableDescriptorCollectors<CallableDescriptor> collectors
) { ) {
List<ResolutionTask<CallableDescriptor, FunctionDescriptor>> tasks = List<ResolutionTask<CallableDescriptor, FunctionDescriptor>> tasks =
TaskPrioritizer.<CallableDescriptor, FunctionDescriptor>computePrioritizedTasks(context, name, tracing, collectors); taskPrioritizer.<CallableDescriptor, FunctionDescriptor>computePrioritizedTasks(context, name, tracing, collectors);
return doResolveCallOrGetCachedResults(context, tasks, CallTransformer.FUNCTION_CALL_TRANSFORMER, tracing); return doResolveCallOrGetCachedResults(context, tasks, CallTransformer.FUNCTION_CALL_TRANSFORMER, tracing);
} }
@@ -209,7 +216,7 @@ public class CallResolver {
Name name = expression.getReferencedNameAsName(); Name name = expression.getReferencedNameAsName();
TracingStrategy tracing = TracingStrategyImpl.create(expression, context.call); TracingStrategy tracing = TracingStrategyImpl.create(expression, context.call);
prioritizedTasks = TaskPrioritizer.<CallableDescriptor, FunctionDescriptor>computePrioritizedTasks( prioritizedTasks = taskPrioritizer.<CallableDescriptor, FunctionDescriptor>computePrioritizedTasks(
context, name, tracing, CallableDescriptorCollectors.FUNCTIONS_AND_VARIABLES); context, name, tracing, CallableDescriptorCollectors.FUNCTIONS_AND_VARIABLES);
ResolutionTask.DescriptorCheckStrategy abstractConstructorCheck = new ResolutionTask.DescriptorCheckStrategy() { ResolutionTask.DescriptorCheckStrategy abstractConstructorCheck = new ResolutionTask.DescriptorCheckStrategy() {
@Override @Override
@@ -258,7 +265,7 @@ public class CallResolver {
Collection<ResolutionCandidate<CallableDescriptor>> candidates = Collection<ResolutionCandidate<CallableDescriptor>> candidates =
TaskPrioritizer.<CallableDescriptor>convertWithImpliedThisAndNoReceiver( TaskPrioritizer.<CallableDescriptor>convertWithImpliedThisAndNoReceiver(
context.scope, constructors, context.call); context.scope, constructors, context.call);
prioritizedTasks = TaskPrioritizer.<CallableDescriptor, FunctionDescriptor>computePrioritizedTasksFromCandidates( prioritizedTasks = taskPrioritizer.<CallableDescriptor, FunctionDescriptor>computePrioritizedTasksFromCandidates(
context, candidates, TracingStrategyImpl.create(functionReference, context.call)); context, candidates, TracingStrategyImpl.create(functionReference, context.call));
} }
else { else {
@@ -321,8 +328,7 @@ public class CallResolver {
BasicCallResolutionContext.create(context, call, CheckValueArgumentsMode.ENABLED, dataFlowInfoForArguments); BasicCallResolutionContext.create(context, call, CheckValueArgumentsMode.ENABLED, dataFlowInfoForArguments);
List<ResolutionTask<CallableDescriptor, FunctionDescriptor>> tasks = List<ResolutionTask<CallableDescriptor, FunctionDescriptor>> tasks =
TaskPrioritizer.<CallableDescriptor, FunctionDescriptor>computePrioritizedTasksFromCandidates( taskPrioritizer.<CallableDescriptor, FunctionDescriptor>computePrioritizedTasksFromCandidates(basicCallResolutionContext, Collections.singleton(candidate), tracing);
basicCallResolutionContext, Collections.singleton(candidate), tracing);
return doResolveCallOrGetCachedResults( return doResolveCallOrGetCachedResults(
basicCallResolutionContext, tasks, CallTransformer.FUNCTION_CALL_TRANSFORMER, tracing); basicCallResolutionContext, tasks, CallTransformer.FUNCTION_CALL_TRANSFORMER, tracing);
} }
@@ -23,8 +23,10 @@ import org.jetbrains.jet.lang.descriptors.CallableDescriptor
import org.jetbrains.jet.lang.psi.JetPsiUtil import org.jetbrains.jet.lang.psi.JetPsiUtil
import org.jetbrains.jet.lang.psi.JetReferenceExpression import org.jetbrains.jet.lang.psi.JetReferenceExpression
import org.jetbrains.jet.lang.resolve.calls.context.BasicCallResolutionContext import org.jetbrains.jet.lang.resolve.calls.context.BasicCallResolutionContext
import org.jetbrains.jet.storage.StorageManager
public class ResolutionTaskHolder<D : CallableDescriptor, F : D>( public class ResolutionTaskHolder<D : CallableDescriptor, F : D>(
private val storageManager: StorageManager,
private val basicCallResolutionContext: BasicCallResolutionContext, private val basicCallResolutionContext: BasicCallResolutionContext,
private val priorityProvider: ResolutionTaskHolder.PriorityProvider<ResolutionCandidate<D>>, private val priorityProvider: ResolutionTaskHolder.PriorityProvider<ResolutionCandidate<D>>,
private val tracing: TracingStrategy private val tracing: TracingStrategy
@@ -39,6 +39,7 @@ import org.jetbrains.jet.lang.types.ErrorUtils;
import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.checker.JetTypeChecker; import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils;
import org.jetbrains.jet.storage.StorageManager;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@@ -49,6 +50,13 @@ import static org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue.NO_R
public class TaskPrioritizer { public class TaskPrioritizer {
@NotNull
private final StorageManager storageManager;
public TaskPrioritizer(@NotNull StorageManager manager) {
storageManager = manager;
}
public static <D extends CallableDescriptor> void splitLexicallyLocalDescriptors( public static <D extends CallableDescriptor> void splitLexicallyLocalDescriptors(
@NotNull Collection<ResolutionCandidate<D>> allDescriptors, @NotNull Collection<ResolutionCandidate<D>> allDescriptors,
@NotNull DeclarationDescriptor containerOfTheCurrentLocality, @NotNull DeclarationDescriptor containerOfTheCurrentLocality,
@@ -78,7 +86,7 @@ public class TaskPrioritizer {
} }
@NotNull @NotNull
public static <D extends CallableDescriptor, F extends D> List<ResolutionTask<D, F>> computePrioritizedTasks( public <D extends CallableDescriptor, F extends D> List<ResolutionTask<D, F>> computePrioritizedTasks(
@NotNull BasicCallResolutionContext context, @NotNull BasicCallResolutionContext context,
@NotNull Name name, @NotNull Name name,
@NotNull TracingStrategy tracing, @NotNull TracingStrategy tracing,
@@ -86,7 +94,7 @@ public class TaskPrioritizer {
) { ) {
ReceiverValue explicitReceiver = context.call.getExplicitReceiver(); ReceiverValue explicitReceiver = context.call.getExplicitReceiver();
ResolutionTaskHolder<D, F> result = ResolutionTaskHolder<D, F> result =
new ResolutionTaskHolder<D, F>(context, new MyPriorityProvider<D>(context), tracing); new ResolutionTaskHolder<D, F>(storageManager, context, new MyPriorityProvider<D>(context), tracing);
TaskPrioritizerContext<D, F> taskPrioritizerContext = TaskPrioritizerContext<D, F> taskPrioritizerContext =
new TaskPrioritizerContext<D, F>(name, result, context, context.scope, callableDescriptorCollectors); new TaskPrioritizerContext<D, F>(name, result, context, context.scope, callableDescriptorCollectors);
@@ -344,13 +352,13 @@ public class TaskPrioritizer {
return false; return false;
} }
public static <D extends CallableDescriptor, F extends D> List<ResolutionTask<D, F>> computePrioritizedTasksFromCandidates( public <D extends CallableDescriptor, F extends D> List<ResolutionTask<D, F>> computePrioritizedTasksFromCandidates(
@NotNull BasicCallResolutionContext context, @NotNull BasicCallResolutionContext context,
@NotNull Collection<ResolutionCandidate<D>> candidates, @NotNull Collection<ResolutionCandidate<D>> candidates,
@NotNull TracingStrategy tracing @NotNull TracingStrategy tracing
) { ) {
ResolutionTaskHolder<D, F> result = new ResolutionTaskHolder<D, F>( ResolutionTaskHolder<D, F> result = new ResolutionTaskHolder<D, F>(
context, new MyPriorityProvider<D>(context), tracing); storageManager, context, new MyPriorityProvider<D>(context), tracing);
result.addCandidates(candidates); result.addCandidates(candidates);
return result.getTasks(); return result.getTasks();
} }
@@ -31,6 +31,7 @@ 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.resolve.calls.CallCompleter; import org.jetbrains.jet.lang.resolve.calls.CallCompleter;
import org.jetbrains.jet.lang.resolve.calls.CandidateResolver; import org.jetbrains.jet.lang.resolve.calls.CandidateResolver;
import org.jetbrains.jet.lang.resolve.calls.tasks.TaskPrioritizer;
import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver; import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingComponents; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingComponents;
import org.jetbrains.jet.lang.types.expressions.ControlStructureTypingUtils; import org.jetbrains.jet.lang.types.expressions.ControlStructureTypingUtils;
@@ -63,6 +64,7 @@ public class InjectorForTests {
private final ArgumentTypeResolver argumentTypeResolver; private final ArgumentTypeResolver argumentTypeResolver;
private final CallCompleter callCompleter; private final CallCompleter callCompleter;
private final CandidateResolver candidateResolver; private final CandidateResolver candidateResolver;
private final TaskPrioritizer taskPrioritizer;
private final DelegatedPropertyResolver delegatedPropertyResolver; private final DelegatedPropertyResolver delegatedPropertyResolver;
private final ExpressionTypingComponents expressionTypingComponents; private final ExpressionTypingComponents expressionTypingComponents;
private final ControlStructureTypingUtils controlStructureTypingUtils; private final ControlStructureTypingUtils controlStructureTypingUtils;
@@ -97,6 +99,7 @@ public class InjectorForTests {
this.argumentTypeResolver = new ArgumentTypeResolver(); this.argumentTypeResolver = new ArgumentTypeResolver();
this.candidateResolver = new CandidateResolver(); this.candidateResolver = new CandidateResolver();
this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver); this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver);
this.taskPrioritizer = new TaskPrioritizer(storageManager);
this.delegatedPropertyResolver = new DelegatedPropertyResolver(); this.delegatedPropertyResolver = new DelegatedPropertyResolver();
this.controlStructureTypingUtils = new ControlStructureTypingUtils(getExpressionTypingServices()); this.controlStructureTypingUtils = new ControlStructureTypingUtils(getExpressionTypingServices());
this.forLoopConventionsChecker = new ForLoopConventionsChecker(); this.forLoopConventionsChecker = new ForLoopConventionsChecker();
@@ -126,6 +129,7 @@ public class InjectorForTests {
callResolver.setCallCompleter(callCompleter); callResolver.setCallCompleter(callCompleter);
callResolver.setCandidateResolver(candidateResolver); callResolver.setCandidateResolver(candidateResolver);
callResolver.setExpressionTypingServices(expressionTypingServices); callResolver.setExpressionTypingServices(expressionTypingServices);
callResolver.setTaskPrioritizer(taskPrioritizer);
callResolver.setTypeResolver(typeResolver); callResolver.setTypeResolver(typeResolver);
argumentTypeResolver.setExpressionTypingServices(expressionTypingServices); argumentTypeResolver.setExpressionTypingServices(expressionTypingServices);
@@ -46,6 +46,7 @@ import org.jetbrains.jet.context.LazinessToken;
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
import org.jetbrains.jet.lang.resolve.calls.CallCompleter; import org.jetbrains.jet.lang.resolve.calls.CallCompleter;
import org.jetbrains.jet.lang.resolve.calls.CandidateResolver; import org.jetbrains.jet.lang.resolve.calls.CandidateResolver;
import org.jetbrains.jet.lang.resolve.calls.tasks.TaskPrioritizer;
import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer; import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer;
import org.jetbrains.jet.lang.resolve.DeclarationsChecker; import org.jetbrains.jet.lang.resolve.DeclarationsChecker;
import org.jetbrains.jet.lang.resolve.ModifiersChecker; import org.jetbrains.jet.lang.resolve.ModifiersChecker;
@@ -95,6 +96,7 @@ public class InjectorForTopDownAnalyzerForJs {
private final CallResolverExtensionProvider callResolverExtensionProvider; private final CallResolverExtensionProvider callResolverExtensionProvider;
private final CallCompleter callCompleter; private final CallCompleter callCompleter;
private final CandidateResolver candidateResolver; private final CandidateResolver candidateResolver;
private final TaskPrioritizer taskPrioritizer;
private final ControlFlowAnalyzer controlFlowAnalyzer; private final ControlFlowAnalyzer controlFlowAnalyzer;
private final DeclarationsChecker declarationsChecker; private final DeclarationsChecker declarationsChecker;
private final ModifiersChecker modifiersChecker; private final ModifiersChecker modifiersChecker;
@@ -144,6 +146,7 @@ public class InjectorForTopDownAnalyzerForJs {
this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.callResolverExtensionProvider = new CallResolverExtensionProvider();
this.candidateResolver = new CandidateResolver(); this.candidateResolver = new CandidateResolver();
this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver); this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver);
this.taskPrioritizer = new TaskPrioritizer(storageManager);
this.controlFlowAnalyzer = new ControlFlowAnalyzer(); this.controlFlowAnalyzer = new ControlFlowAnalyzer();
this.declarationsChecker = new DeclarationsChecker(); this.declarationsChecker = new DeclarationsChecker();
this.modifiersChecker = new ModifiersChecker(bindingTrace, additionalCheckerProvider); this.modifiersChecker = new ModifiersChecker(bindingTrace, additionalCheckerProvider);
@@ -194,6 +197,7 @@ public class InjectorForTopDownAnalyzerForJs {
callResolver.setCallCompleter(callCompleter); callResolver.setCallCompleter(callCompleter);
callResolver.setCandidateResolver(candidateResolver); callResolver.setCandidateResolver(candidateResolver);
callResolver.setExpressionTypingServices(expressionTypingServices); callResolver.setExpressionTypingServices(expressionTypingServices);
callResolver.setTaskPrioritizer(taskPrioritizer);
callResolver.setTypeResolver(typeResolver); callResolver.setTypeResolver(typeResolver);
argumentTypeResolver.setExpressionTypingServices(expressionTypingServices); argumentTypeResolver.setExpressionTypingServices(expressionTypingServices);