From 8a9b312dcf5ee3148fe0e4f043246765c60f3f3d Mon Sep 17 00:00:00 2001 From: Gregor Pacnik Date: Mon, 24 Jun 2013 13:30:16 +1000 Subject: [PATCH] handle VB.Net Axis LINQ syntax to CS conversion with tests --- .../CSharp/CSharpOutputVisitor.cs | 32 ++++++++++++++++++- .../CSharp/VBNetToCSharpConverterTest.cs | 20 ++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs b/src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs index cbbf324e9d..cce25f8eb4 100644 --- a/src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs +++ b/src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs @@ -2400,7 +2400,37 @@ namespace ICSharpCode.NRefactory.PrettyPrinter outputFormatter.PrintToken(Tokens.CloseParenthesis); return null; } - + + public override object TrackedVisitXmlMemberAccessExpression(XmlMemberAccessExpression xmlMemberAccessExpression, object data) + { + xmlMemberAccessExpression.TargetObject.AcceptVisitor(this, data); + + switch (xmlMemberAccessExpression.AxisType) + { + case XmlAxisType.Element: + outputFormatter.PrintToken(Tokens.Dot); + outputFormatter.PrintText("Elements(\""); + outputFormatter.PrintText(xmlMemberAccessExpression.Identifier); + outputFormatter.PrintText("\")"); + break; + case XmlAxisType.Attribute: + outputFormatter.PrintToken(Tokens.Dot); + outputFormatter.PrintText("Attribute(\""); + outputFormatter.PrintText(xmlMemberAccessExpression.Identifier); + outputFormatter.PrintText("\").Value"); + break; + case XmlAxisType.Descendents: + outputFormatter.PrintToken(Tokens.Dot); + outputFormatter.PrintText("Descendants(\""); + outputFormatter.PrintText(xmlMemberAccessExpression.Identifier); + outputFormatter.PrintText("\")"); + break; + default: + throw new Exception("Invalid value for XmlAxisType"); + } + return null; + } + public override object TrackedVisitIdentifierExpression(IdentifierExpression identifierExpression, object data) { outputFormatter.PrintIdentifier(identifierExpression.Identifier); diff --git a/src/Libraries/NRefactory/Test/Output/CSharp/VBNetToCSharpConverterTest.cs b/src/Libraries/NRefactory/Test/Output/CSharp/VBNetToCSharpConverterTest.cs index b63df2ee0a..aebb178470 100644 --- a/src/Libraries/NRefactory/Test/Output/CSharp/VBNetToCSharpConverterTest.cs +++ b/src/Libraries/NRefactory/Test/Output/CSharp/VBNetToCSharpConverterTest.cs @@ -915,6 +915,26 @@ static bool InitStaticVariableHelper(Microsoft.VisualBasic.CompilerServices.Stat } + [Test] + public void XmlLINQDescendants() + { + TestStatement(@"Dim element = someXml...", + @"var element = someXml.Descendants(""somename"");"); + } + [Test] + public void XmlLINQElements() + { + TestStatement(@"Dim element = someXml.", + @"var element = someXml.Elements(""somename"");"); + } + + [Test] + public void XmlLINQAttribute() + { + TestStatement(@"Dim value = someXml.@attr", + @"var value = someXml.Attribute(""attr"").Value;"); + } + [Test] public void LinqQueryWhereSelect() {