Skip to content

Commit 25b963c

Browse files
committed
Rework EncapsulateFieldRefactoring factories
Let CW supply factories where possible. Resulted in removal of several explicitly defined factory class files...which led to a lot of renames, refactoring, and some file structure changes.
1 parent f36df0d commit 25b963c

25 files changed

+306
-395
lines changed

Rubberduck.Main/Root/RubberduckIoCInstaller.cs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -411,18 +411,8 @@ private void RegisterEncapsulateFieldRefactoringFactories(IWindsorContainer cont
411411
container.Register(Component.For<IEncapsulateFieldModelFactory>()
412412
.ImplementedBy<EncapsulateFieldModelFactory>()
413413
.LifestyleSingleton());
414-
container.Register(Component.For<IEncapsulateFieldCollectionsProviderFactory>()
415-
.ImplementedBy<EncapsulateFieldCollectionsProviderFactory>()
416-
.LifestyleSingleton());
417-
container.Register(Component.For<IObjectStateUserDefinedTypeFactory>()
418-
.ImplementedBy<ObjectStateUserDefinedTypeFactory>()
419-
.LifestyleSingleton());
420-
container.Register(Component.For<IEncapsulateFieldConflictFinderFactory>()
421-
.ImplementedBy<EncapsulateFieldConflictFinderFactory>()
422-
.LifestyleSingleton());
423414
}
424415

