Skip to content
This repository has been archived by the owner. It is now read-only.

Commit

Permalink
fix bug in RECS0099
Browse files Browse the repository at this point in the history
  • Loading branch information
siegfriedpammer committed Oct 30, 2015
1 parent 0ce3b73 commit 1936356
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 20 deletions.
Expand Up @@ -55,7 +55,7 @@ private static bool TryGetDiagnostic(SyntaxNodeAnalysisContext nodeContext, out
return false;

var method = parameter.Parent.Parent as MethodDeclarationSyntax;
if ((method == null) || (method.Body == null))
if (method == null || method.Body == null)
return false;

var dataFlow = nodeContext.SemanticModel.AnalyzeDataFlow(method.Body);
Expand All @@ -66,8 +66,10 @@ private static bool TryGetDiagnostic(SyntaxNodeAnalysisContext nodeContext, out
{
var expression = statement as ExpressionStatementSyntax;
var assignment = expression?.Expression as AssignmentExpressionSyntax;
if (assignment != null &&
(nodeContext.SemanticModel.GetSymbolInfo(assignment.Left).Symbol as IParameterSymbol)!= null)
if (assignment == null)
continue;
var symbol = nodeContext.SemanticModel.GetSymbolInfo(assignment.Left).Symbol as IParameterSymbol;
if (localParamSymbol.Equals(symbol))
{
diagnostic = Diagnostic.Create(descriptor, assignment.GetLocation());
return true;
Expand Down
43 changes: 26 additions & 17 deletions Tests/CSharp/Diagnostics/ParameterOnlyAssignedTests.cs
Expand Up @@ -9,66 +9,75 @@ public class ParameterOnlyAssignedTests : CSharpDiagnosticTestBase
[Test]
public void TestUnusedValue()
{
var input = @"
Analyze<ParameterOnlyAssignedAnalyzer>(@"
class TestClass
{
void TestMethod(int i)
{
$i = 1$;
}
}";

var output = @"
}", @"
class TestClass
{
void TestMethod(int i)
{
}
}";
Analyze<ParameterOnlyAssignedAnalyzer>(input,output);
}");
}

[Test]
public void TestUsedValue()
{
var input = @"
Analyze<ParameterOnlyAssignedAnalyzer>(@"
class TestClass
{
int TestMethod(int i)
{
i = 1;
return i;
}
}";
Analyze<ParameterOnlyAssignedAnalyzer>(input);
}");
}

[Test]
public void TestOutParametr()
public void TestOutParameter()
{
var input = @"
Analyze<ParameterOnlyAssignedAnalyzer>(@"
class TestClass
{
void TestMethod(out int i)
{
i = 1;
}
}";
Analyze<ParameterOnlyAssignedAnalyzer>(input);
}");
}

[Test]
public void TestRefParametr()
public void TestRefParameter()
{
var input = @"
Analyze<ParameterOnlyAssignedAnalyzer>(@"
class TestClass
{
void TestMethod(ref int i)
{
i = 1;
}
}";
Analyze<ParameterOnlyAssignedAnalyzer>(input);
}");
}

[Test]
public void TestMultipleParameters()
{
Analyze<ParameterOnlyAssignedAnalyzer>(@"
class TestClass
{
public static void TestMethod<T, T2, T3>(out T argument, ref T2 argument2, T3 argument3) where T : class where T2 : struct
{
argument = null;
argument2 = default(T2);
$argument3 = default(T3)$;
}
}");
}
}
}

0 comments on commit 1936356

Please sign in to comment.