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>
oce = null; oce = null;
bool canBeNormal; bool canBeReDim; bool canBeNormal; bool canBeReDim;
.) = .) =
"New" NonArrayTypeName<out type, false> "New"
["(" NormalOrReDimArgumentList<out arguments, out canBeNormal, out canBeReDim> ")" [ NonArrayTypeName<out type, false>
[ IF (la.kind == Tokens.OpenParenthesis) ["(" NormalOrReDimArgumentList<out arguments, out canBeNormal, out canBeReDim> ")"
ArrayTypeModifiers<out dimensions> [ IF (la.kind == Tokens.OpenParenthesis)
CollectionInitializer<out initializer> ArrayTypeModifiers<out dimensions>
| CollectionInitializer<out initializer> 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) { if (initializer == null) {
oce = new ObjectCreateExpression(type, arguments); oce = new ObjectCreateExpression(type, arguments);
SetParent(arguments, oce); SetParent(arguments, oce);

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

@ -190,6 +190,21 @@ namespace ICSharpCode.NRefactory.Tests.Ast
#endregion #endregion
#region VB.NET #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] [Test]
public void VBNetSimpleObjectCreateExpressionTest() public void VBNetSimpleObjectCreateExpressionTest()
{ {
@ -221,7 +236,7 @@ namespace ICSharpCode.NRefactory.Tests.Ast
Assert.AreEqual("FirstName", ((NamedArgumentExpression)oce.ObjectInitializer.CreateExpressions[0]).Name); Assert.AreEqual("FirstName", ((NamedArgumentExpression)oce.ObjectInitializer.CreateExpressions[0]).Name);
Assert.AreEqual("LastName", ((NamedArgumentExpression)oce.ObjectInitializer.CreateExpressions[1]).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[0]).Expression);
Assert.IsInstanceOfType(typeof(PrimitiveExpression), ((NamedArgumentExpression)oce.ObjectInitializer.CreateExpressions[1]).Expression); Assert.IsInstanceOfType(typeof(PrimitiveExpression), ((NamedArgumentExpression)oce.ObjectInitializer.CreateExpressions[1]).Expression);
} }

Loading…
Cancel
Save