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 @@ -35,19 +35,22 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
IssueMarker = IssueMarker.GrayOut)]
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
{
SyntaxTree unit;
LocalReferenceFinder referenceFinder;
public GatherVisitor (BaseRefactoringContext ctx, SyntaxTree unit)
VariableNotUsedIssue inspector;
public GatherVisitor (BaseRefactoringContext ctx, VariableNotUsedIssue inspector)
: base (ctx)
{
this.unit = unit;
this.inspector = inspector;
this.referenceFinder = new LocalReferenceFinder(ctx);
}
public override void VisitVariableInitializer (VariableInitializer variableInitializer)
@ -65,7 +68,8 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -65,7 +68,8 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
if (resolveResult == null)
return;
if (FindUsage (ctx, unit, resolveResult.Variable, variableInitializer))
var b = inspector.FindUsage(referenceFinder, decl.Parent, resolveResult.Variable, variableInitializer);
if (b)
return;
AddIssue (variableInitializer.NameToken, ctx.TranslateString ("Remove unused local variable"),
@ -90,7 +94,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -90,7 +94,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
if (resolveResult == null)
return;
if (FindUsage (ctx, unit, resolveResult.Variable, foreachStatement.VariableNameToken))
if (inspector.FindUsage (referenceFinder, foreachStatement, resolveResult.Variable, foreachStatement.VariableNameToken))
return;
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 @@ -38,19 +38,22 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
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
{
SyntaxTree unit;
VariableNotUsedIssue inspector;
public GatherVisitor (BaseRefactoringContext ctx, SyntaxTree unit)
LocalReferenceFinder referenceFinder;
public GatherVisitor (BaseRefactoringContext ctx, VariableNotUsedIssue inspector)
: base (ctx)
{
this.unit = unit;
this.inspector = inspector;
this.referenceFinder = new LocalReferenceFinder(ctx);
}
public override void VisitMethodDeclaration(MethodDeclaration methodDeclaration)
@ -81,7 +84,8 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -81,7 +84,8 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
var resolveResult = ctx.Resolve (parameterDeclaration) as LocalResolveResult;
if (resolveResult == null)
return;
if (FindUsage (ctx, unit, resolveResult.Variable, parameterDeclaration))
if (inspector.FindUsage (referenceFinder, parameterDeclaration.Parent, resolveResult.Variable, parameterDeclaration))
return;
AddIssue (parameterDeclaration.NameToken, ctx.TranslateString ("Parameter is never used"));

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

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

Loading…
Cancel
Save