check method
void
check(
- DcqRegistry registry
)
Implementation
@override
void check(DcqRegistry registry) {
registry.addClassDeclaration((node) {
if (!isGetxControllerClass(node)) return;
final body = node.body;
if (body is! BlockClassBody) return;
// Collect field names that are disposed/closed in onClose.
final finder = _DisposeCallFinder();
for (final member in body.members) {
if (member is MethodDeclaration && member.name.lexeme == 'onClose') {
member.body.accept(finder);
}
}
// Check for fields whose type has a dispose() or close() method.
for (final member in body.members) {
if (member is! FieldDeclaration) continue;
for (final v in member.fields.variables) {
final type = v.declaredFragment?.element.type;
if (type is! InterfaceType) continue;
final lib = type.element.library;
final disposable =
type.lookUpMethod('dispose', lib) != null ||
type.lookUpMethod('close', lib) != null;
if (disposable && !finder.disposedFields.contains(v.name.lexeme)) {
reportAtToken(v.name);
}
}
}
});
}