anchor.diff:    @override
     DecoratedType visitSpreadElement(SpreadElement node) {
       final spreadType = node.expression.staticType;
  +    DecoratedType spreadTypeDecorated;
       if (_typeSystem.isSubtypeOf(spreadType, typeProvider.mapObjectObjectType)) {
         assert(_currentMapKeyType != null && _currentMapValueType != null);
         final expectedType = typeProvider.mapType2(
  
positive.code:           typeProvider, expectedType, _graph,
            typeArguments: [_currentMapKeyType, _currentMapValueType]);
  
        _handleAssignment(node.expression,
            destinationType: expectedDecoratedType);
      } else if (_typeSystem.isSubtypeOf(
          spreadType, typeProvider.iterableDynamicType)) {
  
negative.code:   /// value is non-null.
    ///
    /// Returns the decorated type of [expression].
    DecoratedType _checkExpressionNotNull(Expression expression,
        {DecoratedType sourceType}) {
      if (_isPrefix(expression)) {
        throw ArgumentError('cannot check non-nullability of a prefix');
      }
      sourceType ??= expression.accept(this);
      if (sourceType == null) {
        throw StateError('No type computed for ${expression.runtimeType} '
            '(${expression.toSource()}) offset=${expression.offset}');
  