Skip to content

Commit db4637d

Browse files
committed
Merge pull request #688 from rubberduck-vba/master
Syncing master with next
2 parents 38d0361 + 45bbda8 commit db4637d

File tree

8 files changed

+82
-172
lines changed

8 files changed

+82
-172
lines changed

RetailCoder.VBE/Refactorings/RemoveParameters/RemoveParametersModel.cs

Lines changed: 1 addition & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public RemoveParametersModel(VBProjectParseResult parseResult, QualifiedSelectio
3333

3434
private void AcquireTarget(QualifiedSelection selection)
3535
{
36-
TargetDeclaration = FindTarget(selection, ValidDeclarationTypes);
36+
TargetDeclaration = Declarations.FindSelection(selection, ValidDeclarationTypes);
3737
TargetDeclaration = PromptIfTargetImplementsInterface();
3838
TargetDeclaration = GetGetter();
3939
}
@@ -71,67 +71,6 @@ private IEnumerable<Declaration> GetParameters(Declaration method)
7171
DeclarationType.PropertySet
7272
};
7373

74-
public Declaration FindTarget(QualifiedSelection selection, DeclarationType[] validDeclarationTypes)
75-
{
76-
var target = Declarations.Items
77-
.Where(item => !item.IsBuiltIn)
78-
.FirstOrDefault(item => IsSelectedDeclaration(selection, item)
79-
|| IsSelectedReference(selection, item));
80-
81-
if (target != null && validDeclarationTypes.Contains(target.DeclarationType))
82-
{
83-
return target;
84-
}
85-
86-
target = null;
87-
88-
var targets = Declarations.Items
89-
.Where(item => !item.IsBuiltIn
90-
&& item.ComponentName == selection.QualifiedName.ComponentName
91-
&& validDeclarationTypes.Contains(item.DeclarationType));
92-
93-
var currentSelection = new Selection(0, 0, int.MaxValue, int.MaxValue);
94-
95-
foreach (var declaration in targets)
96-
{
97-
var activeSelection = new Selection(declaration.Context.Start.Line,
98-
declaration.Context.Start.Column,
99-
declaration.Context.Stop.Line,
100-
declaration.Context.Stop.Column);
101-
102-
if (currentSelection.Contains(activeSelection) && activeSelection.Contains(selection.Selection))
103-
{
104-
target = declaration;
105-
currentSelection = activeSelection;
106-
}
107-
108-
foreach (var reference in declaration.References)
109-
{
110-
var proc = (dynamic) reference.Context.Parent;
111-
VBAParser.ArgsCallContext paramList;
112-
113-
// This is to prevent throws when this statement fails:
114-
// (VBAParser.ArgsCallContext)proc.argsCall();
115-
try { paramList = (VBAParser.ArgsCallContext) proc.argsCall(); }
116-
catch { continue; }
117-
118-
if (paramList == null) { continue; }
119-
120-
activeSelection = new Selection(paramList.Start.Line,
121-
paramList.Start.Column,
122-
paramList.Stop.Line,
123-
paramList.Stop.Column + paramList.Stop.Text.Length + 1);
124-
125-
if (currentSelection.Contains(activeSelection) && activeSelection.Contains(selection.Selection))
126-
{
127-
target = reference.Declaration;
128-
currentSelection = activeSelection;
129-
}
130-
}
131-
}
132-
return target;
133-
}
134-
13574
private Declaration PromptIfTargetImplementsInterface()
13675
{
13776
var declaration = TargetDeclaration;
@@ -148,19 +87,6 @@ private Declaration PromptIfTargetImplementsInterface()
14887
return confirm == DialogResult.No ? null : interfaceMember;
14988
}
15089

