Browse Source

Replace FindReferences with LocalReferenceFinder in VariableNotUsedIssue.

Simon Lindgren 14 years ago
parent
commit
8be6f487e9
  1. 18
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableNotUsedIssues/LocalVariableNotUsedIssue.cs
  2. 16
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableNotUsedIssues/ParameterNotUsedIssue.cs
  3. 18
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableNotUsedIssues/VariableNotUsedIssue.cs

18
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableNotUsedIssues/LocalVariableNotUsedIssue.cs

@ -35,19 +35,22 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
IssueMarker = IssueMarker.GrayOut)] IssueMarker = IssueMarker.GrayOut)]
public class LocalVariableNotUsedIssue : VariableNotUsedIssue public class LocalVariableNotUsedIssue : VariableNotUsedIssue
{ {
internal override GatherVisitorBase GetGatherVisitor (BaseRefactoringContext context, SyntaxTree unit) internal override GatherVisitorBase GetGatherVisitor (BaseRefactoringContext context)
{ {
return new GatherVisitor (context, unit); return new GatherVisitor (context, this);
} }
class GatherVisitor : GatherVisitorBase class GatherVisitor : GatherVisitorBase
{ {
SyntaxTree unit; LocalReferenceFinder referenceFinder;
public GatherVisitor (BaseRefactoringContext ctx, SyntaxTree unit) VariableNotUsedIssue inspector;
public GatherVisitor (BaseRefactoringContext ctx, VariableNotUsedIssue inspector)
: base (ctx) : base (ctx)
{ {
this.unit = unit; this.inspector = inspector;
this.referenceFinder = new LocalReferenceFinder(ctx);
} }
public override void VisitVariableInitializer (VariableInitializer variableInitializer) public override void VisitVariableInitializer (VariableInitializer variableInitializer)
@ -65,7 +68,8 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
if (resolveResult == null) if (resolveResult == null)
return; return;
if (FindUsage (ctx, unit, resolveResult.Variable, variableInitializer)) var b = inspector.FindUsage(referenceFinder, decl.Parent, resolveResult.Variable, variableInitializer);
if (b)
return; return;
AddIssue (variableInitializer.NameToken, ctx.TranslateString ("Remove unused local variable"), AddIssue (variableInitializer.NameToken, ctx.TranslateString ("Remove unused local variable"),
@ -90,7 +94,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
if (resolveResult == null) if (resolveResult == null)
return; return;
if (FindUsage (ctx, unit, resolveResult.Variable, foreachStatement.VariableNameToken)) if (inspector.FindUsage (referenceFinder, foreachStatement, resolveResult.Variable, foreachStatement.VariableNameToken))
return; return;
AddIssue (foreachStatement.VariableNameToken, ctx.TranslateString ("Local variable is never used")); AddIssue (foreachStatement.VariableNameToken, ctx.TranslateString ("Local variable is never used"));

16
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableNotUsedIssues/ParameterNotUsedIssue.cs

@ -38,19 +38,22 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
public class ParameterNotUsedIssue : VariableNotUsedIssue public class ParameterNotUsedIssue : VariableNotUsedIssue
{ {
internal override GatherVisitorBase GetGatherVisitor (BaseRefactoringContext context, SyntaxTree unit) internal override GatherVisitorBase GetGatherVisitor (BaseRefactoringContext context)
{ {
return new GatherVisitor (context, unit); return new GatherVisitor (context, this);
} }
class GatherVisitor : GatherVisitorBase class GatherVisitor : GatherVisitorBase
{ {
SyntaxTree unit; VariableNotUsedIssue inspector;
public GatherVisitor (BaseRefactoringContext ctx, SyntaxTree unit) LocalReferenceFinder referenceFinder;
public GatherVisitor (BaseRefactoringContext ctx, VariableNotUsedIssue inspector)
: base (ctx) : base (ctx)
{ {
this.unit = unit; this.inspector = inspector;
this.referenceFinder = new LocalReferenceFinder(ctx);
} }
public override void VisitMethodDeclaration(MethodDeclaration methodDeclaration) public override void VisitMethodDeclaration(MethodDeclaration methodDeclaration)
@ -81,7 +84,8 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
var resolveResult = ctx.Resolve (parameterDeclaration) as LocalResolveResult; var resolveResult = ctx.Resolve (parameterDeclaration) as LocalResolveResult;
if (resolveResult == null) if (resolveResult == null)
return; return;
if (FindUsage (ctx, unit, resolveResult.Variable, parameterDeclaration))
if (inspector.FindUsage (referenceFinder, parameterDeclaration.Parent, resolveResult.Variable, parameterDeclaration))
return; return;
AddIssue (parameterDeclaration.NameToken, ctx.TranslateString ("Parameter is never used")); AddIssue (parameterDeclaration.NameToken, ctx.TranslateString ("Parameter is never used"));

18
ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableNotUsedIssues/VariableNotUsedIssue.cs

@ -26,35 +26,29 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; 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 VariableNotUsedIssue : ICodeIssueProvider public abstract class VariableNotUsedIssue : ICodeIssueProvider
{ {
static FindReferences refFinder = new FindReferences ();
public IEnumerable<CodeIssue> GetIssues (BaseRefactoringContext context) public IEnumerable<CodeIssue> GetIssues (BaseRefactoringContext context)
{ {
var unit = context.RootNode as SyntaxTree; var unit = context.RootNode as SyntaxTree;
if (unit == null) if (unit == null)
return Enumerable.Empty<CodeIssue> (); return Enumerable.Empty<CodeIssue> ();
return GetGatherVisitor(context, unit).GetIssues (); return GetGatherVisitor(context).GetIssues ();
} }
protected static bool FindUsage (BaseRefactoringContext context, SyntaxTree unit, IVariable variable, public bool FindUsage (LocalReferenceFinder referenceFinder, AstNode rootNode, IVariable variable, AstNode declaration)
AstNode declaration)
{ {
var found = false; var found = false;
refFinder.FindLocalReferences (variable, context.UnresolvedFile, unit, context.Compilation, referenceFinder.FindReferences (rootNode, variable, (node, resolveResult) => {
(node, resolveResult) => found |= node != declaration;
{ });
found = found || node != declaration;
}, context.CancellationToken);
return found; return found;
} }
internal abstract GatherVisitorBase GetGatherVisitor (BaseRefactoringContext context, SyntaxTree unit); internal abstract GatherVisitorBase GetGatherVisitor (BaseRefactoringContext context);
} }
} }

Loading…
Cancel
Save