check method

  1. @override
void check(
  1. 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);
    }
  });
}