Browse Source

[CodeIssues] CompareBooleanWithTrueOrFalseIssue: check if the expression being compared is of boolean type

newNRvisualizers
Mansheng Yang 14 years ago
parent
commit
352dcce314
  1. 9
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CompareBooleanWithTrueOrFalseIssue.cs
  2. 16
      ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/CompareBooleanWithTrueOrFalseIssueTests.cs

9
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CompareBooleanWithTrueOrFalseIssue.cs

@ -27,6 +27,7 @@ @@ -27,6 +27,7 @@
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.NRefactory.PatternMatching;
using ICSharpCode.NRefactory.TypeSystem;
namespace ICSharpCode.NRefactory.CSharp.Refactoring
{
@ -67,13 +68,17 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -67,13 +68,17 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
var match = pattern.Match (binaryOperatorExpression);
if (!match.Success)
return;
var expr = match.Get<Expression> ("expr").First ();
// check if expr is of boolean type
var exprType = ctx.Resolve (expr).Type.GetDefinition ();
if (exprType == null || exprType.KnownTypeCode != KnownTypeCode.Boolean)
return;
AddIssue (binaryOperatorExpression, ctx.TranslateString ("Simplify boolean comparison"), scrpit => {
var expr = match.Get<Expression> ("expr").First ().Clone ();
var boolConstant = (bool)match.Get<PrimitiveExpression> ("const").First ().Value;
if ((binaryOperatorExpression.Operator == BinaryOperatorType.InEquality && boolConstant) ||
(binaryOperatorExpression.Operator == BinaryOperatorType.Equality && !boolConstant)) {
expr = new UnaryOperatorExpression (UnaryOperatorType.Not, expr);
expr = new UnaryOperatorExpression (UnaryOperatorType.Not, expr.Clone());
expr.AcceptVisitor (insertParenthesesVisitor);
}
scrpit.Replace (binaryOperatorExpression, expr);

16
ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/CompareBooleanWithTrueOrFalseIssueTests.cs

@ -63,7 +63,7 @@ class TestClass @@ -63,7 +63,7 @@ class TestClass
}
[Test]
public void TestInsertParenthese ()
public void TestInsertParentheses ()
{
var input = @"
class TestClass
@ -83,5 +83,19 @@ class TestClass @@ -83,5 +83,19 @@ class TestClass
}";
Test<CompareBooleanWithTrueOrFalseIssue> (input, 1, output);
}
[Test]
public void TestNullable ()
{
var input = @"
class TestClass
{
void TestMethod (bool? x)
{
var y = x == false;
}
}";
Test<CompareBooleanWithTrueOrFalseIssue> (input, 0);
}
}
}

Loading…
Cancel
Save