Skip to content

Commit 7e4ddd2

Browse files
authored
Merge pull request #4851 from MDoerner/RefactorRefactoringSetup
Refactor refactoring setup
2 parents 5bb8d81 + 480eefa commit 7e4ddd2

File tree

137 files changed

+6066
-6860
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

137 files changed

+6066
-6860
lines changed
Lines changed: 6 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,23 @@
1-
using Rubberduck.Inspections.Abstract;
21
using Rubberduck.Inspections.Concrete;
32
using Rubberduck.Parsing.Inspections.Abstract;
4-
using Rubberduck.Parsing.Rewriter;
5-
using Rubberduck.Parsing.VBA;
6-
using Rubberduck.Refactorings;
73
using Rubberduck.Refactorings.EncapsulateField;
8-
using Rubberduck.SmartIndenter;
9-
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
10-
using Rubberduck.VBEditor.Utility;
114

125
namespace Rubberduck.Inspections.QuickFixes
136
{
14-
public sealed class EncapsulateFieldQuickFix : QuickFixBase
7+
public sealed class EncapsulateFieldQuickFix : RefactoringQuickFixBase
158
{
16-
private readonly RubberduckParserState _state;
17-
private readonly ISelectionService _selectionService;
18-
private readonly IRewritingManager _rewritingManager;
19-
private readonly IIndenter _indenter;
20-
private readonly IRefactoringPresenterFactory _factory;
21-
22-
public EncapsulateFieldQuickFix(RubberduckParserState state, IIndenter indenter, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager, ISelectionService selectionService)
23-
: base(typeof(EncapsulatePublicFieldInspection))
24-
{
25-
_state = state;
26-
_selectionService = selectionService;
27-
_rewritingManager = rewritingManager;
28-
_indenter = indenter;
29-
_factory = factory;
30-
}
9+
public EncapsulateFieldQuickFix(EncapsulateFieldRefactoring refactoring)
10+
: base(refactoring, typeof(EncapsulatePublicFieldInspection))
11+
{}
3112

32-
//The rewriteSession is optional since it is not used in this particular quickfix because it is a refactoring quickfix.
33-
public override void Fix(IInspectionResult result, IRewriteSession rewriteSession = null)
13+
protected override void Refactor(IInspectionResult result)
3414
{
35-
var refactoring = new EncapsulateFieldRefactoring(_state, _indenter, _factory, _rewritingManager, _selectionService);
36-
refactoring.Refactor(result.Target);
15+
Refactoring.Refactor(result.Target);
3716
}
3817

3918
public override string Description(IInspectionResult result)
4019
{
4120
return string.Format(Resources.Inspections.QuickFixes.EncapsulatePublicFieldInspectionQuickFix, result.Target.IdentifierName);
4221
}
43-
44-
public override bool CanFixInProcedure => false;
45-
public override bool CanFixInModule => false;
46-
public override bool CanFixInProject => false;
4722
}
4823
}
Lines changed: 6 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,24 @@
1-
using Rubberduck.Inspections.Abstract;
21
using Rubberduck.Inspections.Concrete;
3-
using Rubberduck.Interaction;
42
using Rubberduck.Parsing.Inspections.Abstract;
5-
using Rubberduck.Parsing.Rewriter;
6-
using Rubberduck.Parsing.VBA;
73
using Rubberduck.Refactorings.MoveCloserToUsage;
84
using Rubberduck.Resources.Inspections;
9-
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
10-
using Rubberduck.VBEditor.Utility;
115

