anchor.diff:    }
   
     void makeDartTypeRoundTrip(DartType node) {
  -    throw new UnimplementedError("makeDartTypeRoundTrip");
  +    Uri uri = lastSeenUri;
  +    int offset = lastSeenOffset;
  +
  +    String initial = writeNode(node, dartTypeSerializer, uri, offset);
  +
  +    // Do the round trip.
  +    DartType deserialized = readNode(initial, dartTypeSerializer, uri, offset);
  +    String serialized =
  +        writeNode(deserialized, dartTypeSerializer, uri, offset);
  +
  +    if (initial != serialized) {
  +      errors
  +          .add(new RoundTripMismatchFailure(initial, serialized, uri, offset));
  +    }
     }
   
     @override
  
positive.code: import '../text/text_reader.dart' show TextIterator;
  
  import '../text/text_serializer.dart'
      show expressionSerializer, initializeSerializers;
  
  import '../visitor.dart' show Visitor;
  
  
negative.code: 
    @override
    void visitNamedType(NamedType node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitSupertype(Supertype node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitName(Name node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitRedirectingFactoryConstructorReference(
        RedirectingFactoryConstructor node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitProcedureReference(Procedure node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitConstructorReference(Constructor node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitFieldReference(Field node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitTypeLiteralConstantReference(TypeLiteralConstant node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitTearOffConstantReference(TearOffConstant node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitPartialInstantiationConstantReference(
        PartialInstantiationConstant node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitInstanceConstantReference(InstanceConstant node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitListConstantReference(ListConstant node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitMapConstantReference(MapConstant node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitSymbolConstantReference(SymbolConstant node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitStringConstantReference(StringConstant node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitDoubleConstantReference(DoubleConstant node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitIntConstantReference(IntConstant node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitBoolConstantReference(BoolConstant node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitNullConstantReference(NullConstant node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitTypedefReference(Typedef node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitClassReference(Class node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitTypeLiteralConstant(TypeLiteralConstant node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitTearOffConstant(TearOffConstant node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitPartialInstantiationConstant(PartialInstantiationConstant node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitInstanceConstant(InstanceConstant node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitListConstant(ListConstant node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitMapConstant(MapConstant node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitSymbolConstant(SymbolConstant node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitStringConstant(StringConstant node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitDoubleConstant(DoubleConstant node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitIntConstant(IntConstant node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitBoolConstant(BoolConstant node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitNullConstant(NullConstant node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitTypedefType(TypedefType node) {
      storeLastSeenUriAndOffset(node);
      makeDartTypeRoundTrip(node);
    }
  
    @override
    void visitTypeParameterType(TypeParameterType node) {
      storeLastSeenUriAndOffset(node);
      makeDartTypeRoundTrip(node);
    }
  
    @override
    void visitFunctionType(FunctionType node) {
      storeLastSeenUriAndOffset(node);
      makeDartTypeRoundTrip(node);
    }
  
    @override
    void visitInterfaceType(InterfaceType node) {
      storeLastSeenUriAndOffset(node);
      makeDartTypeRoundTrip(node);
    }
  
    @override
    void visitBottomType(BottomType node) {
      storeLastSeenUriAndOffset(node);
      makeDartTypeRoundTrip(node);
    }
  
    @override
    void visitVoidType(VoidType node) {
      storeLastSeenUriAndOffset(node);
      makeDartTypeRoundTrip(node);
    }
  
    @override
    void visitDynamicType(DynamicType node) {
      storeLastSeenUriAndOffset(node);
      makeDartTypeRoundTrip(node);
    }
  
    @override
    void visitInvalidType(InvalidType node) {
      storeLastSeenUriAndOffset(node);
      makeDartTypeRoundTrip(node);
    }
  
    @override
    void visitComponent(Component node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitMapEntry(MapEntry node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitCatch(Catch node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitSwitchCase(SwitchCase node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitNamedExpression(NamedExpression node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitArguments(Arguments node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitFunctionNode(FunctionNode node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitTypeParameter(TypeParameter node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitTypedef(Typedef node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitLibraryPart(LibraryPart node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitCombinator(Combinator node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitLibraryDependency(LibraryDependency node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitLibrary(Library node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitAssertInitializer(AssertInitializer node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitLocalInitializer(LocalInitializer node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitRedirectingInitializer(RedirectingInitializer node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitSuperInitializer(SuperInitializer node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitFieldInitializer(FieldInitializer node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitInvalidInitializer(InvalidInitializer node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitClass(Class node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitRedirectingFactoryConstructor(RedirectingFactoryConstructor node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitField(Field node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitProcedure(Procedure node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitConstructor(Constructor node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitFunctionDeclaration(FunctionDeclaration node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitVariableDeclaration(VariableDeclaration node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitYieldStatement(YieldStatement node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitTryFinally(TryFinally node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitTryCatch(TryCatch node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitReturnStatement(ReturnStatement node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitIfStatement(IfStatement node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitContinueSwitchStatement(ContinueSwitchStatement node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitSwitchStatement(SwitchStatement node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitForInStatement(ForInStatement node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitForStatement(ForStatement node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitDoStatement(DoStatement node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitWhileStatement(WhileStatement node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitBreakStatement(BreakStatement node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitLabeledStatement(LabeledStatement node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitAssertStatement(AssertStatement node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitEmptyStatement(EmptyStatement node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitAssertBlock(AssertBlock node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitBlock(Block node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitExpressionStatement(ExpressionStatement node) {
      storeLastSeenUriAndOffset(node);
      node.visitChildren(this);
    }
  
    @override
    void visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitLoadLibrary(LoadLibrary node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitInstantiation(Instantiation node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitLet(Let node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitNullLiteral(NullLiteral node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitBoolLiteral(BoolLiteral node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitDoubleLiteral(DoubleLiteral node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitIntLiteral(IntLiteral node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitStringLiteral(StringLiteral node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitConstantExpression(ConstantExpression node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitFunctionExpression(FunctionExpression node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitAwaitExpression(AwaitExpression node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitMapLiteral(MapLiteral node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitSetLiteral(SetLiteral node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitListLiteral(ListLiteral node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitThrow(Throw node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitRethrow(Rethrow node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitThisExpression(ThisExpression node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitTypeLiteral(TypeLiteral node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitSymbolLiteral(SymbolLiteral node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitAsExpression(AsExpression node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitIsExpression(IsExpression node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitStringConcatenation(StringConcatenation node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitConditionalExpression(ConditionalExpression node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitLogicalExpression(LogicalExpression node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitNot(Not node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitConstructorInvocation(ConstructorInvocation node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitStaticInvocation(StaticInvocation node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitSuperMethodInvocation(SuperMethodInvocation node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitDirectMethodInvocation(DirectMethodInvocation node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitMethodInvocation(MethodInvocation node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitStaticSet(StaticSet node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitStaticGet(StaticGet node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitSuperPropertySet(SuperPropertySet node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitSuperPropertyGet(SuperPropertyGet node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitDirectPropertySet(DirectPropertySet node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitDirectPropertyGet(DirectPropertyGet node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitPropertySet(PropertySet node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitPropertyGet(PropertyGet node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitVariableSet(VariableSet node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitVariableGet(VariableGet node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  
    @override
    void visitInvalidExpression(InvalidExpression node) {
      storeLastSeenUriAndOffset(node);
      makeExpressionRoundTrip(node);
    }
  }
  