diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CompareBooleanWithTrueOrFalseIssue.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CompareBooleanWithTrueOrFalseIssue.cs index 31db4ea97f..dd5431f058 100644 --- a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CompareBooleanWithTrueOrFalseIssue.cs +++ b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CompareBooleanWithTrueOrFalseIssue.cs @@ -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 var match = pattern.Match (binaryOperatorExpression); if (!match.Success) return; + var expr = match.Get ("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 ("expr").First ().Clone (); var boolConstant = (bool)match.Get ("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); diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/CompareBooleanWithTrueOrFalseIssueTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/CompareBooleanWithTrueOrFalseIssueTests.cs index b258a45aec..9212f3eb59 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/CompareBooleanWithTrueOrFalseIssueTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/CompareBooleanWithTrueOrFalseIssueTests.cs @@ -63,7 +63,7 @@ class TestClass } [Test] - public void TestInsertParenthese () + public void TestInsertParentheses () { var input = @" class TestClass @@ -83,5 +83,19 @@ class TestClass }"; Test (input, 1, output); } + + [Test] + public void TestNullable () + { + var input = @" +class TestClass +{ + void TestMethod (bool? x) + { + var y = x == false; + } +}"; + Test (input, 0); + } } }