anchor.diff:      var constructorName = node.constructorName;
       var type = node.staticType;
       for (var constructor in _constructorsWithNonNullableArguments) {
  -      if (constructorName?.name?.name == constructor.name) {
  -        if (DartTypeUtilities.extendsClass(
  -            type, constructor.type, constructor.library)) {
  +      if (DartTypeUtilities.extendsClass(
  +          type, constructor.type, constructor.library)) {
  +        if (constructorName?.name?.name == constructor.name) {
             _checkNullArgForClosure(
                 node.argumentList, constructor.positional, constructor.named);
           }
  
positive.code:   final List<int> positional;
    final List<String> named;
  
    NonNullableFunction(this.library, this.type, this.name,
        {this.positional = const <int>[], this.named = const <String>[]});
  
    @override
    int get hashCode =>
        JenkinsSmiHash.hash3(library.hashCode, type.hashCode, name.hashCode);
  
    /// Two [NonNullableFunction] objects are equal if their [library], [type],
    /// and [name] are equal, for the purpose of discovering whether a function
    /// invocation is among a collection of non-nullable functions.
    @override
    bool operator ==(Object other) =>
        other is NonNullableFunction && other.hashCode == hashCode;
  }
  
  List<NonNullableFunction> _constructorsWithNonNullableArguments =
      <NonNullableFunction>[
    NonNullableFunction('dart.async', 'Future', null, positional: [0]),
    NonNullableFunction('dart.async', 'Future', 'microtask', positional: [0]),
    NonNullableFunction('dart.async', 'Future', 'sync', positional: [0]),
    NonNullableFunction('dart.async', 'Timer', null, positional: [1]),
    NonNullableFunction('dart.async', 'Timer', 'periodic', positional: [1]),
    NonNullableFunction('dart.core', 'List', 'generate', positional: [1]),
  ];
  
  List<NonNullableFunction> _staticFunctionsWithNonNullableArguments =
      <NonNullableFunction>[
    NonNullableFunction('dart.async', null, 'scheduleMicrotask', positional: [0]),
    NonNullableFunction('dart.async', 'Future', 'doWhile', positional: [0]),
    NonNullableFunction('dart.async', 'Future', 'forEach', positional: [1]),
    NonNullableFunction('dart.async', 'Future', 'wait', named: ['cleanUp']),
    NonNullableFunction('dart.async', 'Timer', 'run', positional: [0]),
  ];
  
  final Map<String, Set<NonNullableFunction>>
      _instanceMethodsWithNonNullableArguments = {
    'any': Set.of([
      NonNullableFunction('dart.core', 'Iterable', 'any', positional: [0]),
    ]),
    'complete': Set.of([
      NonNullableFunction('dart.async', 'Future', 'complete', positional: [0]),
    ]),
    'every': Set.of([
      NonNullableFunction('dart.core', 'Iterable', 'every', positional: [0]),
    ]),
    'expand': Set.of([
      NonNullableFunction('dart.core', 'Iterable', 'expand', positional: [0]),
    ]),
    'firstWhere': Set.of([
      NonNullableFunction('dart.core', 'Iterable', 'firstWhere',
          positional: [0], named: ['orElse']),
    ]),
    'forEach': Set.of([
      NonNullableFunction('dart.core', 'Iterable', 'forEach', positional: [0]),
      NonNullableFunction('dart.core', 'Map', 'forEach', positional: [0]),
    ]),
    'fold': Set.of([
      NonNullableFunction('dart.core', 'Iterable', 'fold', positional: [1]),
    ]),
    'lastWhere': Set.of([
      NonNullableFunction('dart.core', 'Iterable', 'lastWhere',
          positional: [0], named: ['orElse']),
    ]),
    'map': Set.of([
      NonNullableFunction('dart.core', 'Iterable', 'map', positional: [0]),
    ]),
    'putIfAbsent': Set.of([
      NonNullableFunction('dart.core', 'Map', 'putIfAbsent', positional: [1]),
    ]),
    'reduce': Set.of([
      NonNullableFunction('dart.core', 'Iterable', 'reduce', positional: [0]),
    ]),
    'removeWhere': Set.of([
      NonNullableFunction('dart.collection', 'Queue', 'removeWhere',
          positional: [0]),
      NonNullableFunction('dart.core', 'List', 'removeWhere', positional: [0]),
      NonNullableFunction('dart.core', 'Set', 'removeWhere', positional: [0]),
    ]),
    'replaceAllMapped': Set.of([
      NonNullableFunction('dart.core', 'String', 'replaceAllMapped',
          positional: [1]),
    ]),
    'replaceFirstMapped': Set.of([
      NonNullableFunction('dart.core', 'String', 'replaceFirstMapped',
          positional: [1]),
    ]),
    'retainWhere': Set.of([
      NonNullableFunction('dart.collection', 'Queue', 'retainWhere',
          positional: [0]),
      NonNullableFunction('dart.core', 'List', 'retainWhere', positional: [0]),
      NonNullableFunction('dart.core', 'Set', 'retainWhere', positional: [0]),
    ]),
    'singleWhere': Set.of([
      NonNullableFunction('dart.core', 'Iterable', 'singleWhere',
          positional: [0]),
    ]),
    'skipWhile': Set.of([
      NonNullableFunction('dart.core', 'Iterable', 'skipWhile', positional: [0]),
    ]),
    'splitMapJoin': Set.of([
      NonNullableFunction('dart.core', 'String', 'splitMapJoin',
          named: ['onMatch', 'onNonMatch']),
    ]),
    'takeWhile': Set.of([
      NonNullableFunction('dart.core', 'Iterable', 'takeWhile', positional: [0]),
    ]),
    'then': Set.of([
      NonNullableFunction('dart.async', 'Future', 'then',
          positional: [0], named: ['onError']),
    ]),
    'where': Set.of([
      NonNullableFunction('dart.core', 'Iterable', 'where', positional: [0]),
    ]),
  };
  
  class NullClosures extends LintRule implements NodeLintRule {
    NullClosures()
  
negative.code:     } else {
        // Instance method called, "target" is the instance.
        DartType targetType = target?.staticType;
        for (var method in _instanceMethodsWithNonNullableArguments) {
          if (DartTypeUtilities.implementsAnyInterface(
              targetType, [method.typeDefinition])) {
            if (methodName == method.name) {
              _checkNullArgForClosure(
                  node.argumentList, method.positional, method.named);
            }
          }
        }
      }
    }
  
    void _checkNullArgForClosure(
  