Skip to content

Commit 6039b16

Browse files
committed
Refactor and reduce duplicated code.
1 parent 9b2ddce commit 6039b16

File tree

2 files changed

+23
-93
lines changed

2 files changed

+23
-93
lines changed

RetailCoder.VBE/Inspections/ParameterCanBeByValInspection.cs

Lines changed: 12 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public override IEnumerable<InspectionResultBase> GetInspectionResults()
2626
var interfaceDeclarationMembers = declarations.FindInterfaceMembers().ToList();
2727
var interfaceScopes = declarations.FindInterfaceImplementationMembers().Concat(interfaceDeclarationMembers).Select(s => s.Scope);
2828

29-
issues.AddRange(GetInterfaceResults(declarations, interfaceDeclarationMembers));
29+
issues.AddRange(GetResults(declarations, interfaceDeclarationMembers));
3030

3131
var eventMembers = declarations.Where(item => !item.IsBuiltIn && item.DeclarationType == DeclarationType.Event).ToList();
3232
var formEventHandlerScopes = State.FindFormEventHandlers().Select(handler => handler.Scope);
@@ -35,7 +35,7 @@ public override IEnumerable<InspectionResultBase> GetInspectionResults()
3535
.Concat(formEventHandlerScopes)
3636
.Concat(eventHandlerScopes);
3737

38-
issues.AddRange(GetEventResults(declarations, eventMembers));
38+
issues.AddRange(GetResults(declarations, eventMembers));
3939

4040
var declareScopes = declarations.Where(item =>
4141
item.DeclarationType == DeclarationType.LibraryFunction
@@ -56,67 +56,28 @@ public override IEnumerable<InspectionResultBase> GetInspectionResults()
5656
return issues;
5757
}
5858

