Browse Source

anonymous types for VB.NET

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@3372 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Markus Palme 18 years ago
parent
commit
e7df280557
  1. 983
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs
  2. 17
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG
  3. 17
      src/Libraries/NRefactory/Test/Parser/Expressions/ObjectCreateExpressionTests.cs

983
src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs

File diff suppressed because it is too large Load Diff

17
src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG

@ -1938,17 +1938,18 @@ ObjectCreateExpression<out Expression oce> @@ -1938,17 +1938,18 @@ ObjectCreateExpression<out Expression oce>
oce = null;
bool canBeNormal; bool canBeReDim;
.) =
"New" NonArrayTypeName<out type, false>
["(" NormalOrReDimArgumentList<out arguments, out canBeNormal, out canBeReDim> ")"
[ IF (la.kind == Tokens.OpenParenthesis)
ArrayTypeModifiers<out dimensions>
CollectionInitializer<out initializer>
| CollectionInitializer<out initializer>
"New"
[ NonArrayTypeName<out type, false>
["(" NormalOrReDimArgumentList<out arguments, out canBeNormal, out canBeReDim> ")"
[ IF (la.kind == Tokens.OpenParenthesis)
ArrayTypeModifiers<out dimensions>
CollectionInitializer<out initializer>
| CollectionInitializer<out initializer>
]
(. if (canBeReDim && !canBeNormal && initializer == null) initializer = new CollectionInitializerExpression(); .)
]
(. if (canBeReDim && !canBeNormal && initializer == null) initializer = new CollectionInitializerExpression(); .)
]
(.
if (type == null) type = new TypeReference("Object"); // fallback type on parser errors
if (initializer == null) {
oce = new ObjectCreateExpression(type, arguments);
SetParent(arguments, oce);

17
src/Libraries/NRefactory/Test/Parser/Expressions/ObjectCreateExpressionTests.cs

@ -190,6 +190,21 @@ namespace ICSharpCode.NRefactory.Tests.Ast @@ -190,6 +190,21 @@ namespace ICSharpCode.NRefactory.Tests.Ast
#endregion
#region VB.NET
[Test]
public void VBNetAnonymousType()
{
ObjectCreateExpression oce = ParseUtilVBNet.ParseExpression<ObjectCreateExpression>(
"New With {.Id = 1, .Name= \"Bill Gates\" }");
Assert.IsTrue(oce.CreateType.IsNull);
Assert.AreEqual(0, oce.Parameters.Count);
Assert.AreEqual(2, oce.ObjectInitializer.CreateExpressions.Count);
Assert.IsInstanceOfType(typeof(PrimitiveExpression), CheckPropertyInitializationExpression(oce.ObjectInitializer.CreateExpressions[0], "Id"));
Assert.IsInstanceOfType(typeof(NamedArgumentExpression), oce.ObjectInitializer.CreateExpressions[1]);
}
[Test]
public void VBNetSimpleObjectCreateExpressionTest()
{
@ -221,7 +236,7 @@ namespace ICSharpCode.NRefactory.Tests.Ast @@ -221,7 +236,7 @@ namespace ICSharpCode.NRefactory.Tests.Ast
Assert.AreEqual("FirstName", ((NamedArgumentExpression)oce.ObjectInitializer.CreateExpressions[0]).Name);
Assert.AreEqual("LastName", ((NamedArgumentExpression)oce.ObjectInitializer.CreateExpressions[1]).Name);
Assert.IsInstanceOfType(typeof(PrimitiveExpression), ((NamedArgumentExpression)oce.ObjectInitializer.CreateExpressions[0]).Expression);
Assert.IsInstanceOfType(typeof(PrimitiveExpression), ((NamedArgumentExpression)oce.ObjectInitializer.CreateExpressions[1]).Expression);
}

Loading…
Cancel
Save