Browse Source

[CodeActions] Rename SetterDoesNotUseValueParameterAction to ValueParameterUnusedAction and generalize it to include event accessors as well.

newNRvisualizers
Simon Lindgren 14 years ago
parent
commit
a546a8f7c1
  1. 2
      ICSharpCode.NRefactory.CSharp/ICSharpCode.NRefactory.CSharp.csproj
  2. 24
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ValueParameterUnusedIssue.cs
  3. 31
      ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ValueParameterUnusedTests.cs
  4. 2
      ICSharpCode.NRefactory.Tests/ICSharpCode.NRefactory.Tests.csproj

2
ICSharpCode.NRefactory.CSharp/ICSharpCode.NRefactory.CSharp.csproj

@ -373,7 +373,6 @@ @@ -373,7 +373,6 @@
<Compile Include="Refactoring\CodeActions\ImplementAbstractMembersAction.cs" />
<Compile Include="Refactoring\CodeActions\RemoveRedundantCatchTypeAction.cs" />
<Compile Include="Refactoring\CodeActions\AddCatchTypeAction.cs" />
<Compile Include="Refactoring\CodeIssues\SetterDoesNotUseValueParameterIssue.cs" />
<Compile Include="Refactoring\CodeIssues\IncorrectExceptionParameterOrderingIssue.cs" />
<Compile Include="Refactoring\CodeIssues\CallToVirtualFunctionFromConstructorIssue.cs" />
<Compile Include="Refactoring\CodeActions\StaticMethodInvocationToExtensionMethodInvocationAction.cs" />
@ -381,6 +380,7 @@ @@ -381,6 +380,7 @@
<Compile Include="Refactoring\CodeActions\IterateViaForeachAction.cs" />
<Compile Include="Refactoring\CodeActions\ExtractFieldAction.cs" />
<Compile Include="Completion\ICompletionContextProvider.cs" />
<Compile Include="Refactoring\CodeIssues\ValueParameterUnusedIssue.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ICSharpCode.NRefactory\ICSharpCode.NRefactory.csproj">

24
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/SetterDoesNotUseValueParameterIssue.cs → ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ValueParameterUnusedIssue.cs