59-
private IEnumerable<ParameterCanBeByValInspectionResult> GetInterfaceResults(List<Declaration> declarations, List<Declaration> interfaceDeclarationMembers)
59+
private IEnumerable<ParameterCanBeByValInspectionResult> GetResults(List<Declaration> declarations, List<Declaration> declarationMembers)
6060
{
61-
foreach (var member in interfaceDeclarationMembers)
61+
foreach (var declaration in declarationMembers)
6262
{
6363
var declarationParameters =
64-
declarations.Where(declaration => declaration.DeclarationType == DeclarationType.Parameter &&
65-
declaration.ParentDeclaration == member)
64+
declarations.Where(d => d.DeclarationType == DeclarationType.Parameter &&
65+
d.ParentDeclaration == declaration)
6666
.OrderBy(o => o.Selection.StartLine)
6767
.ThenBy(t => t.Selection.StartColumn)
6868
.ToList();
6969

7070
var parametersAreByRef = declarationParameters.Select(s => true).ToList();
7171

72-
var implementations = declarations.FindInterfaceImplementationMembers(member).ToList();
73-
foreach (var implementation in implementations)
74-
{
75-
var parameters =
76-
declarations.Where(declaration => declaration.DeclarationType == DeclarationType.Parameter &&
77-
declaration.ParentDeclaration == implementation)
78-
.OrderBy(o => o.Selection.StartLine)
79-
.ThenBy(t => t.Selection.StartColumn)
80-
.ToList();
81-
82-
for (var i = 0; i < parameters.Count; i++)
83-
{
84-
parametersAreByRef[i] = parametersAreByRef[i] && !IsUsedAsByRefParam(declarations, parameters[i]) &&
85-
((VBAParser.ArgContext)parameters[i].Context).BYVAL() == null &&
86-
!parameters[i].References.Any(reference => reference.IsAssignment);
87-
}
88-
}
89-
90-
for (var i = 0; i < declarationParameters.Count; i++)
91-
{
92-
if (parametersAreByRef[i])
93-
{
94-
yield return new ParameterCanBeByValInspectionResult(this, State, declarationParameters[i],
95-
declarationParameters[i].Context, declarationParameters[i].QualifiedName);
96-
}
97-
}
98-
}
99-
}
100-
101-
private IEnumerable<ParameterCanBeByValInspectionResult> GetEventResults(List<Declaration> declarations, List<Declaration> eventDeclarationMembers)
102-
{
103-
foreach (var member in eventDeclarationMembers)
104-
{
105-
var declarationParameters =
106-
declarations.Where(declaration => declaration.DeclarationType == DeclarationType.Parameter &&
107-
declaration.ParentDeclaration == member)
108-
.OrderBy(o => o.Selection.StartLine)
109-
.ThenBy(t => t.Selection.StartColumn)
110-
.ToList();
111-
112-
var parametersAreByRef = declarationParameters.Select(s => true).ToList();
72+
var members = declarationMembers.Any(a => a.DeclarationType == DeclarationType.Event)
73+
? declarations.FindHandlersForEvent(declaration).Select(s => s.Item2).ToList()
74+
: declarations.FindInterfaceImplementationMembers(declaration).ToList();
11375

114-
var handlers = declarations.FindHandlersForEvent(member).Select(s => s.Item2).ToList();
115-
foreach (var handler in handlers)
76+
foreach (var member in members)
11677
{
11778
var parameters =
118-
declarations.Where(declaration => declaration.DeclarationType == DeclarationType.Parameter &&
119-
declaration.ParentDeclaration == handler)
79+
declarations.Where(d => d.DeclarationType == DeclarationType.Parameter &&
80+
d.ParentDeclaration == member)
12081
.OrderBy(o => o.Selection.StartLine)
12182
.ThenBy(t => t.Selection.StartColumn)
12283
.ToList();

RetailCoder.VBE/Inspections/ParameterCanBeByValInspectionResult.cs

Lines changed: 11 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -45,21 +45,18 @@ public PassParameterByValueQuickFix(RubberduckParserState state, Declaration tar
4545

4646
public override void Fix()
4747
{
48-
if (_target.ParentDeclaration.DeclarationType == DeclarationType.Event)
48+
if (_target.ParentDeclaration.DeclarationType == DeclarationType.Event ||
49+
_state.AllUserDeclarations.FindInterfaceMembers().Contains(_target.ParentDeclaration))
4950
{
50-
FixEventMethods();
51-
}
52-
else if (_state.AllUserDeclarations.FindInterfaceMembers().Contains(_target.ParentDeclaration))
53-
{
54-
FixInterfaceMethods();
51+
FixMethods();
5552
}
5653
else
5754
{
5855
FixMethod((VBAParser.ArgContext)Context, Selection);
5956
}
6057
}
6158

62-
private void FixInterfaceMethods()
59+
private void FixMethods()
6360
{
6461
var declarationParameters =
6562
_state.AllUserDeclarations.Where(declaration => declaration.DeclarationType == DeclarationType.Parameter &&
@@ -74,45 +71,17 @@ private void FixInterfaceMethods()
7471
return; // should only happen if the parse results are stale; prevents a crash in that case
7572
}
7673

77-
var implementations = _state.AllUserDeclarations.FindInterfaceImplementationMembers(_target.ParentDeclaration);
78-
foreach (var member in implementations)
79-
{
80-
var parameters =
81-
_state.AllUserDeclarations.Where(declaration => declaration.DeclarationType == DeclarationType.Parameter &&
82-
declaration.ParentDeclaration == member)
83-
.OrderBy(o => o.Selection.StartLine)
84-
.ThenBy(t => t.Selection.StartColumn)
85-
.ToList();
86-
87-
FixMethod((VBAParser.ArgContext)parameters[parameterIndex].Context,
88-
parameters[parameterIndex].QualifiedSelection);
89-
}
90-
91-
FixMethod((VBAParser.ArgContext)declarationParameters[parameterIndex].Context,
92-
declarationParameters[parameterIndex].QualifiedSelection);
93-
}
94-
95-
private void FixEventMethods()
96-
{
97-
var declarationParameters =
98-
_state.AllUserDeclarations.Where(declaration => declaration.DeclarationType == DeclarationType.Parameter &&
99-
declaration.ParentDeclaration == _target.ParentDeclaration)
100-
.OrderBy(o => o.Selection.StartLine)
101-
.ThenBy(t => t.Selection.StartColumn)
102-
.ToList();
103-
104-
var parameterIndex = declarationParameters.IndexOf(_target);
105-
if (parameterIndex == -1)
106-
{
107-
return; // should only happen if the parse results are stale; prevents a crash in that case
108-
}
74+
var members = _target.ParentDeclaration.DeclarationType == DeclarationType.Event
75+
? _state.AllUserDeclarations.FindHandlersForEvent(_target.ParentDeclaration)
76+
.Select(s => s.Item2)
77+
.ToList()
78+
: _state.AllUserDeclarations.FindInterfaceImplementationMembers(_target.ParentDeclaration).ToList();
10979

110-
var handlers = _state.AllUserDeclarations.FindHandlersForEvent(_target.ParentDeclaration).Select(s => s.Item2).ToList();
111-
foreach (var handler in handlers)
80+
foreach (var member in members)
11281
{
11382
var parameters =
11483
_state.AllUserDeclarations.Where(declaration => declaration.DeclarationType == DeclarationType.Parameter &&
115-
declaration.ParentDeclaration == handler)
84+
declaration.ParentDeclaration == member)
11685
.OrderBy(o => o.Selection.StartLine)
11786
.ThenBy(t => t.Selection.StartColumn)
11887
.ToList();

0 commit comments

Comments
 (0)