Browse Source

[CodeIssues] ParamaterCanBeDemotedIssue: Don't crash on parameters that aren't used.

newNRvisualizers
Simon Lindgren 13 years ago
parent
commit
6f2aed19b4
  1. 7
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ParameterCanBeDemotedIssue/ParameterCanBeDemotedIssue.cs
  2. 1
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ParameterCanBeDemotedIssue/TypeCriteriaCollector.cs
  3. 15
      ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ParameterCanBeDemotedIssue/ParameterCanBeDemotedTests.cs

7
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ParameterCanBeDemotedIssue/ParameterCanBeDemotedIssue.cs

@ -65,7 +65,11 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -65,7 +65,11 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
var variable = localResolveResult.Variable;
var currentType = localResolveResult.Type;
var candidateTypes = localResolveResult.Type.GetAllBaseTypes();
var possibleTypes = GetPossibleTypes(candidateTypes, collector.GetCriterion(variable));
var typeCriterion = collector.GetCriterion(variable);
if (typeCriterion == null)
// No usages in body
return;
var possibleTypes = GetPossibleTypes(candidateTypes, typeCriterion);
var suggestedTypes = possibleTypes.Where(t => t != currentType);
if (suggestedTypes.Any()) {
AddIssue(parameter, context.TranslateString("Parameter can be demoted to base class"),
@ -81,7 +85,6 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -81,7 +85,6 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
var message = string.Format("{0} '{1}'", context.TranslateString("Demote parameter to "), typeName);
yield return new CodeAction(message, script => {
script.Replace(parameter.Type, new SimpleType(typeName));
Console.WriteLine(message + "\t|\t" + typeName);
});
}
}

1
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ParameterCanBeDemotedIssue/TypeCriteriaCollector.cs

@ -62,7 +62,6 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -62,7 +62,6 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
if (!TypeCriteria.ContainsKey(variable))
TypeCriteria[variable] = new List<ITypeCriterion>();
TypeCriteria[variable].Add(new HasMemberCriterion(invocationResolveResult.Member));
}
class ConjunctionCriteria : ITypeCriterion

15
ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ParameterCanBeDemotedIssue/ParameterCanBeDemotedTests.cs

@ -78,6 +78,21 @@ class C @@ -78,6 +78,21 @@ class C
);
}
[Test]
public void IgnoresUnusedParameters()
{
var input = @"
class A
{
void F(A a1)
{
}
}";
TestRefactoringContext context;
var issues = GetIssues(new ParameterCanBeDemotedIssue(), input, out context);
Assert.AreEqual(0, issues.Count);
}
[Test]
public void InterfaceTest()
{

Loading…
Cancel
Save