From 9c4b29665dd82008405d76c5a5e0357ad422f6ad Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Wed, 13 Jul 2011 21:07:50 +0200 Subject: [PATCH] implemented AnonymousObjectCreationExpression --- .../AnonymousObjectCreationExpression.cs | 41 +++++++++++++++++++ .../ICSharpCode.NRefactory.VB/IAstVisitor.cs | 2 + .../ICSharpCode.NRefactory.VB.csproj | 1 + .../OutputVisitor/OutputVisitor.cs | 16 ++++++++ .../Visitors/CSharpToVBConverterVisitor.cs | 6 ++- 5 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 NRefactory/ICSharpCode.NRefactory.VB/Ast/Expressions/AnonymousObjectCreationExpression.cs diff --git a/NRefactory/ICSharpCode.NRefactory.VB/Ast/Expressions/AnonymousObjectCreationExpression.cs b/NRefactory/ICSharpCode.NRefactory.VB/Ast/Expressions/AnonymousObjectCreationExpression.cs new file mode 100644 index 000000000..98f7875a5 --- /dev/null +++ b/NRefactory/ICSharpCode.NRefactory.VB/Ast/Expressions/AnonymousObjectCreationExpression.cs @@ -0,0 +1,41 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using System.Collections.Generic; + +namespace ICSharpCode.NRefactory.VB.Ast +{ + public class AnonymousObjectCreationExpression : Expression + { + public AstNodeCollection Initializer { + get { return GetChildrenByRole(Roles.Expression); } + } + + public AnonymousObjectCreationExpression () + { + } + + public AnonymousObjectCreationExpression (IEnumerable initializer) + { + foreach (var ini in initializer) { + AddChild (ini, Roles.Expression); + } + } + + public AnonymousObjectCreationExpression (params Expression[] initializer) : this ((IEnumerable)initializer) + { + } + + public override S AcceptVisitor (IAstVisitor visitor, T data) + { + return visitor.VisitAnonymousObjectCreationExpression(this, data); + } + + protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + { + var o = other as AnonymousObjectCreationExpression; + return o != null && this.Initializer.DoMatch(o.Initializer, match); + } + } +} diff --git a/NRefactory/ICSharpCode.NRefactory.VB/IAstVisitor.cs b/NRefactory/ICSharpCode.NRefactory.VB/IAstVisitor.cs index 746e6fdc9..7b8b1401d 100644 --- a/NRefactory/ICSharpCode.NRefactory.VB/IAstVisitor.cs +++ b/NRefactory/ICSharpCode.NRefactory.VB/IAstVisitor.cs @@ -113,5 +113,7 @@ namespace ICSharpCode.NRefactory.VB { S VisitQueryExpression(QueryExpression queryExpression, T data); S VisitEmptyExpression(EmptyExpression emptyExpression, T data); + + S VisitAnonymousObjectCreationExpression(AnonymousObjectCreationExpression anonymousObjectCreationExpression, T data); } } diff --git a/NRefactory/ICSharpCode.NRefactory.VB/ICSharpCode.NRefactory.VB.csproj b/NRefactory/ICSharpCode.NRefactory.VB/ICSharpCode.NRefactory.VB.csproj index 7b97eb263..f5bf9db7a 100644 --- a/NRefactory/ICSharpCode.NRefactory.VB/ICSharpCode.NRefactory.VB.csproj +++ b/NRefactory/ICSharpCode.NRefactory.VB/ICSharpCode.NRefactory.VB.csproj @@ -48,6 +48,7 @@ + diff --git a/NRefactory/ICSharpCode.NRefactory.VB/OutputVisitor/OutputVisitor.cs b/NRefactory/ICSharpCode.NRefactory.VB/OutputVisitor/OutputVisitor.cs index 994eedd85..6b6139f10 100644 --- a/NRefactory/ICSharpCode.NRefactory.VB/OutputVisitor/OutputVisitor.cs +++ b/NRefactory/ICSharpCode.NRefactory.VB/OutputVisitor/OutputVisitor.cs @@ -2411,5 +2411,21 @@ namespace ICSharpCode.NRefactory.VB return EndNode(emptyExpression); } + + public object VisitAnonymousObjectCreationExpression(AnonymousObjectCreationExpression anonymousObjectCreationExpression, object data) + { + StartNode(anonymousObjectCreationExpression); + + WriteKeyword("New"); + WriteKeyword("With"); + + WriteToken("{", AnonymousObjectCreationExpression.Roles.LBrace); + Space(); + WriteCommaSeparatedList(anonymousObjectCreationExpression.Initializer); + Space(); + WriteToken("}", AnonymousObjectCreationExpression.Roles.RBrace); + + return EndNode(anonymousObjectCreationExpression); + } } } diff --git a/NRefactory/ICSharpCode.NRefactory.VB/Visitors/CSharpToVBConverterVisitor.cs b/NRefactory/ICSharpCode.NRefactory.VB/Visitors/CSharpToVBConverterVisitor.cs index 34f3e8693..d017f10e1 100644 --- a/NRefactory/ICSharpCode.NRefactory.VB/Visitors/CSharpToVBConverterVisitor.cs +++ b/NRefactory/ICSharpCode.NRefactory.VB/Visitors/CSharpToVBConverterVisitor.cs @@ -429,7 +429,11 @@ namespace ICSharpCode.NRefactory.VB.Visitors public AstNode VisitAnonymousTypeCreateExpression(CSharp.AnonymousTypeCreateExpression anonymousTypeCreateExpression, object data) { - throw new NotImplementedException(); + var expr = new AnonymousObjectCreationExpression(); + + ConvertNodes(anonymousTypeCreateExpression.Initializer, expr.Initializer); + + return EndNode(anonymousTypeCreateExpression, expr); } public AstNode VisitParenthesizedExpression(CSharp.ParenthesizedExpression parenthesizedExpression, object data)