Browse Source

corrected conversion of entity references

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/vbnet@6052 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Siegfried Pammer 15 years ago
parent
commit
6ee267417b
  1. 26
      src/Libraries/NRefactory/Project/Src/Visitors/VBNetConstructsConvertVisitor.cs
  2. 22
      src/Libraries/NRefactory/Test/Output/CSharp/VBNetToCSharpConverterTest.cs

26
src/Libraries/NRefactory/Project/Src/Visitors/VBNetConstructsConvertVisitor.cs

@ -533,25 +533,30 @@ namespace ICSharpCode.NRefactory.Visitors @@ -533,25 +533,30 @@ namespace ICSharpCode.NRefactory.Visitors
public override object VisitXmlContentExpression(XmlContentExpression xmlContentExpression, object data)
{
ObjectCreateExpression newNode = ConvertXmlContentExpression(xmlContentExpression);
Expression newNode = ConvertXmlContentExpression(xmlContentExpression);
if (newNode == null)
return base.VisitXmlContentExpression(xmlContentExpression, data);
ReplaceCurrentNode(newNode);
return base.VisitObjectCreateExpression(newNode, data);
if (newNode is ObjectCreateExpression)
return base.VisitObjectCreateExpression((ObjectCreateExpression)newNode, data);
else if (newNode is PrimitiveExpression)
return base.VisitPrimitiveExpression((PrimitiveExpression)newNode , data);
return null;
}
ObjectCreateExpression ConvertXmlContentExpression(XmlContentExpression xmlContentExpression)
Expression ConvertXmlContentExpression(XmlContentExpression xmlContentExpression)
{
ObjectCreateExpression newNode = null;
Expression newNode = null;
switch (xmlContentExpression.Type) {
case XmlContentType.Comment:
newNode = new ObjectCreateExpression(new TypeReference("XComment"), Expressions(xmlContentExpression.Content));
break;
case XmlContentType.Text:
newNode = new ObjectCreateExpression(new TypeReference("XText"), Expressions(xmlContentExpression.Content));
newNode = new PrimitiveExpression(ConvertEntities(xmlContentExpression.Content));
break;
case XmlContentType.CData:
newNode = new ObjectCreateExpression(new TypeReference("XCData"), Expressions(xmlContentExpression.Content));
@ -578,6 +583,15 @@ namespace ICSharpCode.NRefactory.Visitors @@ -578,6 +583,15 @@ namespace ICSharpCode.NRefactory.Visitors
return newNode;
}
string ConvertEntities(string content)
{
try {
return XElement.Parse("<Dummy>" + content + "</Dummy>").Value;
} catch (XmlException) {
return content;
}
}
public override object VisitXmlDocumentExpression(XmlDocumentExpression xmlDocumentExpression, object data)
{
var newNode = new ObjectCreateExpression(new TypeReference("XDocument"), null);
@ -608,7 +622,7 @@ namespace ICSharpCode.NRefactory.Visitors @@ -608,7 +622,7 @@ namespace ICSharpCode.NRefactory.Visitors
var a = attr as XmlAttributeExpression;
newNode.Parameters.Add(new ObjectCreateExpression(new TypeReference("XAttribute"), new List<Expression> {
new PrimitiveExpression(a.Name),
a.IsLiteralValue ? new PrimitiveExpression(a.LiteralValue) : a.ExpressionValue
a.IsLiteralValue ? new PrimitiveExpression(ConvertEntities(a.LiteralValue)) : a.ExpressionValue
}));
} else if (attr is XmlEmbeddedExpression) {
newNode.Parameters.Add((attr as XmlEmbeddedExpression).InlineVBExpression);

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

@ -811,21 +811,21 @@ static bool InitStaticVariableHelper(Microsoft.VisualBasic.CompilerServices.Stat @@ -811,21 +811,21 @@ static bool InitStaticVariableHelper(Microsoft.VisualBasic.CompilerServices.Stat
public void XmlNestedElement2()
{
TestStatement("Dim xml = <Test> <Test2 /> hello </Test>",
@"var xml = new XElement(""Test"", new XElement(""Test2""), new XText("" hello ""));");
@"var xml = new XElement(""Test"", new XElement(""Test2""), "" hello "");");
}
[Test]
public void XmlNestedElement3()
{
TestStatement("Dim xml = <Test> <Test2 a='b' /> hello </Test>",
@"var xml = new XElement(""Test"", new XElement(""Test2"", new XAttribute(""a"", ""b"")), new XText("" hello ""));");
@"var xml = new XElement(""Test"", new XElement(""Test2"", new XAttribute(""a"", ""b"")), "" hello "");");
}
[Test]
public void XmlNestedElement4()
{
TestStatement("Dim xml = <Test> <Test2 a='b' /> hello \t<![CDATA[any & <>]]></Test>",
@"var xml = new XElement(""Test"", new XElement(""Test2"", new XAttribute(""a"", ""b"")), new XText("" hello \t""), new XCData(""any & <>""));");
@"var xml = new XElement(""Test"", new XElement(""Test2"", new XAttribute(""a"", ""b"")), "" hello \t"", new XCData(""any & <>""));");
}
[Test]
@ -882,7 +882,7 @@ static bool InitStaticVariableHelper(Microsoft.VisualBasic.CompilerServices.Stat @@ -882,7 +882,7 @@ static bool InitStaticVariableHelper(Microsoft.VisualBasic.CompilerServices.Stat
public void XmlEmbeddedExpression()
{
TestStatement(@"Dim xml = <<%= name %>>Test</>",
@"var xml = new XElement(name, new XText(""Test""));");
@"var xml = new XElement(name, ""Test"");");
}
[Test]
@ -891,5 +891,19 @@ static bool InitStaticVariableHelper(Microsoft.VisualBasic.CompilerServices.Stat @@ -891,5 +891,19 @@ static bool InitStaticVariableHelper(Microsoft.VisualBasic.CompilerServices.Stat
TestStatement(@"Dim xml = <<%= name %>><%= content %></>",
@"var xml = new XElement(name, content);");
}
[Test]
public void XmlEntityReference()
{
TestStatement(@"Dim xml = <A b=""&quot;""/>",
@"var xml = new XElement(""A"", new XAttribute(""b"", ""\""""));");
}
[Test]
public void XmlEntityReference2()
{
TestStatement(@"Dim xml = <A>&quot;</A>",
@"var xml = new XElement(""A"", ""\"""");");
}
}
}

Loading…
Cancel
Save