diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableOnlyAssignedIssues/LocalVariableOnlyAssignedIssue.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableOnlyAssignedIssues/LocalVariableOnlyAssignedIssue.cs index c619d03157..0e6eacbc1f 100644 --- a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableOnlyAssignedIssues/LocalVariableOnlyAssignedIssue.cs +++ b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableOnlyAssignedIssues/LocalVariableOnlyAssignedIssue.cs @@ -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 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")); diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableOnlyAssignedIssues/ParameterOnlyAssignedIssue.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableOnlyAssignedIssues/ParameterOnlyAssignedIssue.cs index bea8b1599e..4a8abe3732 100644 --- a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableOnlyAssignedIssues/ParameterOnlyAssignedIssue.cs +++ b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableOnlyAssignedIssues/ParameterOnlyAssignedIssue.cs @@ -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 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")); diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableOnlyAssignedIssues/VariableOnlyAssignedIssue.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableOnlyAssignedIssues/VariableOnlyAssignedIssue.cs index a4b965ed69..d86c334959 100644 --- a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableOnlyAssignedIssues/VariableOnlyAssignedIssue.cs +++ b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/VariableOnlyAssignedIssues/VariableOnlyAssignedIssue.cs @@ -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 GetIssues (BaseRefactoringContext context) { - var unit = context.RootNode as SyntaxTree; - if (unit == null) - return Enumerable.Empty (); - 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 } } nonAssignment = true; - }, ctx.CancellationToken); + }); return assignment && !nonAssignment; } - internal abstract GatherVisitorBase GetGatherVisitor (BaseRefactoringContext ctx, SyntaxTree unit); + internal abstract GatherVisitorBase GetGatherVisitor (BaseRefactoringContext ctx); } }