Browse Source

add ArrayInitializerExpression and ObjectCreationExpression

newNRvisualizers
Siegfried Pammer 14 years ago
parent
commit
8cb9d38d40
  1. 53
      ICSharpCode.NRefactory.VB/Ast/Expressions/ArrayInitializerExpression.cs
  2. 47
      ICSharpCode.NRefactory.VB/Ast/Expressions/ObjectCreationExpression.cs
  3. 2
      ICSharpCode.NRefactory.VB/IAstVisitor.cs
  4. 1
      ICSharpCode.NRefactory.VB/ICSharpCode.NRefactory.VB.csproj
  5. 27
      ICSharpCode.NRefactory.VB/OutputVisitor/OutputVisitor.cs
  6. 7
      ICSharpCode.NRefactory.VB/Visitors/CSharpToVBConverterVisitor.cs

53
ICSharpCode.NRefactory.VB/Ast/Expressions/ArrayInitializerExpression.cs

@ -0,0 +1,53 @@ @@ -0,0 +1,53 @@
// 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;
namespace ICSharpCode.NRefactory.VB.Ast
{
/// <summary>
/// { Elements }
/// </summary>
public class ArrayInitializerExpression : Expression
{
#region Null
public new static readonly ArrayInitializerExpression Null = new NullArrayInitializerExpression ();
sealed class NullArrayInitializerExpression : ArrayInitializerExpression
{
public override bool IsNull {
get {
return true;
}
}
public override S AcceptVisitor<T, S> (IAstVisitor<T, S> visitor, T data)
{
return default (S);
}
protected internal override bool DoMatch(AstNode other, PatternMatching.Match match)
{
return other == null || other.IsNull;
}
}
#endregion
public readonly static Role<ArrayInitializerExpression> InitializerRole = new Role<ArrayInitializerExpression>("Initializer", ArrayInitializerExpression.Null);
public AstNodeCollection<Expression> Elements {
get { return GetChildrenByRole(Roles.Expression); }
}
public override S AcceptVisitor<T, S> (IAstVisitor<T, S> visitor, T data)
{
return visitor.VisitArrayInitializerExpression (this, data);
}
protected internal override bool DoMatch(AstNode other, PatternMatching.Match match)
{
ArrayInitializerExpression o = other as ArrayInitializerExpression;
return o != null && this.Elements.DoMatch(o.Elements, match);
}
}
}

47
ICSharpCode.NRefactory.VB/Ast/Expressions/ObjectCreationExpression.cs

@ -2,19 +2,58 @@ @@ -2,19 +2,58 @@
// 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
{
/// <summary>
/// New Type(Arguments) { Initializer }
/// </summary>
public class ObjectCreationExpression : Expression
{
protected internal override bool DoMatch(AstNode other, ICSharpCode.NRefactory.PatternMatching.Match match)
public readonly static Role<ArrayInitializerExpression> InitializerRole = ArrayInitializerExpression.InitializerRole;
public AstType Type {
get { return GetChildByRole (Roles.Type); }
set { SetChildByRole (Roles.Type, value); }
}
public AstNodeCollection<Expression> Arguments {
get { return GetChildrenByRole (Roles.Argument); }
}
public ArrayInitializerExpression Initializer {
get { return GetChildByRole (InitializerRole); }
set { SetChildByRole (InitializerRole, value); }
}
public ObjectCreationExpression()
{
}
public ObjectCreationExpression (AstType type, IEnumerable<Expression> arguments = null)
{
AddChild (type, Roles.Type);
if (arguments != null) {
foreach (var arg in arguments) {
AddChild (arg, Roles.Argument);
}
}
}
public ObjectCreationExpression (AstType type, params Expression[] arguments) : this (type, (IEnumerable<Expression>)arguments)
{
}
public override S AcceptVisitor<T, S> (IAstVisitor<T, S> visitor, T data)
{
throw new NotImplementedException();
return visitor.VisitObjectCreationExpression(this, data);
}
public override S AcceptVisitor<T, S>(IAstVisitor<T, S> visitor, T data)
protected internal override bool DoMatch(AstNode other, PatternMatching.Match match)
{
throw new NotImplementedException();
ObjectCreationExpression o = other as ObjectCreationExpression;
return o != null && this.Type.DoMatch(o.Type, match) && this.Arguments.DoMatch(o.Arguments, match) && this.Initializer.DoMatch(o.Initializer, match);
}
}
}