151-
private bool IsSelectedReference(QualifiedSelection selection, Declaration declaration)
152-
{
153-
return declaration.References.Any(r =>
154-
r.QualifiedModuleName == selection.QualifiedName &&
155-
r.Selection.ContainsFirstCharacter(selection.Selection));
156-
}
157-
158-
private bool IsSelectedDeclaration(QualifiedSelection selection, Declaration declaration)
159-
{
160-
return declaration.QualifiedName.QualifiedModuleName == selection.QualifiedName
161-
&& (declaration.Selection.ContainsFirstCharacter(selection.Selection));
162-
}
163-
16490
private Declaration GetGetter()
16591
{
16692
if (TargetDeclaration.DeclarationType != DeclarationType.PropertyLet &&

RetailCoder.VBE/Refactorings/RemoveParameters/RemoveParametersRefactoring.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public void Refactor(Declaration target)
5858
public void QuickFix(VBProjectParseResult parseResult, QualifiedSelection selection)
5959
{
6060
_model = new RemoveParametersModel(parseResult, selection);
61-
var target = _model.FindTarget(selection, new[] { DeclarationType.Parameter });
61+
var target = _model.Declarations.FindSelection(selection, new[] { DeclarationType.Parameter });
6262

6363
// ReSharper disable once PossibleUnintendedReferenceComparison
6464
_model.Parameters.Find(param => param.Declaration == target).IsRemoved = true;

RetailCoder.VBE/Refactorings/Rename/RenameModel.cs

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ private void AcquireTarget(out Declaration target, QualifiedSelection selection)
4545
{
4646
target = _declarations.Items
4747
.Where(item => !item.IsBuiltIn && item.DeclarationType != DeclarationType.ModuleOption)
48-
.FirstOrDefault(item => IsSelectedDeclaration(selection, item)
49-
|| IsSelectedReference(selection, item));
48+
.FirstOrDefault(item => item.IsSelectedDeclaration(selection)
49+
|| item.References.Any(r => r.IsSelectedReference(selection)));
5050

5151
PromptIfTargetImplementsInterface(ref target);
5252
}
@@ -72,20 +72,5 @@ public void PromptIfTargetImplementsInterface(ref Declaration target)
7272

7373
target = interfaceMember;
7474
}
75-
76-
private bool IsSelectedReference(QualifiedSelection selection, Declaration declaration)
77-
{
78-
return declaration.References.Any(r =>
79-
r.QualifiedModuleName.Project == selection.QualifiedName.Project
80-
&& r.QualifiedModuleName.ComponentName == selection.QualifiedName.ComponentName
81-
&& r.Selection.ContainsFirstCharacter(selection.Selection));
82-
}
83-
84-
private bool IsSelectedDeclaration(QualifiedSelection selection, Declaration declaration)
85-
{
86-
return declaration.QualifiedName.QualifiedModuleName.Project == selection.QualifiedName.Project
87-
&& declaration.QualifiedName.QualifiedModuleName.ComponentName == selection.QualifiedName.ComponentName
88-
&& (declaration.Selection.ContainsFirstCharacter(selection.Selection));
89-
}
9075
}
9176
}

RetailCoder.VBE/Refactorings/ReorderParameters/ReorderParametersModel.cs

Lines changed: 1 addition & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public ReorderParametersModel(VBProjectParseResult parseResult, QualifiedSelecti
3434

3535
private void AcquireTaget(QualifiedSelection selection)
3636
{
37-
TargetDeclaration = FindTarget(selection, ValidDeclarationTypes);
37+
TargetDeclaration = Declarations.FindSelection(selection, ValidDeclarationTypes);
3838
TargetDeclaration = PromptIfTargetImplementsInterface();
3939
TargetDeclaration = GetGetter();
4040
}
@@ -63,67 +63,6 @@ private void LoadParameters()
6363
DeclarationType.PropertySet
6464
};
6565

