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 @@ -2903,7 +2903,11 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
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) {
outputFormatter.Space();
}

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

@ -778,5 +778,13 @@ static bool InitStaticVariableHelper(Microsoft.VisualBasic.CompilerServices.Stat @@ -778,5 +778,13 @@ static bool InitStaticVariableHelper(Microsoft.VisualBasic.CompilerServices.Stat
{
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 @@ -88,6 +88,26 @@ namespace ICSharpCode.NRefactory.Tests.Ast
Assert.IsTrue(ce.TrueExpression is UnaryOperatorExpression);
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
#region VB.NET

Loading…
Cancel
Save