List<Method> inheritedMethods

Source

List<Method> get inheritedMethods {
  if (_inheritedMethods != null) return _inheritedMethods;

  Map<String, ExecutableElement> cmap =
      library.inheritanceManager.getMembersInheritedFromClasses(element);
  Map<String, ExecutableElement> imap =
      library.inheritanceManager.getMembersInheritedFromInterfaces(element);

  // remove methods that exist on this class
  _methods.forEach((method) {
    cmap.remove(method.name);
    imap.remove(method.name);
  });

  _inheritedMethods = [];
  List<ExecutableElement> values = [];
  Set<String> uniqueNames = new Set();

  instanceProperties.forEach((f) {
    if (f._setter != null) uniqueNames.add(f._setter.name);
    if (f._getter != null) uniqueNames.add(f._getter.name);
  });

  for (String key in cmap.keys) {
    // XXX: if we care about showing a hierarchy with our inherited methods,
    // then don't do this
    if (uniqueNames.contains(key)) continue;

    uniqueNames.add(key);
    values.add(cmap[key]);
  }

  for (String key in imap.keys) {
    // XXX: if we care about showing a hierarchy with our inherited methods,
    // then don't do this
    if (uniqueNames.contains(key)) continue;

    uniqueNames.add(key);
    values.add(imap[key]);
  }

  for (ExecutableElement value in values) {
    if (value != null &&
        value is MethodElement &&
        isPublic(value) &&
        !value.isOperator &&
        value.enclosingElement != null) {
      if (!package.isDocumented(value.enclosingElement)) {
        Method m =
            new ModelElement.from(value, library, enclosingClass: this);
        _inheritedMethods.add(m);
        _genPageMethods.add(m);
      } else {
        _inheritedMethods
            .add(new ModelElement.from(value, library, enclosingClass: this));
      }
    }
  }

  _inheritedMethods.sort(byName);

  return _inheritedMethods;
}