check method

  1. @override
void check(
  1. DcqRegistry registry
)

Implementation

@override
void check(DcqRegistry registry) {
  var hasTypedDataImport = false;

  registry.addImportDirective((node) {
    final uri = node.uri.stringValue;
    if (uri == 'dart:typed_data') {
      hasTypedDataImport = true;
    }
  });

  final pendingNodes = <AstNode>[];

  registry.addBinaryExpression((node) {
    if (node.operator.lexeme != '+') return;

    final leftType = node.leftOperand.staticType;
    if (leftType == null) return;

    if (_isByteListType(leftType)) {
      pendingNodes.add(node);
    }
  });

  registry.addMethodInvocation((node) {
    if (node.methodName.name != 'addAll') return;

    final targetType = node.target?.staticType;
    if (targetType == null) return;

    if (_isByteListType(targetType)) {
      pendingNodes.add(node);
    }
  });

  registry.afterLibrary(() {
    if (!hasTypedDataImport) return;
    for (final node in pendingNodes) {
      reportAtNode(node);
    }
  });
}