anchor.diff:              type.getDisplayString(withNullability: true), object);
         }
   
  -      for (var getterName in getterNames) {
  -        var getter =
  -            cls.thisType.lookUpGetter2(getterName.text, getterName.library);
  -        if (getter != null) {
  -          ClassElement enclosingClass = getter.enclosingElement;
  -          if (enclosingClass.isDartCoreObject) continue;
  -          var id = MemberId.internal(getterName.text, className: cls.name);
  -          var offset =
  -              enclosingClass == cls ? getter.nameOffset : cls.nameOffset;
  -          registerMember(id, offset, getter, getter.returnType);
  +      var interface = inheritance.getInterface(element.thisType);
  +      for (var name in interface.map.keys) {
  +        var executable = interface.map[name];
  +
  +        ClassElement enclosingClass = executable.enclosingElement;
  +        if (enclosingClass.isDartCoreObject) continue;
  +
  +        var id = MemberId.internal(
  +          name.name,
  +          className: element.name,
  +        );
  +
  +        var offset = enclosingClass == element
  +            ? executable.nameOffset
  +            : element.nameOffset;
  +
  +        DartType type;
  +        if (executable is MethodElement) {
  +          type = executable.type;
  +        } else if (executable is PropertyAccessorElement) {
  +          if (executable.isGetter) {
  +            type = executable.returnType;
  +          } else {
  +            type = executable.parameters.first.type;
  +          }
           }
  -      }
   
  -      for (var setterName in setterNames) {
  -        var setter =
  -            cls.thisType.lookUpSetter2(setterName.text, setterName.library);
  -        if (setter != null) {
  -          ClassElement enclosingClass = setter.enclosingElement;
  -          if (enclosingClass.isDartCoreObject) continue;
  -          var id =
  -              MemberId.internal('${setterName.text}=', className: cls.name);
  -          var offset =
  -              enclosingClass == cls ? setter.nameOffset : cls.nameOffset;
  -          registerMember(id, offset, setter, setter.type.parameters.first.type);
  -        }
  -      }
  -
  -      for (var methodName in methodNames) {
  -        var method =
  -            cls.thisType.lookUpMethod2(methodName.text, methodName.library);
  -        if (method != null) {
  -          ClassElement enclosingClass = method.enclosingElement;
  -          if (enclosingClass.isDartCoreObject) continue;
  -          var id = MemberId.internal(methodName.text, className: cls.name);
  -          var offset =
  -              enclosingClass == cls ? method.nameOffset : cls.nameOffset;
  -          registerMember(id, offset, method, method.type);
  -        }
  +        registerMember(id, offset, executable, type);
         }
       }
     }
  
positive.code:   void computeForClass(Declaration node, Id id) {
      super.computeForClass(node, id);
      if (node is ClassDeclaration) {
        var cls = node.declaredElement;
  
        var getterNames = <Name>{};
        var setterNames = <Name>{};
        var methodNames = <Name>{};
  
        void collectMembers(InterfaceType type) {
          for (var element in type.accessors) {
            if (element.isGetter) {
              getterNames.add(Name(element));
            }
            if (element.isSetter) {
              setterNames.add(Name(element, isSetter: true));
            }
            var getter = element.declaration.correspondingGetter != null
                ? element.correspondingGetter
                : null;
            if (getter != null) {
              getterNames.add(Name(getter));
            }
            var setter = element.declaration.correspondingSetter != null
                ? element.correspondingSetter
                : null;
            if (setter != null) {
              setterNames.add(Name(setter, isSetter: true));
            }
          }
          for (var method in type.methods) {
            methodNames.add(Name(method));
          }
        }
  
        collectMembers(cls.thisType);
        for (var supertype in cls.allSupertypes) {
          collectMembers(supertype);
        }
  
        void registerMember(
            MemberId id, int offset, Object object, DartType type) {
  
negative.code: }
  
  class _InheritanceDataExtractor extends AstDataExtractor<String> {
    final inheritance = InheritanceManager3();
  
    _InheritanceDataExtractor(Uri uri, Map<Id, ActualData<String>> actualMap)
        : super(uri, actualMap);
  
  