diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java index b9d3242579b..9460271da47 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java @@ -209,7 +209,7 @@ public class BodyResolver { if (type != null && supertype != null) { SimpleResolutionContext simpleResolutionContext = new SimpleResolutionContext( trace, scope, supertype, context.getOuterDataFlowInfo(), ExpressionPosition.FREE, ContextDependency.INDEPENDENT, - ResolutionResultsCacheImpl.create(), LabelResolver.create()); + ResolutionResultsCacheImpl.create(), LabelResolver.create(), expressionTypingServices.getDefaultExtension()); DataFlowUtils.checkType(type, delegateExpression, simpleResolutionContext); } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java index 5af3f85a9ed..4faad684d5a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java @@ -141,7 +141,7 @@ public class CallResolver { ) { return resolveFunctionCall(BasicCallResolutionContext.create( trace, scope, call, expectedType, dataFlowInfo, ContextDependency.INDEPENDENT, CheckValueArgumentsMode.ENABLED, - ExpressionPosition.FREE, ResolutionResultsCacheImpl.create(), LabelResolver.create(), null)); + ExpressionPosition.FREE, ResolutionResultsCacheImpl.create(), LabelResolver.create(), null, expressionTypingServices.getDefaultExtension())); } @NotNull diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/context/BasicCallResolutionContext.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/context/BasicCallResolutionContext.java index 20ae354d70d..c355ff5d407 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/context/BasicCallResolutionContext.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/context/BasicCallResolutionContext.java @@ -20,6 +20,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.psi.Call; import org.jetbrains.jet.lang.resolve.BindingTrace; +import org.jetbrains.jet.lang.resolve.calls.CallResolverExtension; import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo; import org.jetbrains.jet.lang.resolve.calls.model.MutableDataFlowInfoForArguments; import org.jetbrains.jet.lang.resolve.scopes.JetScope; @@ -39,11 +40,12 @@ public class BasicCallResolutionContext extends CallResolutionContext @NotNull ExpressionPosition expressionPosition, @NotNull ResolutionResultsCache resolutionResultsCache, @NotNull LabelResolver labelResolver, - @Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments + @Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments, + @NotNull CallResolverExtension callResolverExtension ) { super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition, resolutionResultsCache, - labelResolver, dataFlowInfoForArguments); + labelResolver, dataFlowInfoForArguments, callResolverExtension); this.candidateCall = candidateCall; this.tracing = tracing; } @@ -63,7 +65,7 @@ public final class CallCandidateResolutionContext return new CallCandidateResolutionContext( candidateCall, tracing, trace, context.scope, call, context.expectedType, context.dataFlowInfo, context.contextDependency, context.checkArguments, - context.expressionPosition, context.resolutionResultsCache, context.labelResolver, context.dataFlowInfoForArguments); + context.expressionPosition, context.resolutionResultsCache, context.labelResolver, context.dataFlowInfoForArguments, context.callResolverExtension); } public static CallCandidateResolutionContext create( @@ -78,7 +80,7 @@ public final class CallCandidateResolutionContext return new CallCandidateResolutionContext( candidateCall, tracing, context.trace, context.scope, context.call, context.expectedType, context.dataFlowInfo, context.contextDependency, context.checkArguments, context.expressionPosition, - context.resolutionResultsCache, context.labelResolver, context.dataFlowInfoForArguments); + context.resolutionResultsCache, context.labelResolver, context.dataFlowInfoForArguments, context.callResolverExtension); } @Override @@ -94,7 +96,7 @@ public final class CallCandidateResolutionContext ) { return new CallCandidateResolutionContext( candidateCall, tracing, trace, scope, call, expectedType, dataFlowInfo, contextDependency, - checkArguments, expressionPosition, resolutionResultsCache, labelResolver, dataFlowInfoForArguments); + checkArguments, expressionPosition, resolutionResultsCache, labelResolver, dataFlowInfoForArguments, callResolverExtension); } @Override diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/context/CallResolutionContext.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/context/CallResolutionContext.java index 1bcd07c4b79..713a7ab7dff 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/context/CallResolutionContext.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/context/CallResolutionContext.java @@ -20,6 +20,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.psi.Call; import org.jetbrains.jet.lang.resolve.BindingTrace; +import org.jetbrains.jet.lang.resolve.calls.CallResolverExtension; import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo; import org.jetbrains.jet.lang.resolve.calls.model.DataFlowInfoForArgumentsImpl; import org.jetbrains.jet.lang.resolve.calls.model.MutableDataFlowInfoForArguments; @@ -45,9 +46,11 @@ public abstract class CallResolutionContext extends C @NotNull TracingStrategy tracing, BindingTrace trace, JetScope scope, Call call, JetType expectedType, DataFlowInfo dataFlowInfo, ContextDependency contextDependency, CheckValueArgumentsMode checkArguments, ExpressionPosition expressionPosition, ResolutionResultsCache resolutionResultsCache, - @NotNull LabelResolver labelResolver, @Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments + @NotNull LabelResolver labelResolver, @Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments, + @NotNull CallResolverExtension callResolverExtension ) { super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition, resolutionResultsCache, - labelResolver, dataFlowInfoForArguments); + labelResolver, dataFlowInfoForArguments, callResolverExtension); this.candidates = candidates; this.reference = reference; this.tracing = tracing; @@ -67,7 +69,7 @@ public class ResolutionTask extends C this(candidates, reference, tracing != null ? tracing : TracingStrategyImpl.create(reference, context.call), context.trace, context.scope, context.call, context.expectedType, context.dataFlowInfo, context.contextDependency, context.checkArguments, - context.expressionPosition, context.resolutionResultsCache, context.labelResolver, context.dataFlowInfoForArguments); + context.expressionPosition, context.resolutionResultsCache, context.labelResolver, context.dataFlowInfoForArguments, context.callResolverExtension); } public ResolutionTask( @@ -112,7 +114,7 @@ public class ResolutionTask extends C ) { ResolutionTask newTask = new ResolutionTask( candidates, reference, tracing, trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, - expressionPosition, resolutionResultsCache, labelResolver, dataFlowInfoForArguments); + expressionPosition, resolutionResultsCache, labelResolver, dataFlowInfoForArguments, callResolverExtension); newTask.setCheckingStrategy(checkingStrategy); return newTask; } @@ -125,7 +127,7 @@ public class ResolutionTask extends C public ResolutionTask replaceCall(@NotNull Call newCall) { return new ResolutionTask( candidates, reference, tracing, trace, scope, newCall, expectedType, dataFlowInfo, contextDependency, checkArguments, - expressionPosition, resolutionResultsCache, labelResolver, dataFlowInfoForArguments); + expressionPosition, resolutionResultsCache, labelResolver, dataFlowInfoForArguments, callResolverExtension); } public interface DescriptorCheckStrategy { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingContext.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingContext.java index f1a82361991..ef036c2c8ef 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingContext.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingContext.java @@ -21,6 +21,7 @@ import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.jet.lang.psi.Call; import org.jetbrains.jet.lang.psi.JetReferenceExpression; import org.jetbrains.jet.lang.resolve.BindingTrace; +import org.jetbrains.jet.lang.resolve.calls.CallResolverExtension; import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo; import org.jetbrains.jet.lang.resolve.calls.context.*; import org.jetbrains.jet.lang.resolve.calls.results.OverloadResolutionResults; @@ -41,8 +42,8 @@ public class ExpressionTypingContext extends ResolutionContext