anchor.diff:        checkArgument(entry.value, vtype);
       }
       super.visitMapLiteral(node);
  +  }
  +
  +  @override
  +  void visitMapLiteral2(MapLiteral2 node) {
  +    DartType keyType = DynamicTypeImpl.instance;
  +    DartType valueType = DynamicTypeImpl.instance;
  +    if (node.typeArguments != null) {
  +      NodeList<TypeAnnotation> typeArguments = node.typeArguments.arguments;
  +      if (typeArguments.length > 0) {
  +        keyType = typeArguments[0].type;
  +      }
  +      if (typeArguments.length > 1) {
  +        valueType = typeArguments[1].type;
  +      }
  +    } else {
  +      DartType staticType = node.staticType;
  +      if (staticType is InterfaceType) {
  +        List<DartType> typeArguments = staticType.typeArguments;
  +        if (typeArguments != null) {
  +          if (typeArguments.length > 0) {
  +            keyType = typeArguments[0];
  +          }
  +          if (typeArguments.length > 1) {
  +            valueType = typeArguments[1];
  +          }
  +        }
  +      }
  +    }
  +    NodeList<MapElement> entries = node.entries;
  +    for (int i = 0; i < entries.length; i++) {
  +      checkMapElement(entries[i], keyType, valueType);
  +    }
  +    super.visitMapLiteral2(node);
     }
   
     @override
  
positive.code:   }
  
    @override
    void visitForEachStatement(ForEachStatement node) {
      var loopVariable = node.identifier ?? node.loopVariable?.identifier;
  
  
negative.code:   }
  
    @override
    visitSetLiteral(SetLiteral node) {
      if (node.typeArguments == null) {
        super.visitSetLiteral(node);
      }
    }
  
    @override
    visitSetLiteral2(SetLiteral2 node) {
      if (node.typeArguments == null) {
        super.visitSetLiteral2(node);
      }
    }
  
    @override
    visitSimpleIdentifier(SimpleIdentifier node) {
      validateIdentifierElement(node, node.staticElement);
    }
  