66-
private Declaration FindTarget(QualifiedSelection selection, DeclarationType[] validDeclarationTypes)
67-
{
68-
var target = Declarations.Items
69-
.Where(item => !item.IsBuiltIn)
70-
.FirstOrDefault(item => IsSelectedDeclaration(selection, item)
71-
|| IsSelectedReference(selection, item));
72-
73-
if (target != null && validDeclarationTypes.Contains(target.DeclarationType))
74-
{
75-
return target;
76-
}
77-
78-
target = null;
79-
80-
var targets = Declarations.Items
81-
.Where(item => !item.IsBuiltIn
82-
&& item.ComponentName == selection.QualifiedName.ComponentName
83-
&& validDeclarationTypes.Contains(item.DeclarationType));
84-
85-
var currentSelection = new Selection(0, 0, int.MaxValue, int.MaxValue);
86-
87-
foreach (var declaration in targets)
88-
{
89-
var activeSelection = new Selection(declaration.Context.Start.Line,
90-
declaration.Context.Start.Column,
91-
declaration.Context.Stop.Line,
92-
declaration.Context.Stop.Column);
93-
94-
if (currentSelection.Contains(activeSelection) && activeSelection.Contains(selection.Selection))
95-
{
96-
target = declaration;
97-
currentSelection = activeSelection;
98-
}
99-
100-
foreach (var reference in declaration.References)
101-
{
102-
var proc = (dynamic)reference.Context.Parent;
103-
VBAParser.ArgsCallContext paramList;
104-
105-
// This is to prevent throws when this statement fails:
106-
// (VBAParser.ArgsCallContext)proc.argsCall();
107-
try { paramList = (VBAParser.ArgsCallContext)proc.argsCall(); }
108-
catch { continue; }
109-
110-
if (paramList == null) { continue; }
111-
112-
activeSelection = new Selection(paramList.Start.Line,
113-
paramList.Start.Column,
114-
paramList.Stop.Line,
115-
paramList.Stop.Column + paramList.Stop.Text.Length + 1);
116-
117-
if (currentSelection.Contains(activeSelection) && activeSelection.Contains(selection.Selection))
118-
{
119-
target = reference.Declaration;
120-
currentSelection = activeSelection;
121-
}
122-
}
123-
}
124-
return target;
125-
}
126-
12766
private Declaration PromptIfTargetImplementsInterface()
12867
{
12968
var declaration = TargetDeclaration;
@@ -140,19 +79,6 @@ private Declaration PromptIfTargetImplementsInterface()
14079
return confirm == DialogResult.No ? null : interfaceMember;
14180
}
14281

143-
private bool IsSelectedReference(QualifiedSelection selection, Declaration declaration)
144-
{
145-
return declaration.References.Any(r =>
146-
r.QualifiedModuleName == selection.QualifiedName &&
147-
r.Selection.ContainsFirstCharacter(selection.Selection));
148-
}
149-
150-
private bool IsSelectedDeclaration(QualifiedSelection selection, Declaration declaration)
151-
{
152-
return declaration.QualifiedName.QualifiedModuleName == selection.QualifiedName
153-
&& (declaration.Selection.ContainsFirstCharacter(selection.Selection));
154-
}
155-
15682
private Declaration GetGetter()
15783
{
15884
if (TargetDeclaration.DeclarationType != DeclarationType.PropertyLet &&

RetailCoder.VBE/UI/RefactorMenu.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,8 @@ public void FindAllReferences()
189189
.ToList();
190190

191191
var target = declarations.SingleOrDefault(item =>
192-
IsSelectedDeclaration(selection, item)
193-
|| IsSelectedReference(selection, item));
192+
item.IsSelectedDeclaration(selection)
193+
|| item.References.Any(r => r.IsSelectedReference(selection)));
194194

195195
if (target != null)
196196
{
@@ -370,7 +370,7 @@ private IEnumerable<Declaration> FindAllImplementationsOfMember(Declaration targ
370370
.Where(item => item.IdentifierName == member.ComponentName + "_" + member.IdentifierName);
371371
}
372372

373-
private bool IsSelectedReference(QualifiedSelection selection, Declaration declaration)
373+
/*private bool IsSelectedReference(QualifiedSelection selection, Declaration declaration)
374374
{
375375
return declaration.References.Any(r =>
376376
r.QualifiedModuleName.Project == selection.QualifiedName.Project
@@ -385,7 +385,7 @@ private bool IsSelectedDeclaration(QualifiedSelection selection, Declaration dec
385385
386386
// bug: QualifiedModuleName.Equals doesn't return expected value.
387387
return isSameModule && declaration.Selection.ContainsFirstCharacter(selection.Selection);
388-
}
388+
}*/
389389

390390
[SuppressMessage("ReSharper", "InconsistentNaming")]
391391
private void OnExtractMethodButtonClick(CommandBarButton Ctrl, ref bool CancelDefault)

Rubberduck.Parsing/Symbols/Declaration.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,12 @@ public bool HasTypeHint(out string token)
183183
}
184184
}
185185

