| Index: pkg/compiler/lib/src/resolution/members.dart
|
| diff --git a/pkg/compiler/lib/src/resolution/members.dart b/pkg/compiler/lib/src/resolution/members.dart
|
| index 844f0b04005dd0f9e24b8672c4c7ad36adaf65aa..90600657b467c1ea883e6f6b9703e9e68f43a1d0 100644
|
| --- a/pkg/compiler/lib/src/resolution/members.dart
|
| +++ b/pkg/compiler/lib/src/resolution/members.dart
|
| @@ -1180,8 +1180,9 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| // TODO(johnniwinther): Add information to [AccessSemantics] about
|
| // whether it is erroneous.
|
| if (semantics.kind == AccessKind.SUPER_METHOD) {
|
| - registry.registerStaticUse(new StaticUse.superInvoke(
|
| - semantics.element.declaration, selector.callStructure));
|
| + MethodElement superMethod = semantics.element.declaration;
|
| + registry.registerStaticUse(
|
| + new StaticUse.superInvoke(superMethod, selector.callStructure));
|
| }
|
| // TODO(23998): Remove this when all information goes through
|
| // the [SendStructure].
|
| @@ -1354,8 +1355,9 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| // TODO(johnniwinther): Add information to [AccessSemantics] about
|
| // whether it is erroneous.
|
| if (semantics.kind == AccessKind.SUPER_METHOD) {
|
| - registry.registerStaticUse(new StaticUse.superInvoke(
|
| - semantics.element.declaration, selector.callStructure));
|
| + MethodElement superMethod = semantics.element.declaration;
|
| + registry.registerStaticUse(
|
| + new StaticUse.superInvoke(superMethod, selector.callStructure));
|
| }
|
| // TODO(23998): Remove this when all information goes through
|
| // the [SendStructure].
|
| @@ -1573,13 +1575,14 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| isIncompatibleInvoke = true;
|
| } else {
|
| registry.registerStaticUse(
|
| - new StaticUse.superInvoke(semantics.element, callStructure));
|
| + new StaticUse.superInvoke(superMethod, callStructure));
|
| }
|
| break;
|
| case AccessKind.SUPER_FIELD:
|
| case AccessKind.SUPER_FINAL_FIELD:
|
| case AccessKind.SUPER_GETTER:
|
| - registry.registerStaticUse(new StaticUse.superGet(semantics.element));
|
| + MemberElement superMember = semantics.element;
|
| + registry.registerStaticUse(new StaticUse.superGet(superMember));
|
| selector = callStructure.callSelector;
|
| registry.registerDynamicUse(new DynamicUse(selector, null));
|
| break;
|
| @@ -1605,13 +1608,14 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| case AccessKind.SUPER_METHOD:
|
| // TODO(johnniwinther): Method this should be registered as a
|
| // closurization.
|
| - registry
|
| - .registerStaticUse(new StaticUse.superTearOff(semantics.element));
|
| + MethodElement superMethod = semantics.element;
|
| + registry.registerStaticUse(new StaticUse.superTearOff(superMethod));
|
| break;
|
| case AccessKind.SUPER_FIELD:
|
| case AccessKind.SUPER_FINAL_FIELD:
|
| case AccessKind.SUPER_GETTER:
|
| - registry.registerStaticUse(new StaticUse.superGet(semantics.element));
|
| + MemberElement superMember = semantics.element;
|
| + registry.registerStaticUse(new StaticUse.superGet(superMember));
|
| break;
|
| case AccessKind.SUPER_SETTER:
|
| case AccessKind.UNRESOLVED_SUPER:
|
| @@ -2668,7 +2672,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| isIncompatibleInvoke = true;
|
| } else {
|
| registry.registerStaticUse(
|
| - new StaticUse.staticInvoke(semantics.element, callStructure));
|
| + new StaticUse.staticInvoke(method, callStructure));
|
| handleForeignCall(node, semantics.element, callStructure);
|
| if (method == resolution.commonElements.identicalFunction &&
|
| argumentsResult.isValidAsConstant) {
|
| @@ -2686,8 +2690,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| case AccessKind.TOPLEVEL_FIELD:
|
| case AccessKind.FINAL_TOPLEVEL_FIELD:
|
| case AccessKind.TOPLEVEL_GETTER:
|
| - registry
|
| - .registerStaticUse(new StaticUse.staticGet(semantics.element));
|
| + MemberElement member = semantics.element;
|
| + registry.registerStaticUse(new StaticUse.staticGet(member));
|
| selector = callStructure.callSelector;
|
| registry.registerDynamicUse(new DynamicUse(selector, null));
|
| break;
|
| @@ -2713,8 +2717,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| switch (semantics.kind) {
|
| case AccessKind.STATIC_METHOD:
|
| case AccessKind.TOPLEVEL_METHOD:
|
| - registry.registerStaticUse(
|
| - new StaticUse.staticTearOff(semantics.element));
|
| + MethodElement method = semantics.element;
|
| + registry.registerStaticUse(new StaticUse.staticTearOff(method));
|
| break;
|
| case AccessKind.STATIC_FIELD:
|
| case AccessKind.FINAL_STATIC_FIELD:
|
| @@ -2722,8 +2726,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| case AccessKind.TOPLEVEL_FIELD:
|
| case AccessKind.FINAL_TOPLEVEL_FIELD:
|
| case AccessKind.TOPLEVEL_GETTER:
|
| - registry
|
| - .registerStaticUse(new StaticUse.staticGet(semantics.element));
|
| + MemberElement member = semantics.element;
|
| + registry.registerStaticUse(new StaticUse.staticGet(member));
|
| break;
|
| case AccessKind.STATIC_SETTER:
|
| case AccessKind.TOPLEVEL_SETTER:
|
| @@ -2833,16 +2837,17 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| semantics = new StaticAccess.unresolved(member);
|
| } else if (member.isFunction) {
|
| // `a = b`, `a++` or `a += b` where `a` is a function.
|
| + MethodElement method = member;
|
| ErroneousElement error = reportAndCreateErroneousElement(
|
| node.selector, name.text, MessageKind.ASSIGNING_METHOD, const {});
|
| registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
|
| if (node.isComplex) {
|
| // `a++` or `a += b` where `a` is a function.
|
| - registry.registerStaticUse(new StaticUse.staticTearOff(element));
|
| + registry.registerStaticUse(new StaticUse.staticTearOff(method));
|
| }
|
| semantics = member.isTopLevel
|
| - ? new StaticAccess.topLevelMethod(member)
|
| - : new StaticAccess.staticMethod(member);
|
| + ? new StaticAccess.topLevelMethod(method)
|
| + : new StaticAccess.staticMethod(method);
|
| } else {
|
| // `a = b`, `a++` or `a += b` where `a` is a field.
|
| assert(invariant(node, member.isField,
|
| @@ -3168,12 +3173,14 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| isIndex: true);
|
|
|
| if (!semantics.getter.isError) {
|
| - registry.registerStaticUse(new StaticUse.superInvoke(
|
| - semantics.getter, getterSelector.callStructure));
|
| + MethodElement getter = semantics.getter;
|
| + registry.registerStaticUse(
|
| + new StaticUse.superInvoke(getter, getterSelector.callStructure));
|
| }
|
| if (!semantics.setter.isError) {
|
| - registry.registerStaticUse(new StaticUse.superInvoke(
|
| - semantics.setter, setterSelector.callStructure));
|
| + MethodElement setter = semantics.setter;
|
| + registry.registerStaticUse(
|
| + new StaticUse.superInvoke(setter, setterSelector.callStructure));
|
| }
|
|
|
| // TODO(23998): Remove these when elements are only accessed
|
| @@ -3209,8 +3216,9 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| // through the send structure.
|
| registry.setSelector(node, setterSelector);
|
| if (!semantics.setter.isError) {
|
| - registry.registerStaticUse(new StaticUse.superInvoke(
|
| - semantics.setter, setterSelector.callStructure));
|
| + MethodElement setter = semantics.setter;
|
| + registry.registerStaticUse(
|
| + new StaticUse.superInvoke(setter, setterSelector.callStructure));
|
| }
|
|
|
| SendStructure sendStructure = new IndexSetStructure(semantics);
|
| @@ -3228,12 +3236,14 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| isIndex: true);
|
|
|
| if (!semantics.getter.isError) {
|
| + MethodElement getter = semantics.getter;
|
| registry.registerStaticUse(new StaticUse.superInvoke(
|
| - semantics.getter, getterSelector.callStructure));
|
| + getter, getterSelector.callStructure));
|
| }
|
| if (!semantics.setter.isError) {
|
| + MethodElement setter = semantics.setter;
|
| registry.registerStaticUse(new StaticUse.superInvoke(
|
| - semantics.setter, setterSelector.callStructure));
|
| + setter, setterSelector.callStructure));
|
| }
|
|
|
| // TODO(23998): Remove these when elements are only accessed
|
| @@ -3276,52 +3286,54 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| void registerStaticUses(AccessSemantics semantics) {
|
| switch (semantics.kind) {
|
| case AccessKind.SUPER_METHOD:
|
| - registry
|
| - .registerStaticUse(new StaticUse.superTearOff(semantics.element));
|
| + MethodElement method = semantics.element;
|
| + registry.registerStaticUse(new StaticUse.superTearOff(method));
|
| break;
|
| case AccessKind.SUPER_GETTER:
|
| - registry.registerStaticUse(new StaticUse.superGet(semantics.getter));
|
| + MethodElement getter = semantics.getter;
|
| + registry.registerStaticUse(new StaticUse.superGet(getter));
|
| break;
|
| case AccessKind.SUPER_SETTER:
|
| - registry.registerStaticUse(
|
| - new StaticUse.superSetterSet(semantics.setter));
|
| + MethodElement setter = semantics.setter;
|
| + registry.registerStaticUse(new StaticUse.superSetterSet(setter));
|
| break;
|
| case AccessKind.SUPER_FIELD:
|
| - registry.registerStaticUse(new StaticUse.superGet(semantics.element));
|
| - registry.registerStaticUse(
|
| - new StaticUse.superFieldSet(semantics.element));
|
| + FieldElement field = semantics.element;
|
| + registry.registerStaticUse(new StaticUse.superGet(field));
|
| + registry.registerStaticUse(new StaticUse.superFieldSet(field));
|
| break;
|
| case AccessKind.SUPER_FINAL_FIELD:
|
| - registry.registerStaticUse(new StaticUse.superGet(semantics.element));
|
| + FieldElement field = semantics.element;
|
| + registry.registerStaticUse(new StaticUse.superGet(field));
|
| break;
|
| case AccessKind.COMPOUND:
|
| CompoundAccessSemantics compoundSemantics = semantics;
|
| switch (compoundSemantics.compoundAccessKind) {
|
| case CompoundAccessKind.SUPER_GETTER_FIELD:
|
| case CompoundAccessKind.SUPER_FIELD_FIELD:
|
| - registry
|
| - .registerStaticUse(new StaticUse.superGet(semantics.getter));
|
| - registry.registerStaticUse(
|
| - new StaticUse.superFieldSet(semantics.setter));
|
| + MemberElement getter = semantics.getter;
|
| + FieldElement setter = semantics.setter;
|
| + registry.registerStaticUse(new StaticUse.superGet(getter));
|
| + registry.registerStaticUse(new StaticUse.superFieldSet(setter));
|
| break;
|
| case CompoundAccessKind.SUPER_FIELD_SETTER:
|
| case CompoundAccessKind.SUPER_GETTER_SETTER:
|
| - registry
|
| - .registerStaticUse(new StaticUse.superGet(semantics.getter));
|
| - registry.registerStaticUse(
|
| - new StaticUse.superSetterSet(semantics.setter));
|
| + MemberElement getter = semantics.getter;
|
| + MethodElement setter = semantics.setter;
|
| + registry.registerStaticUse(new StaticUse.superGet(getter));
|
| + registry.registerStaticUse(new StaticUse.superSetterSet(setter));
|
| break;
|
| case CompoundAccessKind.SUPER_METHOD_SETTER:
|
| - registry.registerStaticUse(
|
| - new StaticUse.superSetterSet(semantics.setter));
|
| + MethodElement setter = semantics.setter;
|
| + registry.registerStaticUse(new StaticUse.superSetterSet(setter));
|
| break;
|
| case CompoundAccessKind.UNRESOLVED_SUPER_GETTER:
|
| - registry.registerStaticUse(
|
| - new StaticUse.superSetterSet(semantics.setter));
|
| + MethodElement setter = semantics.setter;
|
| + registry.registerStaticUse(new StaticUse.superSetterSet(setter));
|
| break;
|
| case CompoundAccessKind.UNRESOLVED_SUPER_SETTER:
|
| - registry
|
| - .registerStaticUse(new StaticUse.superGet(semantics.getter));
|
| + MethodElement getter = semantics.getter;
|
| + registry.registerStaticUse(new StaticUse.superGet(getter));
|
| break;
|
| default:
|
| break;
|
| @@ -3371,12 +3383,12 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| registry.registerFeature(Feature.SUPER_NO_SUCH_METHOD);
|
| break;
|
| case AccessKind.SUPER_FIELD:
|
| - registry.registerStaticUse(
|
| - new StaticUse.superFieldSet(semantics.setter));
|
| + FieldElement field = semantics.setter;
|
| + registry.registerStaticUse(new StaticUse.superFieldSet(field));
|
| break;
|
| case AccessKind.SUPER_SETTER:
|
| - registry.registerStaticUse(
|
| - new StaticUse.superSetterSet(semantics.setter));
|
| + MethodElement setter = semantics.setter;
|
| + registry.registerStaticUse(new StaticUse.superSetterSet(setter));
|
| break;
|
| default:
|
| break;
|
| @@ -3902,11 +3914,12 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| // and only declaration elements may be registered.
|
| // TODO(johniwinther): Avoid registration of `type` in face of redirecting
|
| // factory constructors.
|
| + ConstructorElement declaration = constructor.declaration;
|
| registry.registerStaticUse(node.isConst
|
| ? new StaticUse.constConstructorInvoke(
|
| - constructor.declaration, callStructure, type)
|
| + declaration, callStructure, type)
|
| : new StaticUse.typedConstructorInvoke(
|
| - constructor.declaration, callStructure, type));
|
| + constructor, callStructure, type));
|
| ResolutionInterfaceType interfaceType = type;
|
| if (interfaceType.typeArguments
|
| .any((ResolutionDartType type) => !type.isDynamic)) {
|
| @@ -4351,8 +4364,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| if (loopVariable == null || loopVariable.isInstanceMember) {
|
| registry.registerDynamicUse(new DynamicUse(loopVariableSelector, null));
|
| } else if (loopVariable.isStatic || loopVariable.isTopLevel) {
|
| - registry.registerStaticUse(
|
| - new StaticUse.staticSet(loopVariable.declaration));
|
| + MemberElement member = loopVariable.declaration;
|
| + registry.registerStaticUse(new StaticUse.staticSet(member));
|
| }
|
| } else {
|
| // The selector may only be null if we reported an error.
|
|
|