Skip to content

Commit f01d2ce

Browse files
authored
Merge pull request #3796 from MDoerner/SomeWrapperDisposal
Some more safety around the ActiveCodePane
2 parents 9c881e1 + 5384b77 commit f01d2ce

37 files changed

+450
-374
lines changed

RetailCoder.VBE/Navigation/RegexSearchReplace/RegexSearchReplace.cs

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,11 @@ private List<RegexSearchResult> SearchSelection(string searchPattern)
9696
{
9797
using (var pane = _vbe.ActiveCodePane)
9898
{
99+
if (pane == null || pane.IsWrappingNullReference)
100+
{
101+
return new List<RegexSearchResult>();
102+
}
103+
99104
using (var module = pane.CodeModule)
100105
{
101106
var results = GetResultsFromModule(module, searchPattern);
@@ -119,21 +124,22 @@ private List<RegexSearchResult> SearchCurrentBlock(string searchPattern)
119124
var state = _parser.State;
120125
using (var pane = _vbe.ActiveCodePane)
121126
{
127+
if (pane == null || pane.IsWrappingNullReference)
128+
{
129+
return new List<RegexSearchResult>();
130+
}
131+
122132
using (var module = pane.CodeModule)
123133
{
124134
var results = GetResultsFromModule(module, searchPattern);
125135

126-
using (var moduleParent = module.Parent)
127-
{
128-
var qualifiedSelection =
129-
new QualifiedSelection(new QualifiedModuleName(moduleParent), pane.Selection);
130-
dynamic block = state.AllDeclarations.FindTarget(qualifiedSelection, declarationTypes).Context
131-
.Parent;
132-
var selection = new Selection(block.Start.Line, block.Start.Column, block.Stop.Line,
133-
block.Stop.Column);
134-
135-
return results.Where(r => selection.Contains(r.Selection)).ToList();
136-
}
136+
var qualifiedSelection = pane.GetQualifiedSelection();
137+
dynamic block = state.AllDeclarations.FindTarget(qualifiedSelection.Value, declarationTypes).Context
138+
.Parent;
139+
var selection = new Selection(block.Start.Line, block.Start.Column, block.Stop.Line,
140+
block.Stop.Column);
141+
142+
return results.Where(r => selection.Contains(r.Selection)).ToList();
137143
}
138144
}
139145
}
@@ -142,6 +148,11 @@ private List<RegexSearchResult> SearchCurrentFile(string searchPattern)
142148
{
143149
using (var pane = _vbe.ActiveCodePane)
144150
{
151+
if (pane == null || pane.IsWrappingNullReference)
152+
{
153+
return new List<RegexSearchResult>();
154+
}
155+
145156
using (var codeModule = pane.CodeModule)
146157
{
147158
return GetResultsFromModule(codeModule, searchPattern).ToList();

RetailCoder.VBE/Refactorings/EncapsulateField/EncapsulateFieldPresenterFactory.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Rubberduck.Parsing.VBA;
22
using Rubberduck.UI.Refactorings;
33
using Rubberduck.UI.Refactorings.EncapsulateField;
4+
using Rubberduck.VBEditor;
45
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
56

67
namespace Rubberduck.Refactorings.EncapsulateField
@@ -20,13 +21,9 @@ public EncapsulateFieldPresenterFactory(IVBE vbe, RubberduckParserState state, I
2021

2122
public EncapsulateFieldPresenter Create()
2223
{
23-
var pane = _vbe.ActiveCodePane;
24-
if (pane == null || pane.IsWrappingNullReference)
25-
{
26-
return null;
27-
}
2824

29-
var selection = pane.GetQualifiedSelection();
25+
var selection = _vbe.GetActiveSelection();
26+
3027
if (!selection.HasValue)
3128
{
3229
return null;

RetailCoder.VBE/Refactorings/EncapsulateField/EncapsulateFieldRefactoring.cs

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,28 @@ public void Refactor()
4646

4747
public void Refactor(QualifiedSelection target)
4848
{
49-
var pane = _vbe.ActiveCodePane;
50-
pane.Selection = target.Selection;
49+
using (var pane = _vbe.ActiveCodePane)
50+
{
51+
if (pane == null || pane.IsWrappingNullReference)
52+
{
53+
return;
54+
}
55+
pane.Selection = target.Selection;
56+
}
5157
Refactor();
5258
}
5359

5460
public void Refactor(Declaration target)
5561
{
56-
var pane = _vbe.ActiveCodePane;
57-
pane.Selection = target.QualifiedSelection.Selection;
62+
using (var pane = _vbe.ActiveCodePane)
63+
{
64+
if (pane == null || pane.IsWrappingNullReference)
65+
{
66+
return;
67+
}
68+
69+
pane.Selection = target.QualifiedSelection.Selection;
70+
}
5871
Refactor();
5972
}
6073

RetailCoder.VBE/Refactorings/ExtractInterface/ExtractInterfacePresenterFactory.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Linq;
22
using Rubberduck.Parsing.VBA;
33
using Rubberduck.UI.Refactorings;
4+
using Rubberduck.VBEditor;
45
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
56

67
namespace Rubberduck.Refactorings.ExtractInterface
@@ -20,12 +21,9 @@ public ExtractInterfacePresenterFactory(IVBE vbe, RubberduckParserState state, I
2021

2122
public ExtractInterfacePresenter Create()
2223
{
23-
var pane = _vbe.ActiveCodePane;
24-
if (pane == null || pane.IsWrappingNullReference)
25-
{
26-
return null;
27-
}
28-
var selection = pane.GetQualifiedSelection();
24+
25+
var selection = _vbe.GetActiveSelection();
26+
2927
if (selection == null)
3028
{
3129
return null;

RetailCoder.VBE/Refactorings/ExtractInterface/ExtractInterfaceRefactoring.cs

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -39,33 +39,29 @@ public void Refactor()
3939
return;
4040
}
4141

42-
var pane = _vbe.ActiveCodePane;
43-
QualifiedSelection? oldSelection;
44-
if (!pane.IsWrappingNullReference)
42+
using (var pane = _vbe.ActiveCodePane)
4543
{
46-
var module = pane.CodeModule;
44+
if (pane.IsWrappingNullReference)
4745
{
48-
oldSelection = module.GetQualifiedSelection();
46+
return;
4947
}
50-
}
51-
else
52-
{
53-
return;
54-
}
5548

56-
AddInterface();
49+
var oldSelection = pane.GetQualifiedSelection();
5750

58-
if (oldSelection.HasValue)
59-
{
60-
pane.Selection = oldSelection.Value.Selection;
51+
AddInterface();
52+
53+
if (oldSelection.HasValue)
54+
{
55+
pane.Selection = oldSelection.Value.Selection;
56+
}
6157
}
6258

6359
_model.State.OnParseRequested(this);
6460
}
6561

6662
public void Refactor(QualifiedSelection target)
6763
{
68-
var pane = _vbe.ActiveCodePane;
64+
using (var pane = _vbe.ActiveCodePane)
6965
{
7066
if (pane.IsWrappingNullReference)
7167
{
@@ -78,7 +74,7 @@ public void Refactor(QualifiedSelection target)
7874

7975
public void Refactor(Declaration target)
8076
{
81-
var pane = _vbe.ActiveCodePane;
77+
using (var pane = _vbe.ActiveCodePane)
8278
{
8379
if (pane.IsWrappingNullReference)
8480
{

RetailCoder.VBE/Refactorings/ImplementInterface/ImplementInterfaceRefactoring.cs

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -34,19 +34,25 @@ public ImplementInterfaceRefactoring(IVBE vbe, RubberduckParserState state, IMes
3434

3535
public void Refactor()
3636
{
37-
if (_vbe.ActiveCodePane == null)
37+
QualifiedSelection? qualifiedSelection;
38+
using (var activePane = _vbe.ActiveCodePane)
3839
{
39-
_messageBox.Show(RubberduckUI.ImplementInterface_InvalidSelectionMessage, RubberduckUI.ImplementInterface_Caption,
40-
System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Exclamation);
41-
return;
42-
}
40+
if (activePane == null || activePane.IsWrappingNullReference)
41+
{
42+
_messageBox.Show(RubberduckUI.ImplementInterface_InvalidSelectionMessage,
43+
RubberduckUI.ImplementInterface_Caption,
44+
System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Exclamation);
45+
return;
46+
}
4347

44-
var qualifiedSelection = _vbe.ActiveCodePane.GetQualifiedSelection();
45-
if (!qualifiedSelection.HasValue)
46-
{
47-
_messageBox.Show(RubberduckUI.ImplementInterface_InvalidSelectionMessage, RubberduckUI.ImplementInterface_Caption,
48-
System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Exclamation);
49-
return;
48+
qualifiedSelection = activePane.GetQualifiedSelection();
49+
if (!qualifiedSelection.HasValue)
50+
{
51+
_messageBox.Show(RubberduckUI.ImplementInterface_InvalidSelectionMessage,
52+
RubberduckUI.ImplementInterface_Caption,
53+
System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Exclamation);
54+
return;
55+
}
5056
}
5157

5258
Refactor(qualifiedSelection.Value);
@@ -74,14 +80,7 @@ public void Refactor(QualifiedSelection selection)
7480
return;
7581
}
7682

77-
QualifiedSelection? oldSelection = null;
78-
if (_vbe.ActiveCodePane != null)
79-
{
80-
using (var codePane = _vbe.ActiveCodePane)
81-
{
82-
oldSelection = codePane.GetQualifiedSelection();
83-
}
84-
}
83+
var oldSelection = _vbe.GetActiveSelection();
8584

8685
ImplementMissingMembers(_state.GetRewriter(_targetClass));
8786

RetailCoder.VBE/Refactorings/IntroduceField/IntroduceFieldRefactoring.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public IntroduceFieldRefactoring(IVBE vbe, RubberduckParserState state, IMessage
3333

3434
public void Refactor()
3535
{
36-
var selection = _vbe.ActiveCodePane.GetQualifiedSelection();
36+
var selection = _vbe.GetActiveSelection();
3737

3838
if (!selection.HasValue)
3939
{
@@ -78,11 +78,7 @@ private void PromoteVariable(IModuleRewriter rewriter, Declaration target)
7878
return;
7979
}
8080

81-
QualifiedSelection? oldSelection = null;
82-
if (_vbe.ActiveCodePane != null)
83-
{
84-
oldSelection = _vbe.ActiveCodePane.CodeModule.GetQualifiedSelection();
85-
}
81+
var oldSelection = _vbe.GetActiveSelection();
8682

8783
rewriter.Remove(target);
8884
AddField(rewriter, target);

RetailCoder.VBE/Refactorings/IntroduceParameter/IntroduceParameterRefactoring.cs

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -40,19 +40,17 @@ public IntroduceParameterRefactoring(IVBE vbe, RubberduckParserState state, IMes
4040

4141
public void Refactor()
4242
{
43-
var pane = _vbe.ActiveCodePane;
44-
var module = pane.CodeModule;
43+
var selection = _vbe.GetActiveSelection();
44+
45+
if (!selection.HasValue)
4546
{
46-
var selection = module.GetQualifiedSelection();
47-
if (!selection.HasValue)
48-
{
49-
_messageBox.Show(RubberduckUI.PromoteVariable_InvalidSelection, RubberduckUI.IntroduceParameter_Caption,
50-
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
51-
return;
52-
}
53-
54-
Refactor(selection.Value);
47+
_messageBox.Show(RubberduckUI.PromoteVariable_InvalidSelection, RubberduckUI.IntroduceParameter_Caption,
48+
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
49+
return;
5550
}
51+
52+
Refactor(selection.Value);
53+
5654
}
5755

5856
public void Refactor(QualifiedSelection selection)
@@ -99,20 +97,21 @@ private void PromoteVariable(Declaration target)
9997
var rewriter = _state.GetRewriter(target);
10098
_rewriters.Add(rewriter);
10199

102-
QualifiedSelection? oldSelection = null;
103-
var pane = _vbe.ActiveCodePane;
104-
var module = pane.CodeModule;
105-
if (_vbe.ActiveCodePane != null)
100+
using (var pane = _vbe.ActiveCodePane)
106101
{
107-
oldSelection = module.GetQualifiedSelection();
108-
}
102+
QualifiedSelection? oldSelection = null;
103+
if (pane != null && !pane.IsWrappingNullReference)
104+
{
105+
oldSelection = pane.GetQualifiedSelection();
106+
}
109107

110-
UpdateSignature(target);
111-
rewriter.Remove(target);
108+
UpdateSignature(target);
109+
rewriter.Remove(target);
112110

113-
if (oldSelection.HasValue)
114-
{
115-
pane.Selection = oldSelection.Value.Selection;
111+
if (oldSelection.HasValue && !pane.IsWrappingNullReference)
112+
{
113+
pane.Selection = oldSelection.Value.Selection;
114+
}
116115
}
117116

118117
foreach (var tokenRewriter in _rewriters)

0 commit comments

Comments
 (0)