186+
public bool IsSelectedDeclaration(QualifiedSelection selection)
187+
{
188+
return QualifiedName.QualifiedModuleName == selection.QualifiedName &&
189+
Selection.ContainsFirstCharacter(selection.Selection);
190+
}
191+
186192
private readonly bool _isSelfAssigned;
187193
/// <summary>
188194
/// Gets a value indicating whether the declaration is a joined assignment (e.g. "As New xxxxx")

Rubberduck.Parsing/Symbols/Declarations.cs

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,5 +235,66 @@ public Declaration FindInterfaceMember(Declaration implementation)
235235
? matches.SingleOrDefault(m => m.Project == implementation.Project)
236236
: matches.First();
237237
}
238+
239+
public Declaration FindSelection(QualifiedSelection selection, DeclarationType[] validDeclarationTypes)
240+
{
241+
var target = Items
242+
.Where(item => !item.IsBuiltIn)
243+
.FirstOrDefault(item => item.IsSelectedDeclaration(selection)
244+
|| item.References.Any(r => r.IsSelectedReference(selection)));
245+
246+
if (target != null && validDeclarationTypes.Contains(target.DeclarationType))
247+
{
248+
return target;
249+
}
250+
251+
target = null;
252+
253+
var targets = Items
254+
.Where(item => !item.IsBuiltIn
255+
&& item.ComponentName == selection.QualifiedName.ComponentName
256+
&& validDeclarationTypes.Contains(item.DeclarationType));
257+
258+
var currentSelection = new Selection(0, 0, int.MaxValue, int.MaxValue);
259+
260+
foreach (var declaration in targets)
261+
{
262+
var activeSelection = new Selection(declaration.Context.Start.Line,
263+
declaration.Context.Start.Column,
264+
declaration.Context.Stop.Line,
265+
declaration.Context.Stop.Column);
266+
267+
if (currentSelection.Contains(activeSelection) && activeSelection.Contains(selection.Selection))
268+
{
269+
target = declaration;
270+
currentSelection = activeSelection;
271+
}
272+
273+
foreach (var reference in declaration.References)
274+
{
275+
var proc = (dynamic)reference.Context.Parent;
276+
VBAParser.ArgsCallContext paramList;
277+
278+
// This is to prevent throws when this statement fails:
279+
// (VBAParser.ArgsCallContext)proc.argsCall();
280+
try { paramList = (VBAParser.ArgsCallContext)proc.argsCall(); }
281+
catch { continue; }
282+
283+
if (paramList == null) { continue; }
284+
285+
activeSelection = new Selection(paramList.Start.Line,
286+
paramList.Start.Column,
287+
paramList.Stop.Line,
288+
paramList.Stop.Column + paramList.Stop.Text.Length + 1);
289+
290+
if (currentSelection.Contains(activeSelection) && activeSelection.Contains(selection.Selection))
291+
{
292+
target = reference.Declaration;
293+
currentSelection = activeSelection;
294+
}
295+
}
296+
}
297+
return target;
298+
}
238299
}
239300
}

Rubberduck.Parsing/Symbols/IdentifierReference.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,11 @@ public bool HasTypeHint(out string token)
9393
return false;
9494
}
9595
}
96+
97+
public bool IsSelectedReference(QualifiedSelection selection)
98+
{
99+
return QualifiedModuleName == selection.QualifiedName &&
100+
Selection.ContainsFirstCharacter(selection.Selection);
101+
}
96102
}
97103
}

0 commit comments

Comments
 (0)