Browse Source

Fixed parsing of enum member declarations.

newNRvisualizers
Daniel Grunwald 15 years ago
parent
commit
d022808047
  1. 9
      ICSharpCode.NRefactory.Tests/CSharp/Parser/GeneralScope/TypeDeclarationTests.cs
  2. 2
      ICSharpCode.NRefactory.Tests/CSharp/Resolver/ResolverTestBase.cs
  3. 2
      ICSharpCode.NRefactory.Tests/ICSharpCode.NRefactory.Tests.csproj
  4. 8
      ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs

9
ICSharpCode.NRefactory.Tests/CSharp/Parser/GeneralScope/TypeDeclarationTests.cs

@ -272,5 +272,14 @@ public abstract class MyClass : MyBase, Interface1, My.Test.Interface2
Assert.AreEqual("N", ns.Name); Assert.AreEqual("N", ns.Name);
Assert.AreEqual("MyClass", ((TypeDeclaration)ns.Members.Single()).Name); Assert.AreEqual("MyClass", ((TypeDeclaration)ns.Members.Single()).Name);
} }
[Test]
public void EnumWithInitializer()
{
TypeDeclaration td = ParseUtilCSharp.ParseGlobal<TypeDeclaration>("enum MyEnum { Val1 = 10 }");
EnumMemberDeclaration member = (EnumMemberDeclaration)td.Members.Single();
Assert.AreEqual("Val1", member.Name);
Assert.AreEqual(10, ((PrimitiveExpression)member.Initializer).Value);
}
} }
} }

2
ICSharpCode.NRefactory.Tests/CSharp/Resolver/ResolverTestBase.cs

@ -171,7 +171,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
protected T Resolve<T>(string code) where T : ResolveResult protected T Resolve<T>(string code) where T : ResolveResult
{ {
ResolveResult rr = Resolve(code); ResolveResult rr = Resolve(code);
Assert.IsInstanceOf(typeof(T), rr); Assert.IsTrue(rr is T, "Resolve should be " + typeof(T).Name + ", but was " + (rr != null ? rr.GetType().Name : "null"));
return (T)rr; return (T)rr;
} }

2
ICSharpCode.NRefactory.Tests/ICSharpCode.NRefactory.Tests.csproj

@ -49,7 +49,7 @@
<ItemGroup> <ItemGroup>
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
<Reference Include="nunit.framework"> <Reference Include="nunit.framework">
<HintPath>..\lib\nunit.framework.dll</HintPath> <HintPath>..\..\Mono.Cecil\Test\libs\nunit-2.4.8\nunit.framework.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core"> <Reference Include="System.Core">

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

@ -369,17 +369,15 @@ namespace ICSharpCode.NRefactory.CSharp
public override void Visit (EnumMember em) public override void Visit (EnumMember em)
{ {
EnumMemberDeclaration newField = new EnumMemberDeclaration (); EnumMemberDeclaration newField = new EnumMemberDeclaration ();
VariableInitializer variable = new VariableInitializer (); // TODO: attributes, 'new' modifier
newField.AddChild (new Identifier (em.Name, Convert (em.Location)), AstNode.Roles.Identifier);
variable.AddChild (new Identifier (em.Name, Convert (em.Location)), AstNode.Roles.Identifier);
if (em.Initializer != null) { if (em.Initializer != null) {
var initializer = (Expression)em.Initializer.Accept (this); var initializer = (Expression)em.Initializer.Accept (this);
if (initializer != null) if (initializer != null)
variable.AddChild (initializer, EnumMemberDeclaration.InitializerRole); newField.AddChild (initializer, EnumMemberDeclaration.InitializerRole);
} }
newField.AddChild (variable, AstNode.Roles.Variable);
typeStack.Peek ().AddChild (newField, TypeDeclaration.MemberRole); typeStack.Peek ().AddChild (newField, TypeDeclaration.MemberRole);
} }
#endregion #endregion

Loading…
Cancel
Save