@ -32,11 +32,11 @@ using System.Threading; @@ -32,11 +32,11 @@ using System.Threading;
namespace ICSharpCode.NRefactory.CSharp.Refactoring
{
[IssueDescription("Property or indexer setter does not use the value parameter",
Description = "Warns about property or indexer setters that do not use the value parameter.",
[IssueDescription("The value parameter is not used in a context where is should be",
Description = "Warns about property or indexer setters and event adders or removers that do not use the value parameter.",
Category = IssueCategories.CodeQualityIssues,
Severity = Severity.Warning)]
public class SetterDoesNotUseValueParameterIssue : ICodeIssueProvider
public class ValueParameterUnusedIssue : ICodeIssueProvider
{
public IEnumerable<CodeIssue> GetIssues(BaseRefactoringContext context)
{
@ -47,21 +47,29 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -47,21 +47,29 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
{
readonly BaseRefactoringContext context;
public GatherVisitor(BaseRefactoringContext context, SetterDoesNotUseValueParameterIssue inspector) : base (context)
public GatherVisitor(BaseRefactoringContext context, ValueParameterUnusedIssue inspector) : base (context)
{
this.context = context;
}
public override void VisitIndexerDeclaration(IndexerDeclaration indexerDeclaration)
{
FindIssuesInNode(indexerDeclaration.Setter.Body);
FindIssuesInNode(indexerDeclaration.Setter, indexerDeclaration.Setter.Body);
}
public override void VisitPropertyDeclaration(PropertyDeclaration propertyDeclaration)
{
var body = propertyDeclaration.Setter.Body;
if (!body.IsNull)
FindIssuesInNode(body);
FindIssuesInNode(propertyDeclaration.Setter, body);
}
public override void VisitCustomEventDeclaration(CustomEventDeclaration eventDeclaration)
{
var addAccessor = eventDeclaration.AddAccessor;
FindIssuesInNode(addAccessor, addAccessor.Body, "add accessor");
var removeAccessor = eventDeclaration.RemoveAccessor;
FindIssuesInNode(removeAccessor, removeAccessor.Body, "remove accessor");
}
CompilationUnit compilationUnit;
@ -72,7 +80,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -72,7 +80,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
base.VisitCompilationUnit(unit);
}
void FindIssuesInNode(AstNode node)
void FindIssuesInNode(AstNode anchor, AstNode node, string accessorName = "setter")
{
var variable = context.GetResolverStateBefore(node).LocalVariables
.Where(v => v.Name == "value").FirstOrDefault();
@ -86,7 +94,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -86,7 +94,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
}, CancellationToken.None);
if(!referenceFound)
AddIssue(node, context.TranslateString("The setter does not use the 'value' parameter"));
AddIssue(anchor, context.TranslateString("The " + accessorName + " does not use the 'value' parameter"));
}
}
}

31
ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/SetterDoesNotUseValueParameterTests.cs → ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ValueParameterUnusedTests.cs

@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.CSharp.CodeActions; @@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.CSharp.CodeActions;
namespace ICSharpCode.NRefactory.CSharp.CodeIssues
{
public class SetterDoesNotUseValueParameterTests : InspectionActionTestBase
public class ValueParameterUnusedTests : InspectionActionTestBase
{
[Test]
public void TestPropertySetter()
@ -50,7 +50,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeIssues @@ -50,7 +50,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeIssues
}
}";
TestRefactoringContext context;
var issues = GetIssues(new SetterDoesNotUseValueParameterIssue(), input, out context);
var issues = GetIssues(new ValueParameterUnusedIssue(), input, out context);
Assert.AreEqual(1, issues.Count);
}
@ -66,10 +66,29 @@ namespace ICSharpCode.NRefactory.CSharp.CodeIssues @@ -66,10 +66,29 @@ namespace ICSharpCode.NRefactory.CSharp.CodeIssues
}
}";
TestRefactoringContext context;
var issues = GetIssues(new SetterDoesNotUseValueParameterIssue(), input, out context);
var issues = GetIssues(new ValueParameterUnusedIssue(), input, out context);
Assert.AreEqual(1, issues.Count);
}
[Test]
public void TestMatchingEventAdder()
{
var input = @"class A
{
delegate void TestEventHandler ();
event TestEventHandler EventTested
{
add {
}
remove {
}
}
}";
TestRefactoringContext context;
var issues = GetIssues(new ValueParameterUnusedIssue(), input, out context);
Assert.AreEqual(2, issues.Count);
}
[Test]
public void TestNonMatchingIndexerSetter()
{
@ -83,7 +102,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeIssues @@ -83,7 +102,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeIssues
}
}";
TestRefactoringContext context;
var issues = GetIssues(new SetterDoesNotUseValueParameterIssue(), input, out context);
var issues = GetIssues(new ValueParameterUnusedIssue(), input, out context);
Assert.AreEqual(0, issues.Count);
}
@ -95,7 +114,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeIssues @@ -95,7 +114,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeIssues
string Property { set; }
}";
TestRefactoringContext context;
var issues = GetIssues(new SetterDoesNotUseValueParameterIssue(), input, out context);
var issues = GetIssues(new ValueParameterUnusedIssue(), input, out context);
Assert.AreEqual(0, issues.Count);
}
@ -107,7 +126,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeIssues @@ -107,7 +126,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeIssues
string Property { get; }
}";
TestRefactoringContext context;
var issues = GetIssues(new SetterDoesNotUseValueParameterIssue(), input, out context);
var issues = GetIssues(new ValueParameterUnusedIssue(), input, out context);
Assert.AreEqual(0, issues.Count);
}
}

2
ICSharpCode.NRefactory.Tests/ICSharpCode.NRefactory.Tests.csproj

@ -271,13 +271,13 @@ @@ -271,13 +271,13 @@
<Compile Include="CSharp\CodeActions\ImplementAbstractMembersTest.cs" />
<Compile Include="CSharp\CodeActions\RemoveRedundantCatchTypeTests.cs" />
<Compile Include="CSharp\CodeActions\AddCatchTypeTests.cs" />
<Compile Include="CSharp\CodeIssues\SetterDoesNotUseValueParameterTests.cs" />
<Compile Include="CSharp\CodeIssues\IncorrectExceptionParameterOrderingTests.cs" />
<Compile Include="CSharp\CodeIssues\CallToVirtualFunctionFromConstructorTests.cs" />
<Compile Include="CSharp\CodeActions\StaticMethodInvocationToExtensionMethodInvocationTests.cs" />
<Compile Include="CSharp\CodeActions\ExtensionMethodInvocationToStaticMethodInvocationTests.cs" />
<Compile Include="CSharp\CodeActions\IterateViaForeachTests.cs" />
<Compile Include="CSharp\CodeActions\ExtractFieldTests.cs" />
<Compile Include="CSharp\CodeIssues\ValueParameterUnusedTests.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Mono.Cecil\Mono.Cecil.csproj">

Loading…
Cancel
Save