425-
426416
private void RegisterQuickFixes(IWindsorContainer container, Assembly[] assembliesToRegister)
427417
{
428418
foreach (var assembly in assembliesToRegister)

Rubberduck.Refactorings/EncapsulateField/ConflictDetection/EncapsulateFieldConflictFinder.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@
1111

1212
namespace Rubberduck.Refactorings.EncapsulateField
1313
{
14+
public interface IEncapsulateFieldConflictFinderFactory
15+
{
16+
IEncapsulateFieldConflictFinder Create(IDeclarationFinderProvider declarationFinderProvider,
17+
IEnumerable<IEncapsulateFieldCandidate> candidates,
18+
IEnumerable<IObjectStateUDT> objectStateUDTs);
19+
}
20+
1421
public interface IEncapsulateFieldConflictFinder
1522
{
1623
bool IsConflictingIdentifier(IEncapsulateFieldCandidate field, string identifierToCompare, out string errorMessage);

Rubberduck.Refactorings/EncapsulateField/ConflictDetection/EncapsulateFieldConflictFinderFactory.cs

Lines changed: 0 additions & 26 deletions
This file was deleted.
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
using Rubberduck.Parsing.Symbols;
2+
using Rubberduck.Parsing.VBA;
3+
using Rubberduck.VBEditor;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
7+
namespace Rubberduck.Refactorings.EncapsulateField
8+
{
9+
public interface IEncapsulateFieldCandidateSetsProviderFactory
10+
{
11+
IEncapsulateFieldCandidateSetsProvider Create(IDeclarationFinderProvider declarationFinderProvider,
12+
IEncapsulateFieldCandidateFactory encapsulateFieldCandidateFactory,
13+
QualifiedModuleName qualifiedModuleName);
14+
}
15+
16+
public interface IEncapsulateFieldCandidateSetsProvider
17+
{
18+
IReadOnlyCollection<IEncapsulateFieldCandidate> EncapsulateFieldUseBackingFieldCandidates { get; }
19+
IReadOnlyCollection<IEncapsulateFieldAsUDTMemberCandidate> EncapsulateFieldUseBackingUDTMemberCandidates { get; }
20+
IReadOnlyCollection<IObjectStateUDT> ObjectStateFieldCandidates { get; }
21+
}
22+
23+
/// <summary>
24+
/// EncapsulateFieldCandidateSetsProvider provides access to a sets of
25+
/// EncapsulateField candidate instances to be shared among EncapsulateFieldRefactoringActions.
26+
/// </summary>
27+
public class EncapsulateFieldCandidateSetsProvider : IEncapsulateFieldCandidateSetsProvider
28+
{
29+
public EncapsulateFieldCandidateSetsProvider(IDeclarationFinderProvider declarationFinderProvider,
30+
IEncapsulateFieldCandidateFactory encapsulateFieldCandidateFactory,
31+
QualifiedModuleName qualifiedModuleName)
32+
{
33+
EncapsulateFieldUseBackingFieldCandidates = declarationFinderProvider.DeclarationFinder.Members(qualifiedModuleName, DeclarationType.Variable)
34+
.Where(v => v.ParentDeclaration is ModuleDeclaration
35+
&& !v.IsWithEvents)
36+
.Select(f => encapsulateFieldCandidateFactory.CreateFieldCandidate(f))
37+
.ToList();
38+
39+
var objectStateUDTCandidates = EncapsulateFieldUseBackingFieldCandidates
40+
.OfType<IUserDefinedTypeCandidate>()
41+
.Where(fc => fc.Declaration.Accessibility == Accessibility.Private
42+
&& fc.Declaration.AsTypeDeclaration.Accessibility == Accessibility.Private)
43+
.Select(udtc => encapsulateFieldCandidateFactory.CreateObjectStateField(udtc))
44+
//If multiple fields of the same UserDefinedType exist, they are all disqualified as candidates to host a module's state.
45+
.ToLookup(objectStateUDTCandidate => objectStateUDTCandidate.Declaration.AsTypeDeclaration.IdentifierName)
46+
.Where(osc => osc.Count() == 1)
47+
.SelectMany(osc => osc)
48+
.ToList();
49+
50+
var defaultObjectStateUDT = encapsulateFieldCandidateFactory.CreateDefaultObjectStateField(qualifiedModuleName);
51+
objectStateUDTCandidates.Add(defaultObjectStateUDT);
52+
ObjectStateFieldCandidates = objectStateUDTCandidates;
53+
54+
EncapsulateFieldUseBackingUDTMemberCandidates = EncapsulateFieldUseBackingFieldCandidates
55+
.Select(fc => encapsulateFieldCandidateFactory.CreateUDTMemberCandidate(fc, defaultObjectStateUDT))
56+
.ToList();
57+
}
58+
59+
public IReadOnlyCollection<IEncapsulateFieldCandidate> EncapsulateFieldUseBackingFieldCandidates { get; }
60+
61+
public IReadOnlyCollection<IEncapsulateFieldAsUDTMemberCandidate> EncapsulateFieldUseBackingUDTMemberCandidates { get; }
62+
63+
public IReadOnlyCollection<IObjectStateUDT> ObjectStateFieldCandidates { get; }
64+
}
65+
}

Rubberduck.Refactorings/EncapsulateField/EncapsulateFieldCollectionsProvider.cs

Lines changed: 0 additions & 92 deletions
This file was deleted.

Rubberduck.Refactorings/EncapsulateField/EncapsulateFieldCollectionsProviderFactory.cs

Lines changed: 0 additions & 37 deletions
This file was deleted.

Rubberduck.Refactorings/EncapsulateField/EncapsulateFieldInsertNewCode/EncapsulateFieldCodeBuilderFactory.cs

Lines changed: 0 additions & 22 deletions
This file was deleted.

Rubberduck.Refactorings/EncapsulateField/EncapsulateFieldInsertNewCode/EncapsulateFieldInsertNewCodeRefactoringAction.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@ public EncapsulateFieldInsertNewCodeRefactoringAction(
2525
IDeclarationFinderProvider declarationFinderProvider,
2626
IRewritingManager rewritingManager,
2727
IPropertyAttributeSetsGenerator propertyAttributeSetsGenerator,
28-
IEncapsulateFieldCodeBuilderFactory encapsulateFieldCodeBuilderFactory)
28+
IEncapsulateFieldCodeBuilder encapsulateFieldCodeBuilder)
2929
: base(rewritingManager)
3030
{
3131
_declarationFinderProvider = declarationFinderProvider;
3232
_propertyAttributeSetsGenerator = propertyAttributeSetsGenerator;
33-
_encapsulateFieldCodeBuilder = encapsulateFieldCodeBuilderFactory.Create();
33+
_encapsulateFieldCodeBuilder = encapsulateFieldCodeBuilder;
3434
}
3535

3636
public override void Refactor(EncapsulateFieldInsertNewCodeModel model, IRewriteSession rewriteSession)

Rubberduck.Refactorings/EncapsulateField/EncapsulateFieldInsertNewCode/NewContentAggregator.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ public enum NewContentType
1111
CodeSectionBlock,
1212
}
1313

14+
public interface INewContentAggregatorFactory
15+
{
16+
INewContentAggregator Create();
17+
}
18+
1419
public interface INewContentAggregator
1520
{
1621
/// <summary>

Rubberduck.Refactorings/EncapsulateField/EncapsulateFieldInsertNewCode/NewContentAggregatorFactory.cs

Lines changed: 0 additions & 16 deletions
This file was deleted.

Rubberduck.Refactorings/EncapsulateField/EncapsulateFieldModel.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public EncapsulateFieldModel(EncapsulateFieldUseBackingFieldModel backingFieldMo
3535

3636
public Action<EncapsulateFieldModel> StrategyChangedAction { set; get; } = (m) => { };
3737

38-
public Action<EncapsulateFieldModel> ObjectStateUDTChangedAction { set; get; } = (m) => { };
38+
public Action<EncapsulateFieldModel> ObjectStateFieldChangedAction { set; get; } = (m) => { };
3939

4040
public IReadOnlyCollection<IObjectStateUDT> ObjectStateUDTCandidates { private set; get; }
4141

@@ -48,7 +48,7 @@ public IObjectStateUDT ObjectStateUDTField
4848
if (EncapsulateFieldUseBackingUDTMemberModel.ObjectStateUDTField != value)
4949
{
5050
EncapsulateFieldUseBackingUDTMemberModel.ObjectStateUDTField = value;
51-
ObjectStateUDTChangedAction(this);
51+
ObjectStateFieldChangedAction(this);
5252
}
5353
}
5454
get => EncapsulateFieldStrategy == EncapsulateFieldStrategy.ConvertFieldsToUDTMembers

0 commit comments

Comments
 (0)