Browse Source

Merge branch 'master' of git://github.com/icsharpcode/ILSpy into cust-attr

Conflicts:
	ICSharpCode.Decompiler/Tests/ICSharpCode.Decompiler.Tests.csproj
	NRefactory/ICSharpCode.NRefactory/ICSharpCode.NRefactory.csproj
newNRvisualizers
Artur Zgodziski 15 years ago
parent
commit
20ceef12b0
  1. 74
      ICSharpCode.NRefactory.Tests/CSharp/InsertParenthesesVisitorTests.cs
  2. 15
      ICSharpCode.NRefactory/CSharp/OutputVisitor/InsertParenthesesVisitor.cs
  3. 16
      ICSharpCode.NRefactory/CSharp/OutputVisitor/OutputVisitor.cs
  4. 4
      ICSharpCode.NRefactory/ICSharpCode.NRefactory.csproj

74
ICSharpCode.NRefactory.Tests/CSharp/InsertParenthesesVisitorTests.cs

@ -159,7 +159,7 @@ namespace ICSharpCode.NRefactory.CSharp
public void MethodCallOnQueryExpression() public void MethodCallOnQueryExpression()
{ {
Expression expr = new QueryExpression { Expression expr = new QueryExpression {
Clauses = new QueryClause[] { Clauses = {
new QueryFromClause { new QueryFromClause {
Identifier = "a", Identifier = "a",
Expression = new IdentifierExpression("b") Expression = new IdentifierExpression("b")
@ -178,7 +178,7 @@ namespace ICSharpCode.NRefactory.CSharp
public void SumOfQueries() public void SumOfQueries()
{ {
QueryExpression query = new QueryExpression { QueryExpression query = new QueryExpression {
Clauses = new QueryClause[] { Clauses = {
new QueryFromClause { new QueryFromClause {
Identifier = "a", Identifier = "a",
Expression = new IdentifierExpression("b") Expression = new IdentifierExpression("b")
@ -206,7 +206,7 @@ namespace ICSharpCode.NRefactory.CSharp
public void QueryInTypeTest() public void QueryInTypeTest()
{ {
Expression expr = new QueryExpression { Expression expr = new QueryExpression {
Clauses = new QueryClause[] { Clauses = {
new QueryFromClause { new QueryFromClause {
Identifier = "a", Identifier = "a",
Expression = new IdentifierExpression("b") Expression = new IdentifierExpression("b")
@ -252,5 +252,73 @@ namespace ICSharpCode.NRefactory.CSharp
Assert.AreEqual("(++a)++", InsertRequired(expr)); Assert.AreEqual("(++a)++", InsertRequired(expr));
Assert.AreEqual("(++a)++", InsertReadable(expr)); Assert.AreEqual("(++a)++", InsertReadable(expr));
} }
[Test]
public void Logical1()
{
Expression expr = new BinaryOperatorExpression(
new BinaryOperatorExpression(
new IdentifierExpression("a"),
BinaryOperatorType.ConditionalAnd,
new IdentifierExpression("b")
),
BinaryOperatorType.ConditionalAnd,
new IdentifierExpression("c")
);
Assert.AreEqual("a && b && c", InsertRequired(expr));
Assert.AreEqual("a && b && c", InsertReadable(expr));
}
[Test]
public void Logical2()
{
Expression expr = new BinaryOperatorExpression(
new IdentifierExpression("a"),
BinaryOperatorType.ConditionalAnd,
new BinaryOperatorExpression(
new IdentifierExpression("b"),
BinaryOperatorType.ConditionalAnd,
new IdentifierExpression("c")
)
);
Assert.AreEqual("a && (b && c)", InsertRequired(expr));
Assert.AreEqual("a && (b && c)", InsertReadable(expr));
}
[Test]
public void Logical3()
{
Expression expr = new BinaryOperatorExpression(
new IdentifierExpression("a"),
BinaryOperatorType.ConditionalOr,
new BinaryOperatorExpression(
new IdentifierExpression("b"),
BinaryOperatorType.ConditionalAnd,
new IdentifierExpression("c")
)
);
Assert.AreEqual("a || b && c", InsertRequired(expr));
Assert.AreEqual("a || (b && c)", InsertReadable(expr));
}
[Test]
public void Logical4()
{
Expression expr = new BinaryOperatorExpression(
new IdentifierExpression("a"),
BinaryOperatorType.ConditionalAnd,
new BinaryOperatorExpression(
new IdentifierExpression("b"),
BinaryOperatorType.ConditionalOr,
new IdentifierExpression("c")
)
);
Assert.AreEqual("a && (b || c)", InsertRequired(expr));
Assert.AreEqual("a && (b || c)", InsertReadable(expr));
}
} }
} }

15
ICSharpCode.NRefactory/CSharp/OutputVisitor/InsertParenthesesVisitor.cs

@ -186,7 +186,13 @@ namespace ICSharpCode.NRefactory.CSharp
} }
} else { } else {
if (InsertParenthesesForReadability && precedence < Equality) { if (InsertParenthesesForReadability && precedence < Equality) {
// In readable mode, boost the priority of the left-hand side if the operator
// there isn't the same as the operator on this expression.
if (GetBinaryOperatorType(binaryOperatorExpression.Left) == binaryOperatorExpression.Operator) {
ParenthesizeIfRequired(binaryOperatorExpression.Left, precedence);
} else {
ParenthesizeIfRequired(binaryOperatorExpression.Left, Equality); ParenthesizeIfRequired(binaryOperatorExpression.Left, Equality);
}
ParenthesizeIfRequired(binaryOperatorExpression.Right, Equality); ParenthesizeIfRequired(binaryOperatorExpression.Right, Equality);
} else { } else {
// all other binary operators are left-associative // all other binary operators are left-associative
@ -197,6 +203,15 @@ namespace ICSharpCode.NRefactory.CSharp
return base.VisitBinaryOperatorExpression(binaryOperatorExpression, data); return base.VisitBinaryOperatorExpression(binaryOperatorExpression, data);
} }
BinaryOperatorType? GetBinaryOperatorType(Expression expr)
{
BinaryOperatorExpression boe = expr as BinaryOperatorExpression;
if (boe != null)
return boe.Operator;
else
return null;
}
public override object VisitIsExpression(IsExpression isExpression, object data) public override object VisitIsExpression(IsExpression isExpression, object data)
{ {
if (InsertParenthesesForReadability) { if (InsertParenthesesForReadability) {

16
ICSharpCode.NRefactory/CSharp/OutputVisitor/OutputVisitor.cs

@ -462,7 +462,17 @@ namespace ICSharpCode.NRefactory.CSharp
else else
style = BraceStyle.EndOfLine; style = BraceStyle.EndOfLine;
OpenBrace(style); OpenBrace(style);
WriteCommaSeparatedList(arrayInitializerExpression.Children); bool isFirst = true;
foreach (AstNode node in arrayInitializerExpression.Children) {
if (isFirst) {
isFirst = false;
} else {
Comma(node);
NewLine();
}
node.AcceptVisitor(this, null);
}
NewLine();
CloseBrace(style); CloseBrace(style);
return EndNode(arrayInitializerExpression); return EndNode(arrayInitializerExpression);
} }
@ -566,7 +576,7 @@ namespace ICSharpCode.NRefactory.CSharp
WriteKeyword("checked"); WriteKeyword("checked");
LPar(); LPar();
Space(policy.WithinCheckedExpressionParantheses); Space(policy.WithinCheckedExpressionParantheses);
checkedExpression.AcceptVisitor(this, data); checkedExpression.Expression.AcceptVisitor(this, data);
Space(policy.WithinCheckedExpressionParantheses); Space(policy.WithinCheckedExpressionParantheses);
RPar(); RPar();
return EndNode(checkedExpression); return EndNode(checkedExpression);
@ -933,7 +943,7 @@ namespace ICSharpCode.NRefactory.CSharp
WriteKeyword("unchecked"); WriteKeyword("unchecked");
LPar(); LPar();
Space(policy.WithinCheckedExpressionParantheses); Space(policy.WithinCheckedExpressionParantheses);
uncheckedExpression.AcceptVisitor(this, data); uncheckedExpression.Expression.AcceptVisitor(this, data);
Space(policy.WithinCheckedExpressionParantheses); Space(policy.WithinCheckedExpressionParantheses);
RPar(); RPar();
return EndNode(uncheckedExpression); return EndNode(uncheckedExpression);

4
ICSharpCode.NRefactory/ICSharpCode.NRefactory.csproj

@ -340,10 +340,6 @@
<Compile Include="CSharp\Ast\Statements\DoWhileStatement.cs" /> <Compile Include="CSharp\Ast\Statements\DoWhileStatement.cs" />
<Compile Include="CSharp\Ast\Statements\YieldBreakStatement.cs" /> <Compile Include="CSharp\Ast\Statements\YieldBreakStatement.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="CSharp\" />
<Folder Include="CSharp\Ast\PatternMatching" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\Mono.Cecil\Mono.Cecil.csproj"> <ProjectReference Include="..\..\Mono.Cecil\Mono.Cecil.csproj">
<Project>{D68133BD-1E63-496E-9EDE-4FBDBF77B486}</Project> <Project>{D68133BD-1E63-496E-9EDE-4FBDBF77B486}</Project>

Loading…
Cancel
Save