Browse Source

Fixed conversion of "If(If(a,b,c),d,e)" from VB to C#.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@6064 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Daniel Grunwald 16 years ago
parent
commit
49379014d3
  1. 6
      src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs
  2. 8
      src/Libraries/NRefactory/Test/Output/CSharp/VBNetToCSharpConverterTest.cs
  3. 20
      src/Libraries/NRefactory/Test/Parser/Expressions/ConditionalExpressionTests.cs

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

@ -2903,7 +2903,11 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
public override object TrackedVisitConditionalExpression(ConditionalExpression conditionalExpression, object data) public override object TrackedVisitConditionalExpression(ConditionalExpression conditionalExpression, object data)
{ {
TrackVisit(conditionalExpression.Condition, data); if (conditionalExpression.Condition is ConditionalExpression) {
TrackedVisitParenthesizedExpression(new ParenthesizedExpression(conditionalExpression.Condition), data);
} else {
TrackVisit(conditionalExpression.Condition, data);
}
if (this.prettyPrintOptions.ConditionalOperatorBeforeConditionSpace) { if (this.prettyPrintOptions.ConditionalOperatorBeforeConditionSpace) {
outputFormatter.Space(); outputFormatter.Space();
} }

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

@ -778,5 +778,13 @@ static bool InitStaticVariableHelper(Microsoft.VisualBasic.CompilerServices.Stat
{ {
TestStatement("Dim x As Integer = CInt(obj)", "int x = Convert.ToInt32(obj);"); TestStatement("Dim x As Integer = CInt(obj)", "int x = Convert.ToInt32(obj);");
} }
[Test]
public void ConditionalExprPrecedence()
{
TestStatement("Dim x As Integer = If(If(a,b,c),d,e)", "int x = (a ? b : c) ? d : e;");
TestStatement("Dim x As Integer = If(a,If(b,c,d),e)", "int x = a ? b ? c : d : e;");
TestStatement("Dim x As Integer = If(a,b,If(c,d,e))", "int x = a ? b : c ? d : e;");
}
} }
} }

20
src/Libraries/NRefactory/Test/Parser/Expressions/ConditionalExpressionTests.cs

@ -88,6 +88,26 @@ namespace ICSharpCode.NRefactory.Tests.Ast
Assert.IsTrue(ce.TrueExpression is UnaryOperatorExpression); Assert.IsTrue(ce.TrueExpression is UnaryOperatorExpression);
Assert.IsTrue(ce.FalseExpression is PrimitiveExpression); Assert.IsTrue(ce.FalseExpression is PrimitiveExpression);
} }
[Test]
public void CSharpRepeatedConditionalExpr()
{
ConditionalExpression ce = ParseUtilCSharp.ParseExpression<ConditionalExpression>("a ? b : c ? d : e");
Assert.AreEqual("a", ((IdentifierExpression)ce.Condition).Identifier);
Assert.AreEqual("b", ((IdentifierExpression)ce.TrueExpression).Identifier);
Assert.IsTrue(ce.FalseExpression is ConditionalExpression);
}
[Test]
public void CSharpNestedConditionalExpr()
{
ConditionalExpression ce = ParseUtilCSharp.ParseExpression<ConditionalExpression>("a ? b ? c : d : e");
Assert.AreEqual("a", ((IdentifierExpression)ce.Condition).Identifier);
Assert.AreEqual("e", ((IdentifierExpression)ce.FalseExpression).Identifier);
Assert.IsTrue(ce.TrueExpression is ConditionalExpression);
}
#endregion #endregion
#region VB.NET #region VB.NET

Loading…
Cancel
Save