diff --git a/ICSharpCode.NRefactory.CSharp/ICSharpCode.NRefactory.CSharp.csproj b/ICSharpCode.NRefactory.CSharp/ICSharpCode.NRefactory.CSharp.csproj
index b7f1737f48..03aaedc283 100644
--- a/ICSharpCode.NRefactory.CSharp/ICSharpCode.NRefactory.CSharp.csproj
+++ b/ICSharpCode.NRefactory.CSharp/ICSharpCode.NRefactory.CSharp.csproj
@@ -373,7 +373,6 @@
-
@@ -381,6 +380,7 @@
+
diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/SetterDoesNotUseValueParameterIssue.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ValueParameterUnusedIssue.cs
similarity index 71%
rename from ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/SetterDoesNotUseValueParameterIssue.cs
rename to ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ValueParameterUnusedIssue.cs
index 22bd546403..220d905b9c 100644
--- a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/SetterDoesNotUseValueParameterIssue.cs
+++ b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/ValueParameterUnusedIssue.cs
@@ -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 GetIssues(BaseRefactoringContext context)
{
@@ -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
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
}, 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"));
}
}
}
diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/SetterDoesNotUseValueParameterTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ValueParameterUnusedTests.cs
similarity index 75%
rename from ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/SetterDoesNotUseValueParameterTests.cs
rename to ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ValueParameterUnusedTests.cs
index e651db9b1f..83bfd35a5c 100644
--- a/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/SetterDoesNotUseValueParameterTests.cs
+++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeIssues/ValueParameterUnusedTests.cs
@@ -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
}
}";
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
}
}";
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
}
}";
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
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
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);
}
}
diff --git a/ICSharpCode.NRefactory.Tests/ICSharpCode.NRefactory.Tests.csproj b/ICSharpCode.NRefactory.Tests/ICSharpCode.NRefactory.Tests.csproj
index c584b2ef25..b9196ce2d0 100644
--- a/ICSharpCode.NRefactory.Tests/ICSharpCode.NRefactory.Tests.csproj
+++ b/ICSharpCode.NRefactory.Tests/ICSharpCode.NRefactory.Tests.csproj
@@ -271,13 +271,13 @@
-
+