Browse Source

Add NamedArgumentExpression; cleanup the AST a bit.

newNRvisualizers
Daniel Grunwald 15 years ago
parent
commit
8186996c40
  1. 31
      ICSharpCode.NRefactory.Tests/CSharp/AstStructureTest.cs
  2. 1
      ICSharpCode.NRefactory/CSharp/Ast/AstNode.cs
  3. 5
      ICSharpCode.NRefactory/CSharp/Ast/AstVisitor.cs
  4. 6
      ICSharpCode.NRefactory/CSharp/Ast/Expressions/AnonymousMethodExpression.cs
  5. 2
      ICSharpCode.NRefactory/CSharp/Ast/Expressions/ArrayCreateExpression.cs
  6. 2
      ICSharpCode.NRefactory/CSharp/Ast/Expressions/ConditionalExpression.cs
  7. 32
      ICSharpCode.NRefactory/CSharp/Ast/Expressions/NamedArgumentExpression.cs
  8. 1
      ICSharpCode.NRefactory/CSharp/Ast/Expressions/ParenthesizedExpression.cs
  9. 12
      ICSharpCode.NRefactory/CSharp/Ast/PrimitiveType.cs
  10. 8
      ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs
  11. 3
      ICSharpCode.NRefactory/ICSharpCode.NRefactory.csproj

31
ICSharpCode.NRefactory.Tests/CSharp/AstStructureTest.cs

@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under MIT X11 license (for details please see \doc\license.txt)
using System;
using System.Reflection;
using NUnit.Framework;
namespace ICSharpCode.NRefactory.CSharp
{
[TestFixture]
public class AstStructureTest
{
[Test]
public void RolesAreStaticReadOnly()
{
foreach (Type type in typeof(AstNode).Assembly.GetExportedTypes()) {
if (type.IsSubclassOf(typeof(AstNode))) {
foreach (FieldInfo field in type.GetFields()) {
if (field.FieldType.IsSubclassOf(typeof(Role))) {
Assert.IsTrue(field.IsPublic);
Assert.IsTrue(field.IsStatic);
Assert.IsTrue(field.IsInitOnly);
Assert.IsTrue(field.Name.EndsWith("Role", StringComparison.Ordinal));
Assert.IsNotNull(field.GetValue(null));
}
}
}
}
}
}
}

1
ICSharpCode.NRefactory/CSharp/Ast/AstNode.cs

@ -565,6 +565,7 @@ namespace ICSharpCode.NRefactory.CSharp @@ -565,6 +565,7 @@ namespace ICSharpCode.NRefactory.CSharp
public static readonly Role<CSharpTokenNode> Comma = new Role<CSharpTokenNode>("Comma", CSharpTokenNode.Null);
public static readonly Role<CSharpTokenNode> Semicolon = new Role<CSharpTokenNode>("Semicolon", CSharpTokenNode.Null);
public static readonly Role<CSharpTokenNode> Assign = new Role<CSharpTokenNode>("Assign", CSharpTokenNode.Null);
public static readonly Role<CSharpTokenNode> Colon = new Role<CSharpTokenNode>("Colon", CSharpTokenNode.Null);
public static readonly Role<Comment> Comment = new Role<Comment>("Comment");

5
ICSharpCode.NRefactory/CSharp/Ast/AstVisitor.cs

@ -508,5 +508,10 @@ namespace ICSharpCode.NRefactory.CSharp @@ -508,5 +508,10 @@ namespace ICSharpCode.NRefactory.CSharp
{
return VisitChildren (arrayInitializerExpression, data);
}
public virtual S VisitNamedArgumentExpression(NamedArgumentExpression namedArgumentExpression, T data)
{
return VisitChildren (namedArgumentExpression, data);
}
}
}

6
ICSharpCode.NRefactory/CSharp/Ast/Expressions/AnonymousMethodExpression.cs

