check method
void
check(
- DcqRegistry registry
)
Implementation
@override
void check(DcqRegistry registry) {
var hasFlameImport = false;
registry.addImportDirective((node) {
final uri = node.uri.stringValue;
if (uri != null && uri.startsWith('package:flame/')) {
hasFlameImport = true;
}
});
final pendingNodes = <AstNode>[];
registry.addMethodDeclaration((node) {
if (node.name.lexeme != 'onMount') return;
// Collect late final field names from the enclosing class.
final classBody = node.parent;
if (classBody is! BlockClassBody) return;
final lateFinalNames = <String>{};
for (final member in classBody.members) {
if (member is FieldDeclaration &&
member.fields.isLate &&
member.fields.isFinal) {
for (final v in member.fields.variables) {
lateFinalNames.add(v.name.lexeme);
}
}
}
if (lateFinalNames.isEmpty) return;
final body = node.body;
if (body is! BlockFunctionBody) return;
body.accept(_LateFinalAssignmentVisitor(lateFinalNames, pendingNodes));
});
registry.afterLibrary(() {
if (!hasFlameImport) return;
for (final node in pendingNodes) {
reportAtNode(node);
}
});
}