in lib/src/rules/public_member_api_docs.dart [308:370]
void _visitClassOrMixin(ClassOrMixinDeclaration node) {
if (isPrivate(node.name)) return;
check(node);
// Check methods
var getters = <String, MethodDeclaration>{};
var setters = <MethodDeclaration>[];
// Non-getters/setters.
var methods = <MethodDeclaration>[];
// Identify getter/setter pairs.
for (var member in node.members) {
if (member is MethodDeclaration && !isPrivate(member.name)) {
if (member.isGetter) {
getters[member.name.name] = member;
} else if (member.isSetter) {
setters.add(member);
} else {
methods.add(member);
}
}
}
// Check all getters, and collect offenders along the way.
var missingDocs = <MethodDeclaration>{};
for (var getter in getters.values) {
if (check(getter)) {
missingDocs.add(getter);
}
}
var declaredElement = node.declaredElement;
if (declaredElement == null) {
return;
}
// But only setters whose getter is missing a doc.
for (var setter in setters) {
var getter = getters[setter.name.name];
if (getter == null) {
var libraryUri = declaredElement.library.source.uri;
// Look for an inherited getter.
Element? getter = context.inheritanceManager.getMember(
declaredElement.thisType,
Name(libraryUri, setter.name.name),
);
if (getter is PropertyAccessorElement) {
if (getter.documentationComment != null) {
continue;
}
}
check(setter);
} else if (missingDocs.contains(getter)) {
check(setter);
}
}
// Check remaining methods.
methods.forEach(check);
}