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 @@
<Compile Include="Refactoring\CodeActions\ImplementAbstractMembersAction.cs" /> <Compile Include="Refactoring\CodeActions\ImplementAbstractMembersAction.cs" />
<Compile Include="Refactoring\CodeActions\RemoveRedundantCatchTypeAction.cs" /> <Compile Include="Refactoring\CodeActions\RemoveRedundantCatchTypeAction.cs" />
<Compile Include="Refactoring\CodeActions\AddCatchTypeAction.cs" /> <Compile Include="Refactoring\CodeActions\AddCatchTypeAction.cs" />
<Compile Include="Refactoring\CodeIssues\SetterDoesNotUseValueParameterIssue.cs" />
<Compile Include="Refactoring\CodeIssues\IncorrectExceptionParameterOrderingIssue.cs" /> <Compile Include="Refactoring\CodeIssues\IncorrectExceptionParameterOrderingIssue.cs" />
<Compile Include="Refactoring\CodeIssues\CallToVirtualFunctionFromConstructorIssue.cs" /> <Compile Include="Refactoring\CodeIssues\CallToVirtualFunctionFromConstructorIssue.cs" />
<Compile Include="Refactoring\CodeActions\StaticMethodInvocationToExtensionMethodInvocationAction.cs" /> <Compile Include="Refactoring\CodeActions\StaticMethodInvocationToExtensionMethodInvocationAction.cs" />
@ -381,6 +380,7 @@
<Compile Include="Refactoring\CodeActions\IterateViaForeachAction.cs" /> <Compile Include="Refactoring\CodeActions\IterateViaForeachAction.cs" />
<Compile Include="Refactoring\CodeActions\ExtractFieldAction.cs" /> <Compile Include="Refactoring\CodeActions\ExtractFieldAction.cs" />
<Compile Include="Completion\ICompletionContextProvider.cs" /> <Compile Include="Completion\ICompletionContextProvider.cs" />
<Compile Include="Refactoring\CodeIssues\ValueParameterUnusedIssue.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\ICSharpCode.NRefactory\ICSharpCode.NRefactory.csproj"> <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;
namespace ICSharpCode.NRefactory.CSharp.Refactoring namespace ICSharpCode.NRefactory.CSharp.Refactoring
{ {
[IssueDescription("Property or indexer setter does 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 that do not use the value parameter.", Description = "Warns about property or indexer setters and event adders or removers that do not use the value parameter.",
Category = IssueCategories.CodeQualityIssues, Category = IssueCategories.CodeQualityIssues,
Severity = Severity.Warning)] Severity = Severity.Warning)]
public class SetterDoesNotUseValueParameterIssue : ICodeIssueProvider public class ValueParameterUnusedIssue : ICodeIssueProvider
{ {
public IEnumerable<CodeIssue> GetIssues(BaseRefactoringContext context) public IEnumerable<CodeIssue> GetIssues(BaseRefactoringContext context)
{ {
@ -47,21 +47,29 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
{ {
readonly BaseRefactoringContext context; readonly BaseRefactoringContext context;
public GatherVisitor(BaseRefactoringContext context, SetterDoesNotUseValueParameterIssue inspector) : base (context) public GatherVisitor(BaseRefactoringContext context, ValueParameterUnusedIssue inspector) : base (context)
{ {
this.context = context; this.context = context;
} }
public override void VisitIndexerDeclaration(IndexerDeclaration indexerDeclaration) public override void VisitIndexerDeclaration(IndexerDeclaration indexerDeclaration)
{ {
FindIssuesInNode(indexerDeclaration.Setter.Body); FindIssuesInNode(indexerDeclaration.Setter, indexerDeclaration.Setter.Body);
} }
public override void VisitPropertyDeclaration(PropertyDeclaration propertyDeclaration) public override void VisitPropertyDeclaration(PropertyDeclaration propertyDeclaration)
{ {
var body = propertyDeclaration.Setter.Body; var body = propertyDeclaration.Setter.Body;
if (!body.IsNull) 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; CompilationUnit compilationUnit;
@ -72,7 +80,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
base.VisitCompilationUnit(unit); base.VisitCompilationUnit(unit);
} }
void FindIssuesInNode(AstNode node) void FindIssuesInNode(AstNode anchor, AstNode node, string accessorName = "setter")
{ {
var variable = context.GetResolverStateBefore(node).LocalVariables var variable = context.GetResolverStateBefore(node).LocalVariables
.Where(v => v.Name == "value").FirstOrDefault(); .Where(v => v.Name == "value").FirstOrDefault();
@ -86,7 +94,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
}, CancellationToken.None); }, CancellationToken.None);
if(!referenceFound) 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;
namespace ICSharpCode.NRefactory.CSharp.CodeIssues namespace ICSharpCode.NRefactory.CSharp.CodeIssues
{ {
public class SetterDoesNotUseValueParameterTests : InspectionActionTestBase public class ValueParameterUnusedTests : InspectionActionTestBase
{ {
[Test] [Test]
public void TestPropertySetter() public void TestPropertySetter()
@ -50,7 +50,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeIssues
} }
}"; }";
TestRefactoringContext context; TestRefactoringContext context;
var issues = GetIssues(new SetterDoesNotUseValueParameterIssue(), input, out context); var issues = GetIssues(new ValueParameterUnusedIssue(), input, out context);
Assert.AreEqual(1, issues.Count); Assert.AreEqual(1, issues.Count);
} }
@ -66,10 +66,29 @@ namespace ICSharpCode.NRefactory.CSharp.CodeIssues
} }
}"; }";
TestRefactoringContext context; TestRefactoringContext context;
var issues = GetIssues(new SetterDoesNotUseValueParameterIssue(), input, out context); var issues = GetIssues(new ValueParameterUnusedIssue(), input, out context);
Assert.AreEqual(1, issues.Count); 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] [Test]
public void TestNonMatchingIndexerSetter() public void TestNonMatchingIndexerSetter()
{ {
@ -83,7 +102,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeIssues
} }
}"; }";
TestRefactoringContext context; TestRefactoringContext context;
var issues = GetIssues(new SetterDoesNotUseValueParameterIssue(), input, out context); var issues = GetIssues(new ValueParameterUnusedIssue(), input, out context);
Assert.AreEqual(0, issues.Count); Assert.AreEqual(0, issues.Count);
} }
@ -95,7 +114,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeIssues
string Property { set; } string Property { set; }
}"; }";
TestRefactoringContext context; TestRefactoringContext context;
var issues = GetIssues(new SetterDoesNotUseValueParameterIssue(), input, out context); var issues = GetIssues(new ValueParameterUnusedIssue(), input, out context);
Assert.AreEqual(0, issues.Count); Assert.AreEqual(0, issues.Count);
} }
@ -107,7 +126,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeIssues
string Property { get; } string Property { get; }
}"; }";
TestRefactoringContext context; TestRefactoringContext context;
var issues = GetIssues(new SetterDoesNotUseValueParameterIssue(), input, out context); var issues = GetIssues(new ValueParameterUnusedIssue(), input, out context);
Assert.AreEqual(0, issues.Count); Assert.AreEqual(0, issues.Count);
} }
} }

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

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

Loading…
Cancel
Save