Browse Source

Fix #119: LocalVariableOnlyAssignedIssue does not recognize usage through unary operator expression

newNRvisualizers
Daniel Grunwald 13 years ago
parent
commit
75925d5aaf
  1. 4
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableOnlyAssignedIssues/LocalVariableOnlyAssignedIssue.cs
  2. 4
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableOnlyAssignedIssues/ParameterOnlyAssignedIssue.cs
  3. 5
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableOnlyAssignedIssues/VariableOnlyAssignedIssue.cs
  4. 20
      ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/LocalVariableOnlyAssignedIssueTests.cs

4
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableOnlyAssignedIssues/LocalVariableOnlyAssignedIssue.cs

@ -30,7 +30,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -30,7 +30,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
{
[IssueDescription ("Local variable is only assigned",
Description = "Local variable is assigned by its value is never used",
Description = "Local variable is assigned but its value is never used",
Category = IssueCategories.CodeQualityIssues,
Severity = Severity.Warning,
IssueMarker = IssueMarker.Underline)]
@ -62,7 +62,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -62,7 +62,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
if (!TestOnlyAssigned (ctx, decl.Parent, resolveResult.Variable))
return;
AddIssue (variableInitializer.NameToken,
ctx.TranslateString ("Local variable is assigned by its value is never used"));
ctx.TranslateString ("Local variable is assigned but its value is never used"));
}
}
}

4
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableOnlyAssignedIssues/ParameterOnlyAssignedIssue.cs

@ -28,7 +28,7 @@ using ICSharpCode.NRefactory.Semantics; @@ -28,7 +28,7 @@ using ICSharpCode.NRefactory.Semantics;
namespace ICSharpCode.NRefactory.CSharp.Refactoring
{
[IssueDescription ("Parameter is only assigned",
Description = "Parameter is assigned by its value is never used.",
Description = "Parameter is assigned but its value is never used.",
Category = IssueCategories.CodeQualityIssues,
Severity = Severity.Warning,
IssueMarker = IssueMarker.Underline)]
@ -60,7 +60,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -60,7 +60,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
return;
}
AddIssue(parameterDeclaration.NameToken,
ctx.TranslateString("Parameter is assigned by its value is never used"));
ctx.TranslateString("Parameter is assigned but its value is never used"));
}
}
}

5
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableOnlyAssignedIssues/VariableOnlyAssignedIssue.cs

@ -66,11 +66,16 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -66,11 +66,16 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
case UnaryOperatorType.Decrement:
case UnaryOperatorType.PostDecrement:
assignment = true;
if (!(parent.Parent is ExpressionStatement))
nonAssignment = true;
continue;
}
} else if (parent is DirectionExpression) {
if (((DirectionExpression)parent).FieldDirection == FieldDirection.Out) {
assignment = true;
// Using dummy variables is necessary for ignoring
// out-arguments, so we don't want to warn for those.
nonAssignment = true;
continue;
}
}

20
ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/LocalVariableOnlyAssignedIssueTests.cs

@ -85,13 +85,29 @@ class TestClass @@ -85,13 +85,29 @@ class TestClass
{
i = 1;
}
void TestMethod()
{
int tmp;
Test (out tmp);
}
}";
// should not warn because ignoring out-arguments is legitimate
Test<LocalVariableOnlyAssignedIssue> (input1, 0);
}
[Test]
public void TestIncrement ()
{
var input1 = @"
class TestClass
{
void TestMethod()
{
int i = 1;
Test (out i);
Test (i++);
}
}";
Test<LocalVariableOnlyAssignedIssue> (input1, 1);
Test<LocalVariableOnlyAssignedIssue> (input1, 0);
}
}
}

Loading…
Cancel
Save