Skip to content

Commit 61795ef

Browse files
committed
Address PR #5555 comments
Retains use of IModuleRewriterExtensions class.
1 parent bbf3031 commit 61795ef

File tree

4 files changed

+35
-29
lines changed

4 files changed

+35
-29
lines changed

Rubberduck.Refactorings/Common/IModuleRewriterExtensions.cs

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,28 +25,32 @@ public static class IModuleRewriterExtensions
2525
/// </remarks>
2626
public static void RemoveVariables(this IModuleRewriter rewriter, IEnumerable<VariableDeclaration> toRemove, bool removeEndOfStmtContext = true)
2727
{
28-
if (!toRemove.Any()) { return; }
28+
if (!toRemove.Any())
29+
{
30+
return;
31+
}
2932

30-
var fieldsByListContext = toRemove.Distinct()
31-
.GroupBy(f => f.Context.GetAncestor<VBAParser.VariableListStmtContext>());
33+
var fieldsToDeleteByListContext = toRemove.Distinct()
34+
.ToLookup(f => f.Context.GetAncestor<VBAParser.VariableListStmtContext>());
3235

33-
foreach (var fieldsGroup in fieldsByListContext)
36+
foreach (var fieldsToDelete in fieldsToDeleteByListContext)
3437
{
35-
var variables = fieldsGroup.Key.children.Where(ch => ch is VBAParser.VariableSubStmtContext);
36-
if (variables.Count() == fieldsGroup.Count())
38+
var variableList = fieldsToDelete.Key.children.OfType<VBAParser.VariableSubStmtContext>();
39+
40+
if (variableList.Count() == fieldsToDelete.Count())
3741
{
38-
if (fieldsGroup.First().ParentDeclaration.DeclarationType.HasFlag(DeclarationType.Module))
42+
if (fieldsToDelete.First().ParentDeclaration.DeclarationType.HasFlag(DeclarationType.Module))
3943
{
40-
rewriter.RemoveDeclaration<VBAParser.ModuleDeclarationsElementContext>(fieldsGroup.First(), removeEndOfStmtContext);
44+
rewriter.RemoveDeclarationContext<VBAParser.ModuleDeclarationsElementContext>(fieldsToDelete.First(), removeEndOfStmtContext);
4145
}
4246
else
4347
{
44-
rewriter.RemoveDeclaration<VBAParser.BlockStmtContext>(fieldsGroup.First(), removeEndOfStmtContext);
48+
rewriter.RemoveDeclarationContext<VBAParser.BlockStmtContext>(fieldsToDelete.First(), removeEndOfStmtContext);
4549
}
4650
continue;
4751
}
4852

49-
foreach (var target in fieldsGroup)
53+
foreach (var target in fieldsToDelete)
5054
{
5155
rewriter.Remove(target);
5256
}
@@ -76,15 +80,18 @@ public static void RemoveMember(this IModuleRewriter rewriter, ModuleBodyElement
7680
/// </remarks>
7781
public static void RemoveMembers(this IModuleRewriter rewriter, IEnumerable<ModuleBodyElementDeclaration> toRemove, bool removeEndOfStmtContext = true)
7882
{
79-
if (!toRemove.Any()) { return; }
83+
if (!toRemove.Any())
84+
{
85+
return;
86+
}
8087

8188
foreach (var member in toRemove)
8289
{
83-
rewriter.RemoveDeclaration<VBAParser.ModuleBodyElementContext>(member, removeEndOfStmtContext);
90+
rewriter.RemoveDeclarationContext<VBAParser.ModuleBodyElementContext>(member, removeEndOfStmtContext);
8491
}
8592
}
8693

87-
private static void RemoveDeclaration<T>(this IModuleRewriter rewriter, Declaration declaration, bool removeEndOfStmtContext = true) where T : ParserRuleContext
94+
private static void RemoveDeclarationContext<T>(this IModuleRewriter rewriter, Declaration declaration, bool removeEndOfStmtContext = true) where T : ParserRuleContext
8895
{
8996
if (!declaration.Context.TryGetAncestor<T>(out var elementContext))
9097
{

Rubberduck.Refactorings/EncapsulateField/EncapsulateFieldRefactoring.cs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -90,23 +90,22 @@ protected override EncapsulateFieldModel InitializeModel(Declaration target)
9090

9191
protected override void RefactorImpl(EncapsulateFieldModel model)
9292
{
93-
var refactorRewriteSession = _rewritingManager.CheckOutCodePaneSession();
93+
var executableRewriteSession = _rewritingManager.CheckOutCodePaneSession();
9494

95-
RefactorRewrite(model, refactorRewriteSession as IRewriteSession);
95+
RefactorRewrite(model, executableRewriteSession);
9696

97-
if (!refactorRewriteSession.TryRewrite())
97+
if (!executableRewriteSession.TryRewrite())
9898
{
99-
throw new RewriteFailedException(refactorRewriteSession);
99+
throw new RewriteFailedException(executableRewriteSession);
100100
}
101101
}
102102

103103
private string PreviewRewrite(EncapsulateFieldModel model)
104104
{
105-
var previewSession = _rewritingManager.CheckOutCodePaneSession() as IRewriteSession;
106-
previewSession = RefactorRewrite(model, previewSession, true);
105+
var previewSession = RefactorRewrite(model, _rewritingManager.CheckOutCodePaneSession(), true);
107106

108-
var rewriter = previewSession.CheckOutModuleRewriter(model.QualifiedModuleName);
109-
return rewriter.GetText();
107+
return previewSession.CheckOutModuleRewriter(model.QualifiedModuleName)
108+
.GetText();
110109
}
111110

112111
private IRewriteSession RefactorRewrite(EncapsulateFieldModel model, IRewriteSession refactorRewriteSession, bool asPreview = false)

Rubberduck.Refactorings/EncapsulateField/EncapsulationStrategies/ConvertFieldsToUDTMembers.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ protected override void ModifyFields(IRewriteSession refactorRewriteSession)
2222
{
2323
var rewriter = refactorRewriteSession.CheckOutModuleRewriter(_targetQMN);
2424

25-
rewriter.RemoveVariables(SelectedFields.Select(f => f.Declaration).Cast<VariableDeclaration>());
25+
rewriter.RemoveVariables(SelectedFields.Select(f => f.Declaration)
26+
.Cast<VariableDeclaration>());
2627

2728
if (_stateUDTField.IsExistingDeclaration)
2829
{

Rubberduck.Refactorings/MoveCloserToUsage/MoveCloserToUsageRefactoringAction.cs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,14 @@ public MoveCloserToUsageRefactoringAction(IRewritingManager rewritingManager)
1616

1717
protected override void Refactor(MoveCloserToUsageModel model, IRewriteSession rewriteSession)
1818
{
19-
var target = model.Target;
20-
if (target is VariableDeclaration variable)
19+
if (!(model.Target is VariableDeclaration variable))
2120
{
22-
InsertNewDeclaration(variable, rewriteSession);
23-
RemoveOldDeclaration(variable, rewriteSession);
24-
UpdateQualifiedCalls(variable, rewriteSession);
25-
return;
21+
throw new ArgumentException("Invalid type - VariableDeclaration required");
2622
}
27-
throw new ArgumentException("Invalid target declaration type");
23+
24+
InsertNewDeclaration(variable, rewriteSession);
25+
RemoveOldDeclaration(variable, rewriteSession);
26+
UpdateQualifiedCalls(variable, rewriteSession);
2827
}
2928

3029
private void InsertNewDeclaration(VariableDeclaration target, IRewriteSession rewriteSession)

0 commit comments

Comments
 (0)