| Index: pkg/analyzer/lib/src/generated/element_resolver.dart
|
| diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
|
| index ffe623b8879a2d6fec0def73917e44a4cba80f42..cdec8c24cf6722378a58d3d7fdbf7c7eef58392b 100644
|
| --- a/pkg/analyzer/lib/src/generated/element_resolver.dart
|
| +++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
|
| @@ -1573,76 +1573,13 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| Expression target, DartType type, String getterName) {
|
| type = _resolveTypeParameter(type);
|
| if (type is InterfaceType) {
|
| - InterfaceType interfaceType = type;
|
| - PropertyAccessorElement accessor;
|
| - if (target is SuperExpression) {
|
| - accessor = interfaceType.lookUpGetterInSuperclass(
|
| - getterName, _definingLibrary);
|
| - } else {
|
| - accessor = interfaceType.lookUpGetter(getterName, _definingLibrary);
|
| - }
|
| - if (accessor != null) {
|
| - return accessor;
|
| - }
|
| - return _lookUpGetterInInterfaces(
|
| - interfaceType, false, getterName, new HashSet<ClassElement>());
|
| + return type.lookUpInheritedGetter(getterName,
|
| + library: _definingLibrary, thisType: target is! SuperExpression);
|
| }
|
| return null;
|
| }
|
|
|
| /**
|
| - * Look up the getter with the given [getterName] in the interfaces
|
| - * implemented by the given [targetType], either directly or indirectly.
|
| - * Return the element representing the getter that was found, or `null` if
|
| - * there is no getter with the given name. The flag [includeTargetType] should
|
| - * be `true` if the search should include the target type. The
|
| - * [visitedInterfaces] is a set containing all of the interfaces that have
|
| - * been examined, used to prevent infinite recursion and to optimize the
|
| - * search.
|
| - */
|
| - PropertyAccessorElement _lookUpGetterInInterfaces(
|
| - InterfaceType targetType,
|
| - bool includeTargetType,
|
| - String getterName,
|
| - HashSet<ClassElement> visitedInterfaces) {
|
| - // TODO(brianwilkerson) This isn't correct. Section 8.1.1 of the
|
| - // specification (titled "Inheritance and Overriding" under "Interfaces")
|
| - // describes a much more complex scheme for finding the inherited member.
|
| - // We need to follow that scheme. The code below should cover the 80% case.
|
| - ClassElement targetClass = targetType.element;
|
| - if (visitedInterfaces.contains(targetClass)) {
|
| - return null;
|
| - }
|
| - visitedInterfaces.add(targetClass);
|
| - if (includeTargetType) {
|
| - PropertyAccessorElement getter = targetType.getGetter(getterName);
|
| - if (getter != null && getter.isAccessibleIn(_definingLibrary)) {
|
| - return getter;
|
| - }
|
| - }
|
| - for (InterfaceType interfaceType in targetType.interfaces) {
|
| - PropertyAccessorElement getter = _lookUpGetterInInterfaces(
|
| - interfaceType, true, getterName, visitedInterfaces);
|
| - if (getter != null) {
|
| - return getter;
|
| - }
|
| - }
|
| - for (InterfaceType mixinType in targetType.mixins.reversed) {
|
| - PropertyAccessorElement getter = _lookUpGetterInInterfaces(
|
| - mixinType, true, getterName, visitedInterfaces);
|
| - if (getter != null) {
|
| - return getter;
|
| - }
|
| - }
|
| - InterfaceType superclass = targetType.superclass;
|
| - if (superclass == null) {
|
| - return null;
|
| - }
|
| - return _lookUpGetterInInterfaces(
|
| - superclass, true, getterName, visitedInterfaces);
|
| - }
|
| -
|
| - /**
|
| * Look up the method or getter with the given [memberName] in the given
|
| * [type]. Return the element representing the method or getter that was
|
| * found, or `null` if there is no method or getter with the given name.
|
| @@ -1650,79 +1587,13 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| ExecutableElement _lookupGetterOrMethod(DartType type, String memberName) {
|
| type = _resolveTypeParameter(type);
|
| if (type is InterfaceType) {
|
| - InterfaceType interfaceType = type;
|
| - ExecutableElement member =
|
| - interfaceType.lookUpMethod(memberName, _definingLibrary);
|
| - if (member != null) {
|
| - return member;
|
| - }
|
| - member = interfaceType.lookUpGetter(memberName, _definingLibrary);
|
| - if (member != null) {
|
| - return member;
|
| - }
|
| - return _lookUpGetterOrMethodInInterfaces(
|
| - interfaceType, false, memberName, new HashSet<ClassElement>());
|
| + return type.lookUpInheritedGetterOrMethod(memberName,
|
| + library: _definingLibrary);
|
| }
|
| return null;
|
| }
|
|
|
| /**
|
| - * Look up the method or getter with the given [memberName] in the interfaces
|
| - * implemented by the given [targetType], either directly or indirectly.
|
| - * Return the element representing the method or getter that was found, or
|
| - * `null` if there is no method or getter with the given name. The flag
|
| - * [includeTargetType] should be `true` if the search should include the
|
| - * target type. The [visitedInterfaces] is a set containing all of the
|
| - * interfaces that have been examined, used to prevent infinite recursion and
|
| - * to optimize the search.
|
| - */
|
| - ExecutableElement _lookUpGetterOrMethodInInterfaces(
|
| - InterfaceType targetType,
|
| - bool includeTargetType,
|
| - String memberName,
|
| - HashSet<ClassElement> visitedInterfaces) {
|
| - // TODO(brianwilkerson) This isn't correct. Section 8.1.1 of the
|
| - // specification (titled "Inheritance and Overriding" under "Interfaces")
|
| - // describes a much more complex scheme for finding the inherited member.
|
| - // We need to follow that scheme. The code below should cover the 80% case.
|
| - ClassElement targetClass = targetType.element;
|
| - if (visitedInterfaces.contains(targetClass)) {
|
| - return null;
|
| - }
|
| - visitedInterfaces.add(targetClass);
|
| - if (includeTargetType) {
|
| - ExecutableElement member = targetType.getMethod(memberName);
|
| - if (member != null) {
|
| - return member;
|
| - }
|
| - member = targetType.getGetter(memberName);
|
| - if (member != null) {
|
| - return member;
|
| - }
|
| - }
|
| - for (InterfaceType interfaceType in targetType.interfaces) {
|
| - ExecutableElement member = _lookUpGetterOrMethodInInterfaces(
|
| - interfaceType, true, memberName, visitedInterfaces);
|
| - if (member != null) {
|
| - return member;
|
| - }
|
| - }
|
| - for (InterfaceType mixinType in targetType.mixins.reversed) {
|
| - ExecutableElement member = _lookUpGetterOrMethodInInterfaces(
|
| - mixinType, true, memberName, visitedInterfaces);
|
| - if (member != null) {
|
| - return member;
|
| - }
|
| - }
|
| - InterfaceType superclass = targetType.superclass;
|
| - if (superclass == null) {
|
| - return null;
|
| - }
|
| - return _lookUpGetterOrMethodInInterfaces(
|
| - superclass, true, memberName, visitedInterfaces);
|
| - }
|
| -
|
| - /**
|
| * Look up the method with the given [methodName] in the given [type]. Return
|
| * the element representing the method that was found, or `null` if there is
|
| * no method with the given name. The [target] is the target of the
|
| @@ -1732,76 +1603,13 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| Expression target, DartType type, String methodName) {
|
| type = _resolveTypeParameter(type);
|
| if (type is InterfaceType) {
|
| - InterfaceType interfaceType = type;
|
| - MethodElement method;
|
| - if (target is SuperExpression) {
|
| - method = interfaceType.lookUpMethodInSuperclass(
|
| - methodName, _definingLibrary);
|
| - } else {
|
| - method = interfaceType.lookUpMethod(methodName, _definingLibrary);
|
| - }
|
| - if (method != null) {
|
| - return method;
|
| - }
|
| - return _lookUpMethodInInterfaces(
|
| - interfaceType, false, methodName, new HashSet<ClassElement>());
|
| + return type.lookUpInheritedMethod(methodName,
|
| + library: _definingLibrary, thisType: target is! SuperExpression);
|
| }
|
| return null;
|
| }
|
|
|
| /**
|
| - * Look up the method with the given [methodName] in the interfaces
|
| - * implemented by the given [targetType], either directly or indirectly.
|
| - * Return the element representing the method that was found, or `null` if
|
| - * there is no method with the given name. The flag [includeTargetType] should
|
| - * be `true` if the search should include the target type. The
|
| - * [visitedInterfaces] is a set containing all of the interfaces that have
|
| - * been examined, used to prevent infinite recursion and to optimize the
|
| - * search.
|
| - */
|
| - MethodElement _lookUpMethodInInterfaces(
|
| - InterfaceType targetType,
|
| - bool includeTargetType,
|
| - String methodName,
|
| - HashSet<ClassElement> visitedInterfaces) {
|
| - // TODO(brianwilkerson) This isn't correct. Section 8.1.1 of the
|
| - // specification (titled "Inheritance and Overriding" under "Interfaces")
|
| - // describes a much more complex scheme for finding the inherited member.
|
| - // We need to follow that scheme. The code below should cover the 80% case.
|
| - ClassElement targetClass = targetType.element;
|
| - if (visitedInterfaces.contains(targetClass)) {
|
| - return null;
|
| - }
|
| - visitedInterfaces.add(targetClass);
|
| - if (includeTargetType) {
|
| - MethodElement method = targetType.getMethod(methodName);
|
| - if (method != null && method.isAccessibleIn(_definingLibrary)) {
|
| - return method;
|
| - }
|
| - }
|
| - for (InterfaceType interfaceType in targetType.interfaces) {
|
| - MethodElement method = _lookUpMethodInInterfaces(
|
| - interfaceType, true, methodName, visitedInterfaces);
|
| - if (method != null) {
|
| - return method;
|
| - }
|
| - }
|
| - for (InterfaceType mixinType in targetType.mixins.reversed) {
|
| - MethodElement method = _lookUpMethodInInterfaces(
|
| - mixinType, true, methodName, visitedInterfaces);
|
| - if (method != null) {
|
| - return method;
|
| - }
|
| - }
|
| - InterfaceType superclass = targetType.superclass;
|
| - if (superclass == null) {
|
| - return null;
|
| - }
|
| - return _lookUpMethodInInterfaces(
|
| - superclass, true, methodName, visitedInterfaces);
|
| - }
|
| -
|
| - /**
|
| * Look up the setter with the given [setterName] in the given [type]. Return
|
| * the element representing the setter that was found, or `null` if there is
|
| * no setter with the given name. The [target] is the target of the
|
| @@ -1811,77 +1619,13 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| Expression target, DartType type, String setterName) {
|
| type = _resolveTypeParameter(type);
|
| if (type is InterfaceType) {
|
| - InterfaceType interfaceType = type;
|
| - PropertyAccessorElement accessor;
|
| - if (target is SuperExpression) {
|
| - accessor = interfaceType.lookUpSetterInSuperclass(
|
| - setterName, _definingLibrary);
|
| - } else {
|
| - accessor = interfaceType.lookUpSetter(setterName, _definingLibrary);
|
| - }
|
| - if (accessor != null) {
|
| - return accessor;
|
| - }
|
| - return _lookUpSetterInInterfaces(
|
| - interfaceType, false, setterName, new HashSet<ClassElement>());
|
| + return type.lookUpInheritedSetter(setterName,
|
| + library: _definingLibrary, thisType: target is! SuperExpression);
|
| }
|
| return null;
|
| }
|
|
|
| /**
|
| - * Look up the setter with the given [setterName] in the interfaces
|
| - * implemented by the given [targetType], either directly or indirectly.
|
| - * Return the element representing the setter that was found, or `null` if
|
| - * there is no setter with the given name. The [targetType] is the type in
|
| - * which the setter might be defined. The flag [includeTargetType] should be
|
| - * `true` if the search should include the target type. The
|
| - * [visitedInterfaces] is a set containing all of the interfaces that have
|
| - * been examined, used to prevent infinite recursion and to optimize the
|
| - * search.
|
| - */
|
| - PropertyAccessorElement _lookUpSetterInInterfaces(
|
| - InterfaceType targetType,
|
| - bool includeTargetType,
|
| - String setterName,
|
| - HashSet<ClassElement> visitedInterfaces) {
|
| - // TODO(brianwilkerson) This isn't correct. Section 8.1.1 of the
|
| - // specification (titled "Inheritance and Overriding" under "Interfaces")
|
| - // describes a much more complex scheme for finding the inherited member.
|
| - // We need to follow that scheme. The code below should cover the 80% case.
|
| - ClassElement targetClass = targetType.element;
|
| - if (visitedInterfaces.contains(targetClass)) {
|
| - return null;
|
| - }
|
| - visitedInterfaces.add(targetClass);
|
| - if (includeTargetType) {
|
| - PropertyAccessorElement setter = targetType.getSetter(setterName);
|
| - if (setter != null && setter.isAccessibleIn(_definingLibrary)) {
|
| - return setter;
|
| - }
|
| - }
|
| - for (InterfaceType interfaceType in targetType.interfaces) {
|
| - PropertyAccessorElement setter = _lookUpSetterInInterfaces(
|
| - interfaceType, true, setterName, visitedInterfaces);
|
| - if (setter != null) {
|
| - return setter;
|
| - }
|
| - }
|
| - for (InterfaceType mixinType in targetType.mixins.reversed) {
|
| - PropertyAccessorElement setter = _lookUpSetterInInterfaces(
|
| - mixinType, true, setterName, visitedInterfaces);
|
| - if (setter != null) {
|
| - return setter;
|
| - }
|
| - }
|
| - InterfaceType superclass = targetType.superclass;
|
| - if (superclass == null) {
|
| - return null;
|
| - }
|
| - return _lookUpSetterInInterfaces(
|
| - superclass, true, setterName, visitedInterfaces);
|
| - }
|
| -
|
| - /**
|
| * Given some class [element], this method uses [_subtypeManager] to find the
|
| * set of all subtypes; the subtypes are then searched for a member (method,
|
| * getter, or setter), that has the given [memberName]. The flag [asMethod]
|
|
|