Skip to content

Commit c106c80

Browse files
committed
Add abstract Predicate guard clause to base class
1 parent a5092e6 commit c106c80

File tree

5 files changed

+19
-5
lines changed

5 files changed

+19
-5
lines changed

Rubberduck.Refactorings/DeleteDeclarations/Abstract/DeleteElementsRefactoringActionBase.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ public DeleteElementsRefactoringActionBase(IDeclarationFinderProvider declaratio
3131
_declarationDeletionGroupsGenerator = deletionGroupsGeneratorFactory.Create();
3232
}
3333

34+
protected abstract bool CanRefactorAllTargets(TModel model);
35+
3436
protected void DeleteDeclarations(IDeleteDeclarationsModel model,
3537
IRewriteSession rewriteSession,
3638
Func<IEnumerable<Declaration>, IRewriteSession, IDeclarationDeletionTargetFactory, IEnumerable<IDeclarationDeletionTarget>> generateDeletionTargets)

Rubberduck.Refactorings/DeleteDeclarations/DeleteEnumMembers/DeleteEnumMembersRefactoringAction.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,15 @@ public DeleteEnumMembersRefactoringAction(IDeclarationFinderProvider declaration
1818

1919
public override void Refactor(DeleteEnumMembersModel model, IRewriteSession rewriteSession)
2020
{
21-
if (model.Targets.Any(t => t.DeclarationType != DeclarationType.EnumerationMember))
21+
if (!CanRefactorAllTargets(model))
2222
{
2323
throw new InvalidOperationException("Only DeclarationType.EnumerationMember can be refactored by this class");
2424
}
2525

2626
DeleteDeclarations(model, rewriteSession, (declarations, rewriterSession, targetFactory) => targetFactory.CreateMany(declarations, rewriteSession));
2727
}
28+
29+
protected override bool CanRefactorAllTargets(DeleteEnumMembersModel model)
30+
=> model.Targets.All(t => t.DeclarationType == DeclarationType.EnumerationMember);
2831
}
2932
}

Rubberduck.Refactorings/DeleteDeclarations/DeleteModuleElements/DeleteModuleElementsRefactoringAction.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,17 @@ public DeleteModuleElementsRefactoringAction(IDeclarationFinderProvider declarat
2020

2121
public override void Refactor(DeleteModuleElementsModel model, IRewriteSession rewriteSession)
2222
{
23-
if (model.Targets.Any(t => !(t.ParentDeclaration is ModuleDeclaration)))
23+
if (!CanRefactorAllTargets(model))
2424
{
2525
throw new InvalidOperationException("Only module-scope declarations can be refactored by this object");
2626
}
2727

2828
DeleteDeclarations(model, rewriteSession, base.CreateDeletionTargetsSupportingPartialDeletions);
2929
}
3030

31+
protected override bool CanRefactorAllTargets(DeleteModuleElementsModel model)
32+
=> model.Targets.All(t => t.ParentDeclaration is ModuleDeclaration);
33+
3134
protected override VBAParser.EndOfStatementContext GetPrecedingNonDeletedEOSContextForGroup(IDeclarationDeletionGroup deletionGroup)
3235
{
3336
var deleteTarget = deletionGroup.Targets.FirstOrDefault();

Rubberduck.Refactorings/DeleteDeclarations/DeleteProcedureScopeElements/DeleteProcedureScopeElementsRefactoringAction.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,17 @@ public DeleteProcedureScopeElementsRefactoringAction(IDeclarationFinderProvider
2323

2424
public override void Refactor(DeleteProcedureScopeElementsModel model, IRewriteSession rewriteSession)
2525
{
26-
if (model.Targets.Any(t => t.ParentDeclaration is ModuleDeclaration))
26+
if (!CanRefactorAllTargets(model))
2727
{
28-
throw new InvalidOperationException("Only declarations within procedures can be refactored by this object");
28+
throw new InvalidOperationException("Only declarations within procedures other than parameters can be refactored by this object");
2929
}
3030

3131
DeleteDeclarations(model, rewriteSession, CreateDeletionTargetsLocalScope);
3232
}
3333

34+
protected override bool CanRefactorAllTargets(DeleteProcedureScopeElementsModel model)
35+
=> model.Targets.All(t => t.ParentDeclaration.DeclarationType.HasFlag(DeclarationType.Member) && !t.DeclarationType.HasFlag(DeclarationType.Parameter));
36+
3437
//Creating local targets are the same as creating a module level deletion targets except that Labels
3538
//need to be accounted for
3639
private IEnumerable<IDeclarationDeletionTarget> CreateDeletionTargetsLocalScope(IEnumerable<Declaration> declarations, IRewriteSession rewriteSession, IDeclarationDeletionTargetFactory targetFactory)

Rubberduck.Refactorings/DeleteDeclarations/DeleteUdtMembers/DeleteUDTMembersRefactoringAction.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,15 @@ public DeleteUDTMembersRefactoringAction(IDeclarationFinderProvider declarationF
1818

1919
public override void Refactor(DeleteUDTMembersModel model, IRewriteSession rewriteSession)
2020
{
21-
if (model.Targets.Any(t => t.DeclarationType != DeclarationType.UserDefinedTypeMember))
21+
if (!CanRefactorAllTargets(model))
2222
{
2323
throw new InvalidOperationException("Only DeclarationType.UserDefinedTypeMember can be refactored by this class");
2424
}
2525

2626
DeleteDeclarations(model, rewriteSession, (declarations, rewriterSession, targetFactory) => targetFactory.CreateMany(declarations, rewriteSession));
2727
}
28+
29+
protected override bool CanRefactorAllTargets(DeleteUDTMembersModel model)
30+
=> model.Targets.Any(t => t.DeclarationType == DeclarationType.UserDefinedTypeMember);
2831
}
2932
}

0 commit comments

Comments
 (0)