Skip to content
This repository has been archived by the owner on Sep 24, 2020. It is now read-only.

Commit

Permalink
Fixed Issue #372 'False positive in "Convert to |= expression issue"'.
Browse files Browse the repository at this point in the history
  • Loading branch information
mkrueger committed Jan 21, 2014
1 parent e3d3917 commit 15473ce
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 0 deletions.
Expand Up @@ -80,6 +80,8 @@ public override void VisitIfElseStatement(IfElseStatement ifElseStatement)
if (initializer != null && target is IdentifierExpression && ((IdentifierExpression)target).Identifier != initializer.Name)
return;
var expr = match.Get<Expression>("condition").Single();
if (!ConvertIfToOrExpressionIssue.CheckTarget(target, expr))
return;
AddIssue(new CodeIssue(
ifElseStatement.IfToken,
ctx.TranslateString("Convert to '&&' expresssion"),
Expand All @@ -106,6 +108,8 @@ public override void VisitIfElseStatement(IfElseStatement ifElseStatement)
return;
} else {
var expr = match.Get<Expression>("condition").Single();
if (!ConvertIfToOrExpressionIssue.CheckTarget(target, expr))
return;
AddIssue(new CodeIssue(
ifElseStatement.IfToken,
ctx.TranslateString("Convert to '&=' expresssion"),
Expand Down
Expand Up @@ -43,6 +43,14 @@ protected override IGatherVisitor CreateVisitor(BaseRefactoringContext context)
return new GatherVisitor(context);
}

internal static bool CheckTarget(Expression target, Expression expr)
{
return !target.DescendantNodesAndSelf().Any(
n => (n is IdentifierExpression || n is MemberReferenceExpression) &&
expr.DescendantNodesAndSelf().Any(n2 => ((INode)n).IsMatch(n2))
);
}

class GatherVisitor : GatherVisitorBase<ConvertIfToOrExpressionIssue>
{
public GatherVisitor (BaseRefactoringContext ctx) : base (ctx)
Expand Down Expand Up @@ -83,6 +91,8 @@ public override void VisitIfElseStatement(IfElseStatement ifElseStatement)
if (initializer == null || !(target is IdentifierExpression) || ((IdentifierExpression)target).Identifier != initializer.Name)
return;
var expr = match.Get<Expression>("condition").Single();
if (!CheckTarget(target, expr))
return;
AddIssue(new CodeIssue(
ifElseStatement.IfToken,
ctx.TranslateString("Convert to '||' expresssion"),
Expand All @@ -103,6 +113,8 @@ public override void VisitIfElseStatement(IfElseStatement ifElseStatement)
return;
} else {
var expr = match.Get<Expression>("condition").Single();
if (!CheckTarget(target, expr))
return;
AddIssue(new CodeIssue(
ifElseStatement.IfToken,
ctx.TranslateString("Convert to '|=' expresssion"),
Expand Down
Expand Up @@ -111,6 +111,23 @@ int Bar(int o)
}");
}

[Test]
public void TestNullCheckBug ()
{
TestWrongContext<ConvertIfToOrExpressionIssue>(@"class Foo
{
public bool Enabled { get; set; }
int Bar(Foo fileChangeWatcher)
{
if (fileChangeWatcher != null)
fileChangeWatcher.Enabled = true;
}
}");
}



}
}

0 comments on commit 15473ce

Please sign in to comment.