check method
void
check(
- DcqRegistry registry
)
Implementation
@override
void check(DcqRegistry registry) {
registry.addMethodDeclaration((node) {
if (node.name.lexeme != 'dispose') return;
final bodyNode = node.parent;
if (bodyNode is! BlockClassBody) return;
final classNode = bodyNode.parent;
if (classNode is! ClassDeclaration) return;
final superclass = classNode.extendsClause?.superclass;
if (superclass == null) return;
if (superclass.name.lexeme != 'State') return;
final classBody = classNode.body;
if (classBody is! BlockClassBody) return;
final lateFieldNames = <String>{};
for (final member in classBody.members) {
if (member is FieldDeclaration && member.fields.lateKeyword != null) {
for (final variable in member.fields.variables) {
lateFieldNames.add(variable.name.lexeme);
}
}
}
if (lateFieldNames.isEmpty) return;
final visitor = _DisposeCallVisitor(lateFieldNames);
node.accept(visitor);
for (final call in visitor.flaggedCalls) {
reportAtNode(call);
}
});
}