Added AnnotationContext flag

This commit is contained in:
Mikhael Bogdanov
2013-11-12 11:21:56 +04:00
parent c09ba00c8d
commit afa09caa0f
12 changed files with 56 additions and 39 deletions
@@ -169,7 +169,8 @@ public class AnnotationResolver {
trace, scope, trace, scope,
CallMaker.makeCall(ReceiverValue.NO_RECEIVER, null, annotationEntry), CallMaker.makeCall(ReceiverValue.NO_RECEIVER, null, annotationEntry),
NO_EXPECTED_TYPE, NO_EXPECTED_TYPE,
DataFlowInfo.EMPTY); DataFlowInfo.EMPTY,
true);
} }
public void resolveAnnotationsArguments(@NotNull JetScope scope, @Nullable JetModifierList modifierList, @NotNull BindingTrace trace) { public void resolveAnnotationsArguments(@NotNull JetScope scope, @Nullable JetModifierList modifierList, @NotNull BindingTrace trace) {
@@ -217,7 +217,8 @@ public class BodyResolver {
if (type != null && supertype != null) { if (type != null && supertype != null) {
SimpleResolutionContext simpleResolutionContext = new SimpleResolutionContext( SimpleResolutionContext simpleResolutionContext = new SimpleResolutionContext(
trace, scope, supertype, context.getOuterDataFlowInfo(), ExpressionPosition.FREE, ContextDependency.INDEPENDENT, trace, scope, supertype, context.getOuterDataFlowInfo(), ExpressionPosition.FREE, ContextDependency.INDEPENDENT,
ResolutionResultsCacheImpl.create(), LabelResolver.create(), expressionTypingServices.createExtension(scope)); ResolutionResultsCacheImpl.create(), LabelResolver.create(),
expressionTypingServices.createExtension(scope, false), false);
DataFlowUtils.checkType(type, delegateExpression, simpleResolutionContext); DataFlowUtils.checkType(type, delegateExpression, simpleResolutionContext);
} }
} }
@@ -239,7 +240,7 @@ public class BodyResolver {
} }
OverloadResolutionResults<FunctionDescriptor> results = callResolver.resolveFunctionCall( OverloadResolutionResults<FunctionDescriptor> results = callResolver.resolveFunctionCall(
trace, scopeForConstructor, trace, scopeForConstructor,
CallMaker.makeCall(ReceiverValue.NO_RECEIVER, null, call), NO_EXPECTED_TYPE, context.getOuterDataFlowInfo()); CallMaker.makeCall(ReceiverValue.NO_RECEIVER, null, call), NO_EXPECTED_TYPE, context.getOuterDataFlowInfo(), false);
if (results.isSuccess()) { if (results.isSuccess()) {
JetType supertype = results.getResultingDescriptor().getReturnType(); JetType supertype = results.getResultingDescriptor().getReturnType();
recordSupertype(typeReference, supertype); recordSupertype(typeReference, supertype);
@@ -132,12 +132,13 @@ public class CallResolver {
@NotNull JetScope scope, @NotNull JetScope scope,
@NotNull Call call, @NotNull Call call,
@NotNull JetType expectedType, @NotNull JetType expectedType,
@NotNull DataFlowInfo dataFlowInfo @NotNull DataFlowInfo dataFlowInfo,
boolean isAnnotationContext
) { ) {
return resolveFunctionCall(BasicCallResolutionContext.create( return resolveFunctionCall(BasicCallResolutionContext.create(
trace, scope, call, expectedType, dataFlowInfo, ContextDependency.INDEPENDENT, CheckValueArgumentsMode.ENABLED, trace, scope, call, expectedType, dataFlowInfo, ContextDependency.INDEPENDENT, CheckValueArgumentsMode.ENABLED,
ExpressionPosition.FREE, ResolutionResultsCacheImpl.create(), LabelResolver.create(), null, ExpressionPosition.FREE, ResolutionResultsCacheImpl.create(), LabelResolver.create(), null,
expressionTypingServices.createExtension(scope))); expressionTypingServices.createExtension(scope, isAnnotationContext), isAnnotationContext));
} }
@NotNull @NotNull
@@ -31,8 +31,8 @@ public class CallResolverExtensionProvider {
private WeakReference<Map<DeclarationDescriptor, List<CallResolverExtension>>> extensionsCache; private WeakReference<Map<DeclarationDescriptor, List<CallResolverExtension>>> extensionsCache;
@NotNull @NotNull
public CallResolverExtension createExtension(@Nullable DeclarationDescriptor descriptor) { public CallResolverExtension createExtension(@Nullable DeclarationDescriptor descriptor, boolean isAnnotationContext) {
if (descriptor == null) { if (descriptor == null || isAnnotationContext) {
return DEFAULT; return DEFAULT;
} }
return new CompositeExtension(createExtensions(descriptor)); return new CompositeExtension(createExtensions(descriptor));
@@ -41,11 +41,12 @@ public class BasicCallResolutionContext extends CallResolutionContext<BasicCallR
@NotNull ResolutionResultsCache resolutionResultsCache, @NotNull ResolutionResultsCache resolutionResultsCache,
@NotNull LabelResolver labelResolver, @NotNull LabelResolver labelResolver,
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments, @Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments,
@NotNull CallResolverExtension callResolverExtension @NotNull CallResolverExtension callResolverExtension,
boolean isAnnotationContext
) { ) {
return new BasicCallResolutionContext( return new BasicCallResolutionContext(
trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition, trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition,
resolutionResultsCache, labelResolver, dataFlowInfoForArguments, callResolverExtension); resolutionResultsCache, labelResolver, dataFlowInfoForArguments, callResolverExtension, isAnnotationContext);
} }
@NotNull @NotNull
@@ -55,7 +56,8 @@ public class BasicCallResolutionContext extends CallResolutionContext<BasicCallR
) { ) {
return create( return create(
context.trace, context.scope, call, context.expectedType, context.dataFlowInfo, context.contextDependency, checkArguments, context.trace, context.scope, call, context.expectedType, context.dataFlowInfo, context.contextDependency, checkArguments,
context.expressionPosition, context.resolutionResultsCache, context.labelResolver, dataFlowInfoForArguments, context.callResolverExtension); context.expressionPosition, context.resolutionResultsCache, context.labelResolver, dataFlowInfoForArguments,
context.callResolverExtension, context.isAnnotationContext);
} }
@NotNull @NotNull
@@ -70,10 +72,10 @@ public class BasicCallResolutionContext extends CallResolutionContext<BasicCallR
DataFlowInfo dataFlowInfo, ContextDependency contextDependency, CheckValueArgumentsMode checkArguments, DataFlowInfo dataFlowInfo, ContextDependency contextDependency, CheckValueArgumentsMode checkArguments,
ExpressionPosition expressionPosition, ResolutionResultsCache resolutionResultsCache, ExpressionPosition expressionPosition, ResolutionResultsCache resolutionResultsCache,
LabelResolver labelResolver, MutableDataFlowInfoForArguments dataFlowInfoForArguments, LabelResolver labelResolver, MutableDataFlowInfoForArguments dataFlowInfoForArguments,
CallResolverExtension callResolverExtension CallResolverExtension callResolverExtension, boolean isAnnotationContext
) { ) {
super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition, resolutionResultsCache, super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition, resolutionResultsCache,
labelResolver, dataFlowInfoForArguments, callResolverExtension); labelResolver, dataFlowInfoForArguments, callResolverExtension, isAnnotationContext);
} }
@Override @Override
@@ -88,7 +90,7 @@ public class BasicCallResolutionContext extends CallResolutionContext<BasicCallR
@NotNull LabelResolver labelResolver @NotNull LabelResolver labelResolver
) { ) {
return create(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition, return create(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition,
resolutionResultsCache, labelResolver, dataFlowInfoForArguments, callResolverExtension); resolutionResultsCache, labelResolver, dataFlowInfoForArguments, callResolverExtension, isAnnotationContext);
} }
@Override @Override
@@ -50,10 +50,11 @@ public final class CallCandidateResolutionContext<D extends CallableDescriptor>
@NotNull ResolutionResultsCache resolutionResultsCache, @NotNull ResolutionResultsCache resolutionResultsCache,
@NotNull LabelResolver labelResolver, @NotNull LabelResolver labelResolver,
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments, @Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments,
@NotNull CallResolverExtension callResolverExtension @NotNull CallResolverExtension callResolverExtension,
boolean isAnnotationContext
) { ) {
super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition, resolutionResultsCache, super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition, resolutionResultsCache,
labelResolver, dataFlowInfoForArguments, callResolverExtension); labelResolver, dataFlowInfoForArguments, callResolverExtension, isAnnotationContext);
this.candidateCall = candidateCall; this.candidateCall = candidateCall;
this.tracing = tracing; this.tracing = tracing;
} }
@@ -65,7 +66,8 @@ public final class CallCandidateResolutionContext<D extends CallableDescriptor>
return new CallCandidateResolutionContext<D>( return new CallCandidateResolutionContext<D>(
candidateCall, tracing, trace, context.scope, call, context.expectedType, candidateCall, tracing, trace, context.scope, call, context.expectedType,
context.dataFlowInfo, context.contextDependency, context.checkArguments, context.dataFlowInfo, context.contextDependency, context.checkArguments,
context.expressionPosition, context.resolutionResultsCache, context.labelResolver, context.dataFlowInfoForArguments, context.callResolverExtension); context.expressionPosition, context.resolutionResultsCache, context.labelResolver, context.dataFlowInfoForArguments,
context.callResolverExtension, context.isAnnotationContext);
} }
public static <D extends CallableDescriptor> CallCandidateResolutionContext<D> create( public static <D extends CallableDescriptor> CallCandidateResolutionContext<D> create(
@@ -80,7 +82,8 @@ public final class CallCandidateResolutionContext<D extends CallableDescriptor>
return new CallCandidateResolutionContext<D>( return new CallCandidateResolutionContext<D>(
candidateCall, tracing, context.trace, context.scope, context.call, context.expectedType, candidateCall, tracing, context.trace, context.scope, context.call, context.expectedType,
context.dataFlowInfo, context.contextDependency, context.checkArguments, context.expressionPosition, context.dataFlowInfo, context.contextDependency, context.checkArguments, context.expressionPosition,
context.resolutionResultsCache, context.labelResolver, context.dataFlowInfoForArguments, context.callResolverExtension); context.resolutionResultsCache, context.labelResolver, context.dataFlowInfoForArguments, context.callResolverExtension,
context.isAnnotationContext);
} }
@Override @Override
@@ -96,7 +99,8 @@ public final class CallCandidateResolutionContext<D extends CallableDescriptor>
) { ) {
return new CallCandidateResolutionContext<D>( return new CallCandidateResolutionContext<D>(
candidateCall, tracing, trace, scope, call, expectedType, dataFlowInfo, contextDependency, candidateCall, tracing, trace, scope, call, expectedType, dataFlowInfo, contextDependency,
checkArguments, expressionPosition, resolutionResultsCache, labelResolver, dataFlowInfoForArguments, callResolverExtension); checkArguments, expressionPosition, resolutionResultsCache, labelResolver, dataFlowInfoForArguments, callResolverExtension,
isAnnotationContext);
} }
@Override @Override
@@ -47,10 +47,11 @@ public abstract class CallResolutionContext<Context extends CallResolutionContex
@NotNull LabelResolver labelResolver, @NotNull LabelResolver labelResolver,
@SuppressWarnings("NullableProblems") @SuppressWarnings("NullableProblems")
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments, @Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments,
@NotNull CallResolverExtension callResolverExtension @NotNull CallResolverExtension callResolverExtension,
boolean isAnnotationContext
) { ) {
super(trace, scope, expectedType, dataFlowInfo, expressionPosition, contextDependency, resolutionResultsCache, labelResolver, super(trace, scope, expectedType, dataFlowInfo, expressionPosition, contextDependency, resolutionResultsCache, labelResolver,
callResolverExtension); callResolverExtension, isAnnotationContext);
this.call = call; this.call = call;
this.checkArguments = checkArguments; this.checkArguments = checkArguments;
if (dataFlowInfoForArguments != null) { if (dataFlowInfoForArguments != null) {
@@ -36,6 +36,7 @@ public abstract class ResolutionContext<Context extends ResolutionContext<Contex
public final ResolutionResultsCache resolutionResultsCache; public final ResolutionResultsCache resolutionResultsCache;
public final LabelResolver labelResolver; public final LabelResolver labelResolver;
public final CallResolverExtension callResolverExtension; public final CallResolverExtension callResolverExtension;
public final boolean isAnnotationContext;
protected ResolutionContext( protected ResolutionContext(
@NotNull BindingTrace trace, @NotNull BindingTrace trace,
@@ -46,7 +47,8 @@ public abstract class ResolutionContext<Context extends ResolutionContext<Contex
@NotNull ContextDependency contextDependency, @NotNull ContextDependency contextDependency,
@NotNull ResolutionResultsCache resolutionResultsCache, @NotNull ResolutionResultsCache resolutionResultsCache,
@NotNull LabelResolver labelResolver, @NotNull LabelResolver labelResolver,
@NotNull CallResolverExtension callResolverExtension @NotNull CallResolverExtension callResolverExtension,
boolean isAnnotationContext
) { ) {
this.trace = trace; this.trace = trace;
this.scope = scope; this.scope = scope;
@@ -57,6 +59,7 @@ public abstract class ResolutionContext<Context extends ResolutionContext<Contex
this.resolutionResultsCache = resolutionResultsCache; this.resolutionResultsCache = resolutionResultsCache;
this.labelResolver = labelResolver; this.labelResolver = labelResolver;
this.callResolverExtension = callResolverExtension; this.callResolverExtension = callResolverExtension;
this.isAnnotationContext = isAnnotationContext;
} }
protected abstract Context create( protected abstract Context create(
@@ -18,10 +18,11 @@ public class SimpleResolutionContext extends ResolutionContext<SimpleResolutionC
@NotNull ContextDependency contextDependency, @NotNull ContextDependency contextDependency,
@NotNull ResolutionResultsCache resolutionResultsCache, @NotNull ResolutionResultsCache resolutionResultsCache,
@NotNull LabelResolver labelResolver, @NotNull LabelResolver labelResolver,
@NotNull CallResolverExtension callResolverExtension @NotNull CallResolverExtension callResolverExtension,
boolean isAnnotationContext
) { ) {
super(trace, scope, expectedType, dataFlowInfo, expressionPosition, contextDependency, resolutionResultsCache, labelResolver, super(trace, scope, expectedType, dataFlowInfo, expressionPosition, contextDependency, resolutionResultsCache, labelResolver,
callResolverExtension); callResolverExtension, isAnnotationContext);
} }
@Override @Override
@@ -37,7 +38,7 @@ public class SimpleResolutionContext extends ResolutionContext<SimpleResolutionC
) { ) {
return new SimpleResolutionContext( return new SimpleResolutionContext(
trace, scope, expectedType, dataFlowInfo, expressionPosition, contextDependency, resolutionResultsCache, labelResolver, trace, scope, expectedType, dataFlowInfo, expressionPosition, contextDependency, resolutionResultsCache, labelResolver,
callResolverExtension); callResolverExtension, isAnnotationContext);
} }
@Override @Override
@@ -51,10 +51,10 @@ public class ResolutionTask<D extends CallableDescriptor, F extends D> extends C
DataFlowInfo dataFlowInfo, ContextDependency contextDependency, CheckValueArgumentsMode checkArguments, DataFlowInfo dataFlowInfo, ContextDependency contextDependency, CheckValueArgumentsMode checkArguments,
ExpressionPosition expressionPosition, ResolutionResultsCache resolutionResultsCache, ExpressionPosition expressionPosition, ResolutionResultsCache resolutionResultsCache,
@NotNull LabelResolver labelResolver, @Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments, @NotNull LabelResolver labelResolver, @Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments,
@NotNull CallResolverExtension callResolverExtension @NotNull CallResolverExtension callResolverExtension, boolean isAnnotationContext
) { ) {
super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition, resolutionResultsCache, super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition, resolutionResultsCache,
labelResolver, dataFlowInfoForArguments, callResolverExtension); labelResolver, dataFlowInfoForArguments, callResolverExtension, isAnnotationContext);
this.candidates = candidates; this.candidates = candidates;
this.reference = reference; this.reference = reference;
this.tracing = tracing; this.tracing = tracing;
@@ -69,7 +69,8 @@ public class ResolutionTask<D extends CallableDescriptor, F extends D> extends C
this(candidates, reference, tracing != null ? tracing : TracingStrategyImpl.create(reference, context.call), this(candidates, reference, tracing != null ? tracing : TracingStrategyImpl.create(reference, context.call),
context.trace, context.scope, context.call, context.trace, context.scope, context.call,
context.expectedType, context.dataFlowInfo, context.contextDependency, context.checkArguments, context.expectedType, context.dataFlowInfo, context.contextDependency, context.checkArguments,
context.expressionPosition, context.resolutionResultsCache, context.labelResolver, context.dataFlowInfoForArguments, context.callResolverExtension); context.expressionPosition, context.resolutionResultsCache, context.labelResolver, context.dataFlowInfoForArguments,
context.callResolverExtension, context.isAnnotationContext);
} }
public ResolutionTask( public ResolutionTask(
@@ -114,7 +115,7 @@ public class ResolutionTask<D extends CallableDescriptor, F extends D> extends C
) { ) {
ResolutionTask<D, F> newTask = new ResolutionTask<D, F>( ResolutionTask<D, F> newTask = new ResolutionTask<D, F>(
candidates, reference, tracing, trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, candidates, reference, tracing, trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments,
expressionPosition, resolutionResultsCache, labelResolver, dataFlowInfoForArguments, callResolverExtension); expressionPosition, resolutionResultsCache, labelResolver, dataFlowInfoForArguments, callResolverExtension, isAnnotationContext);
newTask.setCheckingStrategy(checkingStrategy); newTask.setCheckingStrategy(checkingStrategy);
return newTask; return newTask;
} }
@@ -127,7 +128,7 @@ public class ResolutionTask<D extends CallableDescriptor, F extends D> extends C
public ResolutionTask<D, F> replaceCall(@NotNull Call newCall) { public ResolutionTask<D, F> replaceCall(@NotNull Call newCall) {
return new ResolutionTask<D, F>( return new ResolutionTask<D, F>(
candidates, reference, tracing, trace, scope, newCall, expectedType, dataFlowInfo, contextDependency, checkArguments, candidates, reference, tracing, trace, scope, newCall, expectedType, dataFlowInfo, contextDependency, checkArguments,
expressionPosition, resolutionResultsCache, labelResolver, dataFlowInfoForArguments, callResolverExtension); expressionPosition, resolutionResultsCache, labelResolver, dataFlowInfoForArguments, callResolverExtension, isAnnotationContext);
} }
public interface DescriptorCheckStrategy { public interface DescriptorCheckStrategy {
@@ -43,7 +43,7 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
) { ) {
return newContext(expressionTypingServices, trace, scope, dataFlowInfo, expectedType, expressionPosition, return newContext(expressionTypingServices, trace, scope, dataFlowInfo, expectedType, expressionPosition,
ContextDependency.INDEPENDENT, ResolutionResultsCacheImpl.create(), LabelResolver.create(), ContextDependency.INDEPENDENT, ResolutionResultsCacheImpl.create(), LabelResolver.create(),
expressionTypingServices.createExtension(scope)); expressionTypingServices.createExtension(scope, false), false);
} }
@NotNull @NotNull
@@ -54,7 +54,7 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
return newContext(expressionTypingServices, resolutionContext.trace, resolutionContext.scope, resolutionContext.dataFlowInfo, return newContext(expressionTypingServices, resolutionContext.trace, resolutionContext.scope, resolutionContext.dataFlowInfo,
resolutionContext.expectedType, resolutionContext.expressionPosition, resolutionContext.contextDependency, resolutionContext.expectedType, resolutionContext.expressionPosition, resolutionContext.contextDependency,
resolutionContext.resolutionResultsCache, resolutionContext.labelResolver, resolutionContext.resolutionResultsCache, resolutionContext.labelResolver,
resolutionContext.callResolverExtension); resolutionContext.callResolverExtension, resolutionContext.isAnnotationContext);
} }
@NotNull @NotNull
@@ -68,11 +68,12 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
@NotNull ContextDependency contextDependency, @NotNull ContextDependency contextDependency,
@NotNull ResolutionResultsCache resolutionResultsCache, @NotNull ResolutionResultsCache resolutionResultsCache,
@NotNull LabelResolver labelResolver, @NotNull LabelResolver labelResolver,
@NotNull CallResolverExtension callResolverExtension @NotNull CallResolverExtension callResolverExtension,
boolean isAnnotationContext
) { ) {
return new ExpressionTypingContext( return new ExpressionTypingContext(
expressionTypingServices, labelResolver, trace, scope, dataFlowInfo, expectedType, expressionPosition, contextDependency, resolutionResultsCache, expressionTypingServices, labelResolver, trace, scope, dataFlowInfo, expectedType, expressionPosition, contextDependency, resolutionResultsCache,
callResolverExtension); callResolverExtension, isAnnotationContext);
} }
public final ExpressionTypingServices expressionTypingServices; public final ExpressionTypingServices expressionTypingServices;
@@ -89,10 +90,11 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
@NotNull ExpressionPosition expressionPosition, @NotNull ExpressionPosition expressionPosition,
@NotNull ContextDependency contextDependency, @NotNull ContextDependency contextDependency,
@NotNull ResolutionResultsCache resolutionResultsCache, @NotNull ResolutionResultsCache resolutionResultsCache,
@NotNull CallResolverExtension callResolverExtension @NotNull CallResolverExtension callResolverExtension,
boolean isAnnotationContext
) { ) {
super(trace, scope, expectedType, dataFlowInfo, expressionPosition, contextDependency, resolutionResultsCache, labelResolver, super(trace, scope, expectedType, dataFlowInfo, expressionPosition, contextDependency, resolutionResultsCache, labelResolver,
callResolverExtension); callResolverExtension, isAnnotationContext);
this.expressionTypingServices = expressionTypingServices; this.expressionTypingServices = expressionTypingServices;
} }
@@ -108,7 +110,7 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
@NotNull LabelResolver labelResolver @NotNull LabelResolver labelResolver
) { ) {
return new ExpressionTypingContext(expressionTypingServices, this.labelResolver, trace, scope, dataFlowInfo, expectedType, return new ExpressionTypingContext(expressionTypingServices, this.labelResolver, trace, scope, dataFlowInfo, expectedType,
expressionPosition, contextDependency, resolutionResultsCache, callResolverExtension); expressionPosition, contextDependency, resolutionResultsCache, callResolverExtension, isAnnotationContext);
} }
@Override @Override
@@ -353,7 +353,7 @@ public class ExpressionTypingServices {
private ExpressionTypingContext createContext(ExpressionTypingContext oldContext, BindingTrace trace, WritableScope scope, DataFlowInfo dataFlowInfo, JetType expectedType) { private ExpressionTypingContext createContext(ExpressionTypingContext oldContext, BindingTrace trace, WritableScope scope, DataFlowInfo dataFlowInfo, JetType expectedType) {
return ExpressionTypingContext.newContext(this, trace, scope, dataFlowInfo, expectedType, oldContext.expressionPosition, return ExpressionTypingContext.newContext(this, trace, scope, dataFlowInfo, expectedType, oldContext.expressionPosition,
oldContext.contextDependency, oldContext.resolutionResultsCache, oldContext.labelResolver, oldContext.contextDependency, oldContext.resolutionResultsCache, oldContext.labelResolver,
oldContext.callResolverExtension); oldContext.callResolverExtension, oldContext.isAnnotationContext);
} }
@Nullable @Nullable
@@ -410,7 +410,7 @@ public class ExpressionTypingServices {
} }
@NotNull @NotNull
public CallResolverExtension createExtension(@NotNull JetScope scope) { public CallResolverExtension createExtension(@NotNull JetScope scope, boolean isAnnotationContext) {
return extensionProvider.createExtension(scope == JetScope.EMPTY ? null : scope.getContainingDeclaration()); return extensionProvider.createExtension(scope == JetScope.EMPTY ? null : scope.getContainingDeclaration(), isAnnotationContext);
} }
} }