check method

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

Implementation

@override
void check(DcqRegistry registry) {
  var hasProviderImport = false;
  registry.addImportDirective((node) {
    final uri = node.uri.stringValue;
    if (uri != null && uri.startsWith('package:provider/')) {
      hasProviderImport = true;
    }
  });

  final pendingNodes = <MethodInvocation>[];

  registry.addMethodInvocation((node) {
    final target = node.target;
    if (target is! SimpleIdentifier) return;
    if (target.name != 'Provider' &&
        target.name != 'ChangeNotifierProvider') {
      return;
    }
    if (node.methodName.name != 'of') return;

    // Verify the target resolves to the provider package.
    final targetType = target.staticType;
    if (targetType is InterfaceType &&
        !isTypeFromPackage(targetType, 'provider')) {
      return;
    }

    pendingNodes.add(node);
  });

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