@ -34,8 +34,6 @@ namespace ICSharpCode.NRefactory.CSharp @@ -34,8 +34,6 @@ namespace ICSharpCode.NRefactory.CSharp
/// </summary>
public class AnonymousMethodExpression : Expression
{
public static readonly Role<BlockStatement> BodyRole = new Role<BlockStatement>("Body", BlockStatement.Null);
// used to make a difference between delegate {} and delegate () {}
public bool HasParameterList {
get; set;
@ -47,8 +45,8 @@ namespace ICSharpCode.NRefactory.CSharp @@ -47,8 +45,8 @@ namespace ICSharpCode.NRefactory.CSharp
}
public BlockStatement Body {
get { return GetChildByRole (BodyRole); }
set { SetChildByRole (BodyRole, value); }
get { return GetChildByRole (Roles.Body); }
set { SetChildByRole (Roles.Body, value); }
}
public override S AcceptVisitor<T, S> (AstVisitor<T, S> visitor, T data)

2
ICSharpCode.NRefactory/CSharp/Ast/Expressions/ArrayCreateExpression.cs

@ -16,7 +16,7 @@ namespace ICSharpCode.NRefactory.CSharp @@ -16,7 +16,7 @@ namespace ICSharpCode.NRefactory.CSharp
set { SetChildByRole (Roles.Type, value); }
}
public IEnumerable<Expression> Dimensions {
public IEnumerable<Expression> Arguments {
get { return GetChildrenByRole (Roles.Argument); }
set { SetChildrenByRole (Roles.Argument, value); }
}

2
ICSharpCode.NRefactory/CSharp/Ast/Expressions/ConditionalExpression.cs

@ -34,7 +34,7 @@ namespace ICSharpCode.NRefactory.CSharp @@ -34,7 +34,7 @@ namespace ICSharpCode.NRefactory.CSharp
public readonly static Role<Expression> ConditionRole = Roles.Condition;
public readonly static Role<CSharpTokenNode> QuestionMarkRole = new Role<CSharpTokenNode>("QuestionMark", CSharpTokenNode.Null);
public readonly static Role<Expression> TrueRole = new Role<Expression>("True", Expression.Null);
public readonly static Role<CSharpTokenNode> ColonRole = new Role<CSharpTokenNode>("Colon", CSharpTokenNode.Null);
public readonly static Role<CSharpTokenNode> ColonRole = Roles.Colon;
public readonly static Role<Expression> FalseRole = new Role<Expression>("False", Expression.Null);
public Expression Condition {

32
ICSharpCode.NRefactory/CSharp/Ast/Expressions/NamedArgumentExpression.cs

@ -0,0 +1,32 @@ @@ -0,0 +1,32 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under MIT X11 license (for details please see \doc\license.txt)
using System;
namespace ICSharpCode.NRefactory.CSharp
{
/// <summary>
/// Represents a named argument passed to a method or attribute.
/// </summary>
public class NamedArgumentExpression : Expression
{
public string Identifier {
get {
return GetChildByRole (Roles.Identifier).Name;
}
set {
SetChildByRole(Roles.Identifier, new Identifier(value, AstLocation.Empty));
}
}
public Expression Expression {
get { return GetChildByRole (Roles.Expression); }
set { SetChildByRole (Roles.Expression, value); }
}
public override S AcceptVisitor<T, S>(AstVisitor<T, S> visitor, T data)
{
return visitor.VisitNamedArgumentExpression(this, data);
}
}
}

1
ICSharpCode.NRefactory/CSharp/Ast/Expressions/ParenthesizedExpression.cs

@ -30,6 +30,7 @@ namespace ICSharpCode.NRefactory.CSharp @@ -30,6 +30,7 @@ namespace ICSharpCode.NRefactory.CSharp
{
public Expression Expression {
get { return GetChildByRole (Roles.Expression); }
set { SetChildByRole (Roles.Expression, value); }
}
public override S AcceptVisitor<T, S> (AstVisitor<T, S> visitor, T data)

12
ICSharpCode.NRefactory/CSharp/Ast/PrimitiveType.cs

@ -32,6 +32,18 @@ namespace ICSharpCode.NRefactory.CSharp @@ -32,6 +32,18 @@ namespace ICSharpCode.NRefactory.CSharp
public class PrimitiveType : AstType
{
public string Keyword { get; set; }
public AstLocation Location { get; set; }
public override AstLocation StartLocation {
get {
return Location;
}
}
public override AstLocation EndLocation {
get {
return new AstLocation (Location.Line, Location.Column + Keyword != null ? Keyword.Length : 0);
}
}
public override S AcceptVisitor<T, S> (AstVisitor<T, S> visitor, T data)
{

8
ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs

@ -1398,6 +1398,7 @@ namespace ICSharpCode.NRefactory.CSharp @@ -1398,6 +1398,7 @@ namespace ICSharpCode.NRefactory.CSharp
public override object Visit (TypeExpression typeExpression)
{
var result = new PrimitiveType ();
result.Location = Convert (typeExpression.Location);
if (typeExpression.Type == TypeManager.void_type) {
result.Keyword = "void";
} else if (typeExpression.Type == TypeManager.string_type) {
@ -1429,9 +1430,6 @@ namespace ICSharpCode.NRefactory.CSharp @@ -1429,9 +1430,6 @@ namespace ICSharpCode.NRefactory.CSharp
} else {
throw new NotImplementedException();
}
if (result.Keyword != null) {
result.AddChild (new CSharpTokenNode (Convert (typeExpression.Location), result.Keyword.Length), PrimitiveType.Roles.Keyword);
}
return result;
}
@ -1927,9 +1925,9 @@ namespace ICSharpCode.NRefactory.CSharp @@ -1927,9 +1925,9 @@ namespace ICSharpCode.NRefactory.CSharp
if (arrayCreationExpression.Arguments != null) {
var commaLocations = LocationsBag.GetLocations (arrayCreationExpression.Arguments);
for (int i = 0 ;i < arrayCreationExpression.Arguments.Count; i++) {
result.AddChild ((Expression)arrayCreationExpression.Arguments[i].Accept (this), ObjectCreateExpression.Roles.Argument);
result.AddChild ((Expression)arrayCreationExpression.Arguments[i].Accept (this), ArrayCreateExpression.Roles.Argument);
if (commaLocations != null && i > 0)
result.AddChild (new CSharpTokenNode (Convert (commaLocations [commaLocations.Count - i]), 1), IndexerExpression.Roles.Comma);
result.AddChild (new CSharpTokenNode (Convert (commaLocations [commaLocations.Count - i]), 1), ArrayCreateExpression.Roles.Comma);
}
}
if (location != null)

3
ICSharpCode.NRefactory/ICSharpCode.NRefactory.csproj

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<PropertyGroup>
<ProjectGuid>{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}</ProjectGuid>
@ -80,6 +80,7 @@ @@ -80,6 +80,7 @@
<Compile Include="CSharp\Ast\Expressions\IsExpression.cs" />
<Compile Include="CSharp\Ast\Expressions\LambdaExpression.cs" />
<Compile Include="CSharp\Ast\Expressions\MemberReferenceExpression.cs" />
<Compile Include="CSharp\Ast\Expressions\NamedArgumentExpression.cs" />
<Compile Include="CSharp\Ast\Expressions\NullReferenceExpression.cs" />
<Compile Include="CSharp\Ast\Expressions\ObjectCreateExpression.cs" />
<Compile Include="CSharp\Ast\Expressions\ParenthesizedExpression.cs" />

Loading…
Cancel
Save