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 @@ -36,19 +36,18 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
IssueMarker = IssueMarker.Underline)]
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
{
SyntaxTree unit;
public GatherVisitor (BaseRefactoringContext ctx, SyntaxTree unit)
LocalReferenceFinder referenceFinder;
public GatherVisitor (BaseRefactoringContext ctx)
: base (ctx)
{
this.unit = unit;
referenceFinder = new LocalReferenceFinder(ctx);
}
public override void VisitVariableInitializer (VariableInitializer variableInitializer)
@ -62,7 +61,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -62,7 +61,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
var resolveResult = ctx.Resolve (variableInitializer) as LocalResolveResult;
if (resolveResult == null)
return;
if (!TestOnlyAssigned (ctx, unit, resolveResult.Variable))
if (!TestOnlyAssigned (referenceFinder, decl.Parent, resolveResult.Variable))
return;
AddIssue (variableInitializer.NameToken,
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 @@ -35,19 +35,18 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
IssueMarker = IssueMarker.Underline)]
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
{
SyntaxTree unit;
public GatherVisitor (BaseRefactoringContext ctx, SyntaxTree unit)
LocalReferenceFinder referenceFinder;
public GatherVisitor (BaseRefactoringContext ctx)
: base (ctx)
{
this.unit = unit;
referenceFinder = new LocalReferenceFinder(ctx);
}
public override void VisitParameterDeclaration (ParameterDeclaration parameterDeclaration)
@ -58,7 +57,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -58,7 +57,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
if (resolveResult == null)
return;
if (parameterDeclaration.ParameterModifier == ParameterModifier.Out || parameterDeclaration.ParameterModifier == ParameterModifier.Ref
|| !TestOnlyAssigned (ctx, unit, resolveResult.Variable))
|| !TestOnlyAssigned (referenceFinder, parameterDeclaration.Parent, resolveResult.Variable))
return;
AddIssue (parameterDeclaration.NameToken,
ctx.TranslateString ("Parameter is assigned by its value is never used"));

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

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

Loading…
Cancel
Save