2
ICSharpCode.NRefactory.VB/IAstVisitor.cs

@ -58,6 +58,8 @@ namespace ICSharpCode.NRefactory.VB { @@ -58,6 +58,8 @@ namespace ICSharpCode.NRefactory.VB {
S VisitAssignmentExpression(AssignmentExpression assignmentExpression, T data);
S VisitIdentifierExpression(IdentifierExpression identifierExpression, T data);
S VisitInvocationExpression(InvocationExpression invocationExpression, T data);
S VisitArrayInitializerExpression(ArrayInitializerExpression arrayInitializerExpression, T data);
S VisitObjectCreationExpression(ObjectCreationExpression objectCreationExpression, T data);
// Statement scope
S VisitLabelDeclarationStatement(LabelDeclarationStatement labelDeclarationStatement, T data);

1
ICSharpCode.NRefactory.VB/ICSharpCode.NRefactory.VB.csproj

@ -48,6 +48,7 @@ @@ -48,6 +48,7 @@
<Compile Include="Ast\AstNodeCollection.cs" />
<Compile Include="Ast\Enums.cs" />
<Compile Include="Ast\Expressions\AddressOfExpression.cs" />
<Compile Include="Ast\Expressions\ArrayInitializerExpression.cs" />
<Compile Include="Ast\Expressions\Expression.cs" />
<Compile Include="Ast\Expressions\GetTypeExpression.cs" />
<Compile Include="Ast\Expressions\GetXmlNamespaceExpression.cs" />

27
ICSharpCode.NRefactory.VB/OutputVisitor/OutputVisitor.cs

@ -494,7 +494,9 @@ namespace ICSharpCode.NRefactory.VB @@ -494,7 +494,9 @@ namespace ICSharpCode.NRefactory.VB
WriteCommaSeparatedListInParenthesis(constructorDeclaration.Parameters, false);
NewLine();
// TODO Body
Indent();
WriteBlock(constructorDeclaration.Body);
Unindent();
WriteKeyword("End");
WriteKeyword("Sub");
@ -1578,5 +1580,28 @@ namespace ICSharpCode.NRefactory.VB @@ -1578,5 +1580,28 @@ namespace ICSharpCode.NRefactory.VB
WriteCommaSeparatedListInParenthesis(invocationExpression.Arguments, false);
return EndNode(invocationExpression);
}
public object VisitArrayInitializerExpression(ArrayInitializerExpression arrayInitializerExpression, object data)
{
StartNode(arrayInitializerExpression);
WriteToken("{", ArrayInitializerExpression.Roles.LBrace);
Space();
WriteCommaSeparatedList(arrayInitializerExpression.Elements);
Space();
WriteToken("}", ArrayInitializerExpression.Roles.RBrace);
return EndNode(arrayInitializerExpression);
}
public object VisitObjectCreationExpression(ObjectCreationExpression objectCreationExpression, object data)
{
StartNode(objectCreationExpression);
WriteKeyword("New");
objectCreationExpression.Type.AcceptVisitor(this, data);
WriteCommaSeparatedListInParenthesis(objectCreationExpression.Arguments, false);
objectCreationExpression.Initializer.AcceptVisitor(this, data);
return EndNode(objectCreationExpression);
}
}
}

7
ICSharpCode.NRefactory.VB/Visitors/CSharpToVBConverterVisitor.cs

@ -269,7 +269,12 @@ namespace ICSharpCode.NRefactory.VB.Visitors @@ -269,7 +269,12 @@ namespace ICSharpCode.NRefactory.VB.Visitors
public AstNode VisitObjectCreateExpression(CSharp.ObjectCreateExpression objectCreateExpression, object data)
{
throw new NotImplementedException();
var expr = new ObjectCreationExpression((AstType)objectCreateExpression.Type.AcceptVisitor(this, data));
ConvertNodes(objectCreateExpression.Arguments, expr.Arguments);
if (!objectCreateExpression.Initializer.IsNull)
expr.Initializer = (ArrayInitializerExpression)objectCreateExpression.Initializer.AcceptVisitor(this, data);
return EndNode(objectCreateExpression, expr);
}
public AstNode VisitAnonymousTypeCreateExpression(CSharp.AnonymousTypeCreateExpression anonymousTypeCreateExpression, object data)

Loading…
Cancel
Save