Skip to content
This repository was archived by the owner on Oct 16, 2020. It is now read-only.

Commit 8a9b312

Browse files
committed
handle VB.Net Axis LINQ syntax to CS conversion with tests
1 parent 89dc154 commit 8a9b312

2 files changed

Lines changed: 51 additions & 1 deletion

File tree

src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2400,7 +2400,37 @@ public override object TrackedVisitInvocationExpression(InvocationExpression inv
24002400
outputFormatter.PrintToken(Tokens.CloseParenthesis);
24012401
return null;
24022402
}
2403-
2403+
2404+
public override object TrackedVisitXmlMemberAccessExpression(XmlMemberAccessExpression xmlMemberAccessExpression, object data)
2405+
{
2406+
xmlMemberAccessExpression.TargetObject.AcceptVisitor(this, data);
2407+
2408+
switch (xmlMemberAccessExpression.AxisType)
2409+
{
2410+
case XmlAxisType.Element:
2411+
outputFormatter.PrintToken(Tokens.Dot);
2412+
outputFormatter.PrintText("Elements(\"");
2413+
outputFormatter.PrintText(xmlMemberAccessExpression.Identifier);
2414+
outputFormatter.PrintText("\")");
2415+
break;
2416+
case XmlAxisType.Attribute:
2417+
outputFormatter.PrintToken(Tokens.Dot);
2418+
outputFormatter.PrintText("Attribute(\"");
2419+
outputFormatter.PrintText(xmlMemberAccessExpression.Identifier);
2420+
outputFormatter.PrintText("\").Value");
2421+
break;
2422+
case XmlAxisType.Descendents:
2423+
outputFormatter.PrintToken(Tokens.Dot);
2424+
outputFormatter.PrintText("Descendants(\"");
2425+
outputFormatter.PrintText(xmlMemberAccessExpression.Identifier);
2426+
outputFormatter.PrintText("\")");
2427+
break;
2428+
default:
2429+
throw new Exception("Invalid value for XmlAxisType");
2430+
}
2431+
return null;
2432+
}
2433+
24042434
public override object TrackedVisitIdentifierExpression(IdentifierExpression identifierExpression, object data)
24052435
{
24062436
outputFormatter.PrintIdentifier(identifierExpression.Identifier);

src/Libraries/NRefactory/Test/Output/CSharp/VBNetToCSharpConverterTest.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -915,6 +915,26 @@ public void XmlEntityReference2()
915915
}
916916

917917

918+
[Test]
919+
public void XmlLINQDescendants()
920+
{
921+
TestStatement(@"Dim element = someXml...<somename>",
922+
@"var element = someXml.Descendants(""somename"");");
923+
}
924+
[Test]
925+
public void XmlLINQElements()
926+
{
927+
TestStatement(@"Dim element = someXml.<somename>",
928+
@"var element = someXml.Elements(""somename"");");
929+
}
930+
931+
[Test]
932+
public void XmlLINQAttribute()
933+
{
934+
TestStatement(@"Dim value = someXml.@attr",
935+
@"var value = someXml.Attribute(""attr"").Value;");
936+
}
937+
918938
[Test]
919939
public void LinqQueryWhereSelect()
920940
{

0 commit comments

Comments
 (0)