Browse Source

Replace FindReferences with LocalReferenceFinder in {Variable,Parameter}OnlyAssignedIssue.

Simon Lindgren 14 years ago
parent
commit
6ec44d10d5
  1. 13
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableOnlyAssignedIssues/LocalVariableOnlyAssignedIssue.cs
  2. 13
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableOnlyAssignedIssues/ParameterOnlyAssignedIssue.cs
  3. 18
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableOnlyAssignedIssues/VariableOnlyAssignedIssue.cs

13
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableOnlyAssignedIssues/LocalVariableOnlyAssignedIssue.cs

@ -36,19 +36,18 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
IssueMarker = IssueMarker.Underline)] IssueMarker = IssueMarker.Underline)]
public class LocalVariableOnlyAssignedIssue : VariableOnlyAssignedIssue public class LocalVariableOnlyAssignedIssue : VariableOnlyAssignedIssue
{ {
internal override GatherVisitorBase GetGatherVisitor (BaseRefactoringContext ctx, SyntaxTree unit) internal override GatherVisitorBase GetGatherVisitor (BaseRefactoringContext ctx)
{ {
return new GatherVisitor (ctx, unit); return new GatherVisitor (ctx);
} }
class GatherVisitor : GatherVisitorBase class GatherVisitor : GatherVisitorBase
{ {
SyntaxTree unit; LocalReferenceFinder referenceFinder;
public GatherVisitor (BaseRefactoringContext ctx)
public GatherVisitor (BaseRefactoringContext ctx, SyntaxTree unit)
: base (ctx) : base (ctx)
{ {
this.unit = unit; referenceFinder = new LocalReferenceFinder(ctx);
} }
public override void VisitVariableInitializer (VariableInitializer variableInitializer) public override void VisitVariableInitializer (VariableInitializer variableInitializer)
@ -62,7 +61,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
var resolveResult = ctx.Resolve (variableInitializer) as LocalResolveResult; var resolveResult = ctx.Resolve (variableInitializer) as LocalResolveResult;
if (resolveResult == null) if (resolveResult == null)
return; return;
if (!TestOnlyAssigned (ctx, unit, resolveResult.Variable)) if (!TestOnlyAssigned (referenceFinder, decl.Parent, resolveResult.Variable))
return; return;
AddIssue (variableInitializer.NameToken, AddIssue (variableInitializer.NameToken,
ctx.TranslateString ("Local variable is assigned by its value is never used")); ctx.TranslateString ("Local variable is assigned by its value is never used"));

13
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableOnlyAssignedIssues/ParameterOnlyAssignedIssue.cs

@ -35,19 +35,18 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
IssueMarker = IssueMarker.Underline)] IssueMarker = IssueMarker.Underline)]
public class ParameterOnlyAssignedIssue : VariableOnlyAssignedIssue public class ParameterOnlyAssignedIssue : VariableOnlyAssignedIssue
{ {
internal override GatherVisitorBase GetGatherVisitor (BaseRefactoringContext ctx, SyntaxTree unit) internal override GatherVisitorBase GetGatherVisitor (BaseRefactoringContext ctx)
{ {
return new GatherVisitor (ctx, unit); return new GatherVisitor (ctx);
} }
private class GatherVisitor : GatherVisitorBase private class GatherVisitor : GatherVisitorBase
{ {
SyntaxTree unit; LocalReferenceFinder referenceFinder;
public GatherVisitor (BaseRefactoringContext ctx)
public GatherVisitor (BaseRefactoringContext ctx, SyntaxTree unit)
: base (ctx) : base (ctx)
{ {
this.unit = unit; referenceFinder = new LocalReferenceFinder(ctx);
} }
public override void VisitParameterDeclaration (ParameterDeclaration parameterDeclaration) public override void VisitParameterDeclaration (ParameterDeclaration parameterDeclaration)
@ -58,7 +57,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
if (resolveResult == null) if (resolveResult == null)
return; return;
if (parameterDeclaration.ParameterModifier == ParameterModifier.Out || parameterDeclaration.ParameterModifier == ParameterModifier.Ref if (parameterDeclaration.ParameterModifier == ParameterModifier.Out || parameterDeclaration.ParameterModifier == ParameterModifier.Ref
|| !TestOnlyAssigned (ctx, unit, resolveResult.Variable)) || !TestOnlyAssigned (referenceFinder, parameterDeclaration.Parent, resolveResult.Variable))
return; return;
AddIssue (parameterDeclaration.NameToken, AddIssue (parameterDeclaration.NameToken,
ctx.TranslateString ("Parameter is assigned by its value is never used")); ctx.TranslateString ("Parameter is assigned by its value is never used"));

18
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableOnlyAssignedIssues/VariableOnlyAssignedIssue.cs

@ -25,30 +25,22 @@
// THE SOFTWARE. // THE SOFTWARE.
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using ICSharpCode.NRefactory.CSharp.Resolver;
using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.TypeSystem;
namespace ICSharpCode.NRefactory.CSharp.Refactoring namespace ICSharpCode.NRefactory.CSharp.Refactoring
{ {
public abstract class VariableOnlyAssignedIssue : ICodeIssueProvider public abstract class VariableOnlyAssignedIssue : ICodeIssueProvider
{ {
static FindReferences refFinder = new FindReferences ();
public IEnumerable<CodeIssue> GetIssues (BaseRefactoringContext context) public IEnumerable<CodeIssue> GetIssues (BaseRefactoringContext context)
{ {
var unit = context.RootNode as SyntaxTree; return GetGatherVisitor (context).GetIssues ();
if (unit == null)
return Enumerable.Empty<CodeIssue> ();
return GetGatherVisitor (context, unit).GetIssues ();
} }
protected static bool TestOnlyAssigned (BaseRefactoringContext ctx, SyntaxTree unit, IVariable variable) protected static bool TestOnlyAssigned (LocalReferenceFinder referenceFinder, AstNode rootNode, IVariable variable)
{ {
var assignment = false; var assignment = false;
var nonAssignment = false; var nonAssignment = false;
refFinder.FindLocalReferences (variable, ctx.UnresolvedFile, unit, ctx.Compilation, referenceFinder.FindReferences (rootNode, variable, (node, resolveResult) => {
(node, resolveResult) =>
{
if (node is ParameterDeclaration) if (node is ParameterDeclaration)
return; return;
@ -83,10 +75,10 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
} }
} }
nonAssignment = true; nonAssignment = true;
}, ctx.CancellationToken); });
return assignment && !nonAssignment; return assignment && !nonAssignment;
} }
internal abstract GatherVisitorBase GetGatherVisitor (BaseRefactoringContext ctx, SyntaxTree unit); internal abstract GatherVisitorBase GetGatherVisitor (BaseRefactoringContext ctx);
} }
} }

Loading…
Cancel
Save