anchor.diff:    final List<int> positional;
     final List<String> named;
   
  -  // Lazily instantiated, only when this function is found to be called.
  -  InterfaceTypeDefinition _typeDefinition;
  -
     NonNullableFunction(this.library, this.type, this.name,
         {this.positional = const <int>[], this.named = const <String>[]});
   
  -  InterfaceTypeDefinition get typeDefinition =>
  -      _typeDefinition ??= new InterfaceTypeDefinition(type, library);
  +  @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>[
  -  new NonNullableFunction('dart.async', 'Future', null, positional: [0]),
  -  new NonNullableFunction('dart.async', 'Future', 'microtask', positional: [0]),
  -  new NonNullableFunction('dart.async', 'Future', 'sync', positional: [0]),
  -  new NonNullableFunction('dart.async', 'Timer', null, positional: [1]),
  -  new NonNullableFunction('dart.async', 'Timer', 'periodic', positional: [1]),
  -  new NonNullableFunction('dart.core', 'List', 'generate', positional: [1]),
  +  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>[
  -  new NonNullableFunction('dart.async', null, 'scheduleMicrotask',
  -      positional: [0]),
  -  new NonNullableFunction('dart.async', 'Future', 'doWhile', positional: [0]),
  -  new NonNullableFunction('dart.async', 'Future', 'forEach', positional: [1]),
  -  new NonNullableFunction('dart.async', 'Future', 'wait', named: ['cleanUp']),
  -  new NonNullableFunction('dart.async', 'Timer', 'run', positional: [0]),
  +  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]),
   ];
   
  -List<NonNullableFunction> _instanceMethodsWithNonNullableArguments =
  -    <NonNullableFunction>[
  -  new NonNullableFunction('dart.async', 'Future', 'then',
  -      positional: [0], named: ['onError']),
  -  new NonNullableFunction('dart.async', 'Future', 'complete', positional: [0]),
  -  new NonNullableFunction('dart.collection', 'Queue', 'removeWhere',
  -      positional: [0]),
  -  new NonNullableFunction('dart.collection', 'Queue', 'retainWhere',
  -      positional: [0]),
  -  new NonNullableFunction('dart.core', 'Iterable', 'any', positional: [0]),
  -  new NonNullableFunction('dart.core', 'Iterable', 'every', positional: [0]),
  -  new NonNullableFunction('dart.core', 'Iterable', 'expand', positional: [0]),
  -  new NonNullableFunction('dart.core', 'Iterable', 'firstWhere',
  -      positional: [0], named: ['orElse']),
  -  new NonNullableFunction('dart.core', 'Iterable', 'forEach', positional: [0]),
  -  new NonNullableFunction('dart.core', 'Iterable', 'fold', positional: [1]),
  -  new NonNullableFunction('dart.core', 'Iterable', 'lastWhere',
  -      positional: [0], named: ['orElse']),
  -  new NonNullableFunction('dart.core', 'Iterable', 'map', positional: [0]),
  -  new NonNullableFunction('dart.core', 'Iterable', 'reduce', positional: [0]),
  -  new NonNullableFunction('dart.core', 'Iterable', 'singleWhere',
  -      positional: [0]),
  -  new NonNullableFunction('dart.core', 'Iterable', 'skipWhile',
  -      positional: [0]),
  -  new NonNullableFunction('dart.core', 'Iterable', 'takeWhile',
  -      positional: [0]),
  -  new NonNullableFunction('dart.core', 'Iterable', 'where', positional: [0]),
  -  new NonNullableFunction('dart.core', 'List', 'removeWhere', positional: [0]),
  -  new NonNullableFunction('dart.core', 'List', 'retainWhere', positional: [0]),
  -  new NonNullableFunction('dart.core', 'Map', 'forEach', positional: [0]),
  -  new NonNullableFunction('dart.core', 'Map', 'putIfAbsent', positional: [1]),
  -  new NonNullableFunction('dart.core', 'Set', 'removeWhere', positional: [0]),
  -  new NonNullableFunction('dart.core', 'Set', 'retainWhere', positional: [0]),
  -  new NonNullableFunction('dart.core', 'String', 'replaceAllMapped',
  -      positional: [1]),
  -  new NonNullableFunction('dart.core', 'String', 'replaceFirstMapped',
  -      positional: [1]),
  -  new NonNullableFunction('dart.core', 'String', 'splitMapJoin',
  -      named: ['onMatch', 'onNonMatch']),
  -];
  +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()
  
positive.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(
  
negative.code:     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)) {
            _checkNullArgForClosure(
                node.argumentList, constructor.positional, constructor.named);
          }
  