126
namespace Rubberduck.Inspections.QuickFixes
137
{
14-
public sealed class MoveFieldCloserToUsageQuickFix : QuickFixBase
8+
public sealed class MoveFieldCloserToUsageQuickFix : RefactoringQuickFixBase
159
{
16-
private readonly ISelectionService _selectionService;
17-
private readonly RubberduckParserState _state;
18-
private readonly IRewritingManager _rewritingManager;
19-
private readonly IMessageBox _messageBox;
10+
public MoveFieldCloserToUsageQuickFix(MoveCloserToUsageRefactoring refactoring)
11+
: base(refactoring, typeof(MoveFieldCloserToUsageInspection))
12+
{}
2013

21-
public MoveFieldCloserToUsageQuickFix(RubberduckParserState state, IMessageBox messageBox, IRewritingManager rewritingManager, ISelectionService selectionService)
22-
: base(typeof(MoveFieldCloserToUsageInspection))
14+
protected override void Refactor(IInspectionResult result)
2315
{
24-
_selectionService = selectionService;
25-
_state = state;
26-
_rewritingManager = rewritingManager;
27-
_messageBox = messageBox;
28-
}
29-
30-
//The rewriteSession is optional since it is not used in this particular quickfix because it is a refactoring quickfix.
31-
public override void Fix(IInspectionResult result, IRewriteSession rewriteSession = null)
32-
{
33-
var refactoring = new MoveCloserToUsageRefactoring(_state, _messageBox, _rewritingManager, _selectionService);
34-
refactoring.Refactor(result.Target);
16+
Refactoring.Refactor(result.Target);
3517
}
3618

3719
public override string Description(IInspectionResult result)
3820
{
3921
return string.Format(InspectionResults.MoveFieldCloserToUsageInspection, result.Target.IdentifierName);
4022
}
41-
42-
public override bool CanFixInProcedure => false;
43-
public override bool CanFixInModule => false;
44-
public override bool CanFixInProject => false;
4523
}
4624
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
using System;
2+
using Rubberduck.Inspections.Abstract;
3+
using Rubberduck.Parsing.Inspections.Abstract;
4+
using Rubberduck.Parsing.Rewriter;
5+
using Rubberduck.Refactorings;
6+
using Rubberduck.Refactorings.Exceptions;
7+
8+
namespace Rubberduck.Inspections.QuickFixes
9+
{
10+
public abstract class RefactoringQuickFixBase : QuickFixBase
11+
{
12+
protected readonly IRefactoring Refactoring;
13+
14+
protected RefactoringQuickFixBase(IRefactoring refactoring, params Type[] inspections)
15+
: base(inspections)
16+
{
17+
Refactoring = refactoring;
18+
}
19+
20+
//The rewriteSession is optional since it is not used in refactoring quickfixes.
21+
public override void Fix(IInspectionResult result, IRewriteSession rewriteSession = null)
22+
{
23+
try
24+
{
25+
Refactor(result);
26+
}
27+
catch (RefactoringAbortedException)
28+
{ }
29+
catch (RefactoringException exception)
30+
{
31+
//This is an error: the inspection returned an invalid result.
32+
Logger.Error(exception);
33+
}
34+
}
35+
36+
protected abstract void Refactor(IInspectionResult result);
37+
38+
public override bool CanFixInProcedure => false;
39+
public override bool CanFixInModule => false;
40+
public override bool CanFixInProject => false;
41+
}
42+
}
Lines changed: 6 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,20 @@
1-
using Rubberduck.Inspections.Abstract;
21
using Rubberduck.Inspections.Concrete;
32
using Rubberduck.Parsing.Inspections.Abstract;
4-
using Rubberduck.Parsing.Rewriter;
5-
using Rubberduck.Parsing.VBA;
6-
using Rubberduck.Refactorings;
73
using Rubberduck.Refactorings.RemoveParameters;
8-
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
9-
using Rubberduck.VBEditor.Utility;
104

115
namespace Rubberduck.Inspections.QuickFixes
126
{
13-
public sealed class RemoveUnusedParameterQuickFix : QuickFixBase
7+
public sealed class RemoveUnusedParameterQuickFix : RefactoringQuickFixBase
148
{
15-
private readonly IDeclarationFinderProvider _declarationFinderProvider;
16-
private readonly IRefactoringPresenterFactory _factory;
17-
private readonly IRewritingManager _rewritingManager;
18-
private readonly ISelectionService _selectionService;
9+
public RemoveUnusedParameterQuickFix(RemoveParametersRefactoring refactoring)
10+
: base(refactoring, typeof(ParameterNotUsedInspection))
11+
{}
1912

20-
public RemoveUnusedParameterQuickFix(IDeclarationFinderProvider declarationFinderProvider, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager, ISelectionService selectionService)
21-
: base(typeof(ParameterNotUsedInspection))
13+
protected override void Refactor(IInspectionResult result)
2214
{
23-
_declarationFinderProvider = declarationFinderProvider;
24-
_factory = factory;
25-
_rewritingManager = rewritingManager;
26-
_selectionService = selectionService;
27-
}
28-
29-
//The rewriteSession is optional since it is not used in this particular quickfix because it is a refactoring quickfix.
30-
public override void Fix(IInspectionResult result, IRewriteSession rewriteSession = null)
31-
{
32-
var refactoring = new RemoveParametersRefactoring(_declarationFinderProvider, _factory, _rewritingManager, _selectionService);
33-
refactoring.QuickFix(result.QualifiedSelection);
15+
((RemoveParametersRefactoring)Refactoring).QuickFix(result.QualifiedSelection);
3416
}
3517

3618
public override string Description(IInspectionResult result) => Resources.Inspections.QuickFixes.RemoveUnusedParameterQuickFix;
37-
38-
public override bool CanFixInProcedure => false;
39-
public override bool CanFixInModule => false;
40-
public override bool CanFixInProject => false;
4119
}
4220
}
Lines changed: 7 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,26 @@
11
using System.Globalization;
2-
using Rubberduck.Inspections.Abstract;
32
using Rubberduck.Inspections.Concrete;
43
using Rubberduck.Inspections.Inspections.Concrete;
5-
using Rubberduck.Interaction;
64
using Rubberduck.Parsing.Inspections.Abstract;
7-
using Rubberduck.Parsing.Rewriter;
8-
using Rubberduck.Parsing.VBA;
9-
using Rubberduck.Refactorings;
105
using Rubberduck.Refactorings.Rename;
116
using Rubberduck.Resources;
12-
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
13-
using Rubberduck.VBEditor.Utility;
147

158
namespace Rubberduck.Inspections.QuickFixes
169
{
17-
public sealed class RenameDeclarationQuickFix : QuickFixBase
10+
public sealed class RenameDeclarationQuickFix : RefactoringQuickFixBase
1811
{
19-
private readonly ISelectionService _selectionService;
20-
private readonly RubberduckParserState _state;
21-
private readonly IRewritingManager _rewritingManager;
22-
private readonly IMessageBox _messageBox;
23-
private readonly IRefactoringPresenterFactory _factory;
24-
25-
public RenameDeclarationQuickFix(RubberduckParserState state, IMessageBox messageBox, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager, ISelectionService selectionService)
26-
: base(typeof(HungarianNotationInspection),
12+
public RenameDeclarationQuickFix(RenameRefactoring refactoring)
13+
: base(refactoring,
14+
typeof(HungarianNotationInspection),
2715
typeof(UseMeaningfulNameInspection),
2816
typeof(DefaultProjectNameInspection),
2917
typeof(UnderscoreInPublicClassModuleMemberInspection),
3018
typeof(ExcelUdfNameIsValidCellReferenceInspection))
31-
{
32-
_selectionService = selectionService;
33-
_state = state;
34-
_rewritingManager = rewritingManager;
35-
_messageBox = messageBox;
36-
_factory = factory;
37-
}
19+
{}
3820

39-
//The rewriteSession is optional since it is not used in this particular quickfix because it is a refactoring quickfix.
40-
public override void Fix(IInspectionResult result, IRewriteSession rewriteSession = null)
21+
protected override void Refactor(IInspectionResult result)
4122
{
42-
var refactoring = new RenameRefactoring(_factory, _messageBox, _state, _state.ProjectsProvider, _rewritingManager, _selectionService);
43-
refactoring.Refactor(result.Target);
23+
Refactoring.Refactor(result.Target);
4424
}
4525

4626
public override string Description(IInspectionResult result)
@@ -49,9 +29,5 @@ public override string Description(IInspectionResult result)
4929
RubberduckUI.ResourceManager.GetString("DeclarationType_" + result.Target.DeclarationType,
5030
CultureInfo.CurrentUICulture));
5131
}
52-
53-
public override bool CanFixInProcedure => false;
54-
public override bool CanFixInModule => false;
55-
public override bool CanFixInProject => false;
5632
}
5733
}

