From afa09caa0f4de10ccf4ff06018af89288bf302aa Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Tue, 12 Nov 2013 11:21:56 +0400 Subject: [PATCH] Added AnnotationContext flag --- .../jet/lang/resolve/AnnotationResolver.java | 3 ++- .../jetbrains/jet/lang/resolve/BodyResolver.java | 5 +++-- .../jet/lang/resolve/calls/CallResolver.java | 5 +++-- .../calls/CallResolverExtensionProvider.java | 4 ++-- .../context/BasicCallResolutionContext.java | 14 ++++++++------ .../context/CallCandidateResolutionContext.java | 14 +++++++++----- .../calls/context/CallResolutionContext.java | 5 +++-- .../resolve/calls/context/ResolutionContext.java | 5 ++++- .../calls/context/SimpleResolutionContext.java | 7 ++++--- .../lang/resolve/calls/tasks/ResolutionTask.java | 11 ++++++----- .../expressions/ExpressionTypingContext.java | 16 +++++++++------- .../expressions/ExpressionTypingServices.java | 6 +++--- 12 files changed, 56 insertions(+), 39 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnnotationResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnnotationResolver.java index b4ced4c745f..3d4a9b7fb75 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnnotationResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnnotationResolver.java @@ -169,7 +169,8 @@ public class AnnotationResolver { trace, scope, CallMaker.makeCall(ReceiverValue.NO_RECEIVER, null, annotationEntry), NO_EXPECTED_TYPE, - DataFlowInfo.EMPTY); + DataFlowInfo.EMPTY, + true); } public void resolveAnnotationsArguments(@NotNull JetScope scope, @Nullable JetModifierList modifierList, @NotNull BindingTrace trace) { 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 7a09e527634..1d9c5684745 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java @@ -217,7 +217,8 @@ 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(), expressionTypingServices.createExtension(scope)); + ResolutionResultsCacheImpl.create(), LabelResolver.create(), + expressionTypingServices.createExtension(scope, false), false); DataFlowUtils.checkType(type, delegateExpression, simpleResolutionContext); } } @@ -239,7 +240,7 @@ public class BodyResolver { } OverloadResolutionResults results = callResolver.resolveFunctionCall( 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()) { JetType supertype = results.getResultingDescriptor().getReturnType(); recordSupertype(typeReference, supertype); 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 bee9689c56f..086d26e4236 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 @@ -132,12 +132,13 @@ public class CallResolver { @NotNull JetScope scope, @NotNull Call call, @NotNull JetType expectedType, - @NotNull DataFlowInfo dataFlowInfo + @NotNull DataFlowInfo dataFlowInfo, + boolean isAnnotationContext ) { return resolveFunctionCall(BasicCallResolutionContext.create( trace, scope, call, expectedType, dataFlowInfo, ContextDependency.INDEPENDENT, CheckValueArgumentsMode.ENABLED, ExpressionPosition.FREE, ResolutionResultsCacheImpl.create(), LabelResolver.create(), null, - expressionTypingServices.createExtension(scope))); + expressionTypingServices.createExtension(scope, isAnnotationContext), isAnnotationContext)); } @NotNull diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolverExtensionProvider.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolverExtensionProvider.java index 2c03380f1f7..43a97a873f3 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolverExtensionProvider.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolverExtensionProvider.java @@ -31,8 +31,8 @@ public class CallResolverExtensionProvider { private WeakReference>> extensionsCache; @NotNull - public CallResolverExtension createExtension(@Nullable DeclarationDescriptor descriptor) { - if (descriptor == null) { + public CallResolverExtension createExtension(@Nullable DeclarationDescriptor descriptor, boolean isAnnotationContext) { + if (descriptor == null || isAnnotationContext) { return DEFAULT; } return new CompositeExtension(createExtensions(descriptor)); 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 c355ff5d407..bea3c93f48c 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 @@ -41,11 +41,12 @@ public class BasicCallResolutionContext extends CallResolutionContext @NotNull ResolutionResultsCache resolutionResultsCache, @NotNull LabelResolver labelResolver, @Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments, - @NotNull CallResolverExtension callResolverExtension + @NotNull CallResolverExtension callResolverExtension, + boolean isAnnotationContext ) { super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition, resolutionResultsCache, - labelResolver, dataFlowInfoForArguments, callResolverExtension); + labelResolver, dataFlowInfoForArguments, callResolverExtension, isAnnotationContext); this.candidateCall = candidateCall; this.tracing = tracing; } @@ -65,7 +66,8 @@ 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.callResolverExtension); + context.expressionPosition, context.resolutionResultsCache, context.labelResolver, context.dataFlowInfoForArguments, + context.callResolverExtension, context.isAnnotationContext); } public static CallCandidateResolutionContext create( @@ -80,7 +82,8 @@ 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.callResolverExtension); + context.resolutionResultsCache, context.labelResolver, context.dataFlowInfoForArguments, context.callResolverExtension, + context.isAnnotationContext); } @Override @@ -96,7 +99,8 @@ public final class CallCandidateResolutionContext ) { return new CallCandidateResolutionContext( candidateCall, tracing, trace, scope, call, expectedType, dataFlowInfo, contextDependency, - checkArguments, expressionPosition, resolutionResultsCache, labelResolver, dataFlowInfoForArguments, callResolverExtension); + checkArguments, expressionPosition, resolutionResultsCache, labelResolver, dataFlowInfoForArguments, callResolverExtension, + isAnnotationContext); } @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 713a7ab7dff..da7c82da1c2 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 @@ -47,10 +47,11 @@ public abstract class CallResolutionContext extends C DataFlowInfo dataFlowInfo, ContextDependency contextDependency, CheckValueArgumentsMode checkArguments, ExpressionPosition expressionPosition, ResolutionResultsCache resolutionResultsCache, @NotNull LabelResolver labelResolver, @Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments, - @NotNull CallResolverExtension callResolverExtension + @NotNull CallResolverExtension callResolverExtension, boolean isAnnotationContext ) { super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, expressionPosition, resolutionResultsCache, - labelResolver, dataFlowInfoForArguments, callResolverExtension); + labelResolver, dataFlowInfoForArguments, callResolverExtension, isAnnotationContext); this.candidates = candidates; this.reference = reference; this.tracing = tracing; @@ -69,7 +69,8 @@ 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.callResolverExtension); + context.expressionPosition, context.resolutionResultsCache, context.labelResolver, context.dataFlowInfoForArguments, + context.callResolverExtension, context.isAnnotationContext); } public ResolutionTask( @@ -114,7 +115,7 @@ public class ResolutionTask extends C ) { ResolutionTask newTask = new ResolutionTask( candidates, reference, tracing, trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, - expressionPosition, resolutionResultsCache, labelResolver, dataFlowInfoForArguments, callResolverExtension); + expressionPosition, resolutionResultsCache, labelResolver, dataFlowInfoForArguments, callResolverExtension, isAnnotationContext); newTask.setCheckingStrategy(checkingStrategy); return newTask; } @@ -127,7 +128,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, callResolverExtension); + expressionPosition, resolutionResultsCache, labelResolver, dataFlowInfoForArguments, callResolverExtension, isAnnotationContext); } 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 6fc461e94ee..922badf0be3 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 @@ -43,7 +43,7 @@ public class ExpressionTypingContext extends ResolutionContext