Rubberduck.Core/UI/CodeExplorer/Commands/RenameCommand.cs

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
using Rubberduck.Parsing.Rewriter;
66
using Rubberduck.Parsing.VBA;
77
using Rubberduck.Refactorings;
8+
using Rubberduck.Refactorings.Exceptions;
89
using Rubberduck.Refactorings.Rename;
10+
using Rubberduck.UI.Command.Refactorings.Notifiers;
911
using Rubberduck.VBEditor.Utility;
1012

1113
namespace Rubberduck.UI.CodeExplorer.Commands
@@ -19,26 +21,22 @@ public sealed class RenameCommand : CodeExplorerCommandBase
1921
typeof(CodeExplorerMemberViewModel)
2022
};
2123

22-
private readonly RubberduckParserState _state;
23-
private readonly IRefactoringPresenterFactory _factory;
24-
private readonly IMessageBox _msgBox;
25-
private readonly IRewritingManager _rewritingManager;
26-
private readonly ISelectionService _selectionService;
24+
private readonly IParserStatusProvider _parserStatusProvider;
25+
private readonly IRefactoring _refactoring;
26+
private readonly IRefactoringFailureNotifier _failureNotifier;
2727

28-
public RenameCommand(RubberduckParserState state, IMessageBox msgBox, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager, ISelectionService selectionService)
28+
public RenameCommand(RenameRefactoring refactoring, RenameFailedNotifier renameFailedNotifier, IParserStatusProvider parserStatusProvider)
2929
{
30-
_selectionService = selectionService;
31-
_state = state;
32-
_rewritingManager = rewritingManager;
33-
_msgBox = msgBox;
34-
_factory = factory;
30+
_refactoring = refactoring;
31+
_failureNotifier = renameFailedNotifier;
32+
_parserStatusProvider = parserStatusProvider;
3533
}
3634

3735
public override IEnumerable<Type> ApplicableNodeTypes => ApplicableNodes;
3836

3937
protected override bool EvaluateCanExecute(object parameter)
4038
{
41-
return _state.Status == ParserState.Ready && base.EvaluateCanExecute(parameter);
39+
return _parserStatusProvider.Status == ParserState.Ready && base.EvaluateCanExecute(parameter);
4240
}
4341

4442
protected override void OnExecute(object parameter)
@@ -50,8 +48,16 @@ protected override void OnExecute(object parameter)
5048
return;
5149
}
5250

53-
var refactoring = new RenameRefactoring(_factory, _msgBox, _state, _state.ProjectsProvider, _rewritingManager, _selectionService);
54-
refactoring.Refactor(node.Declaration);
51+
try
52+
{
53+
_refactoring.Refactor(node.Declaration);
54+
}
55+
catch (RefactoringAbortedException)
56+
{}
57+
catch (RefactoringException exception)
58+
{
59+
_failureNotifier.Notify(exception);
60+
}
5561
}
5662
}
5763
}

Rubberduck.Core/UI/Command/NoIndentAnnotationCommand.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,10 @@ protected override bool EvaluateCanExecute(object parameter)
2626
var target = FindTarget(parameter);
2727
using (var pane = _vbe.ActiveCodePane)
2828
{
29-
return !pane.IsWrappingNullReference && target != null &&
30-
target.Annotations.All(a => a.AnnotationType != AnnotationType.NoIndent);
29+
return pane != null
30+
&& !pane.IsWrappingNullReference
31+
&& target != null
32+
&& target.Annotations.All(a => a.AnnotationType != AnnotationType.NoIndent);
3133
}
3234
}
3335

0 commit comments

Comments
 (0)