Skip to content

Commit 59e940b

Browse files
committed
Clean up inspection/quick fix
1 parent 7079946 commit 59e940b

File tree

2 files changed

+64
-56
lines changed

2 files changed

+64
-56
lines changed

RetailCoder.VBE/Inspections/ParameterCanBeByValInspection.cs

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,38 @@ public override IEnumerable<InspectionResultBase> GetInspectionResults()
2424
var issues = new List<ParameterCanBeByValInspectionResult>();
2525

2626
var interfaceDeclarationMembers = declarations.FindInterfaceMembers().ToList();
27-
var interfaceImplementationMembers = declarations.FindInterfaceImplementationMembers().ToList();
28-
var allInterfaceMembers = interfaceImplementationMembers.Concat(interfaceDeclarationMembers);
27+
var allInterfaceMembers = declarations.FindInterfaceImplementationMembers().Concat(interfaceDeclarationMembers);
28+
issues.AddRange(GetInterfaceResults(declarations, interfaceDeclarationMembers));
2929

30+
var formEventHandlerScopes = State.FindFormEventHandlers()
31+
.Select(handler => handler.Scope);
32+
33+
var eventScopes = declarations.Where(item =>
34+
!item.IsBuiltIn && item.DeclarationType == DeclarationType.Event)
35+
.Select(e => e.Scope).Concat(State.AllDeclarations.FindBuiltInEventHandlers().Select(e => e.Scope));
36+
37+
var declareScopes = declarations.Where(item =>
38+
item.DeclarationType == DeclarationType.LibraryFunction
39+
|| item.DeclarationType == DeclarationType.LibraryProcedure)
40+
.Select(e => e.Scope);
41+
42+
var ignoredScopes = formEventHandlerScopes.Concat(eventScopes).Concat(declareScopes);
43+
44+
issues.AddRange(declarations.Where(declaration =>
45+
!declaration.IsArray
46+
&& !ignoredScopes.Contains(declaration.ParentScope)
47+
&& declaration.DeclarationType == DeclarationType.Parameter
48+
&& !allInterfaceMembers.Select(m => m.Scope).Contains(declaration.ParentScope)
49+
&& ((VBAParser.ArgContext)declaration.Context).BYVAL() == null
50+
&& !IsUsedAsByRefParam(declarations, declaration)
51+
&& !declaration.References.Any(reference => reference.IsAssignment))
52+
.Select(issue => new ParameterCanBeByValInspectionResult(this, State, issue, issue.Context, issue.QualifiedName)));
53+
54+
return issues;
55+
}
56+
57+
private IEnumerable<ParameterCanBeByValInspectionResult> GetInterfaceResults(List<Declaration> declarations, List<Declaration> interfaceDeclarationMembers)
58+
{
3059
foreach (var member in interfaceDeclarationMembers)
3160
{
3261
var declarationParameters =
@@ -60,37 +89,11 @@ public override IEnumerable<InspectionResultBase> GetInspectionResults()
6089
{
6190
if (parametersAreByRef[i])
6291
{
63-
issues.Add(new ParameterCanBeByValInspectionResult(this, State, declarationParameters[i],
64-
declarationParameters[i].Context, declarationParameters[i].QualifiedName));
92+
yield return new ParameterCanBeByValInspectionResult(this, State, declarationParameters[i],
93+
declarationParameters[i].Context, declarationParameters[i].QualifiedName);
6594
}
6695
}
6796
}
68-
69-
var formEventHandlerScopes = State.FindFormEventHandlers()
70-
.Select(handler => handler.Scope);
71-
72-
var eventScopes = declarations.Where(item =>
73-
!item.IsBuiltIn && item.DeclarationType == DeclarationType.Event)
74-
.Select(e => e.Scope).Concat(State.AllDeclarations.FindBuiltInEventHandlers().Select(e => e.Scope));
75-
76-
var declareScopes = declarations.Where(item =>
77-
item.DeclarationType == DeclarationType.LibraryFunction
78-
|| item.DeclarationType == DeclarationType.LibraryProcedure)
79-
.Select(e => e.Scope);
80-
81-
var ignoredScopes = formEventHandlerScopes.Concat(eventScopes).Concat(declareScopes);
82-
83-
issues.AddRange(declarations.Where(declaration =>
84-
!declaration.IsArray
85-
&& !ignoredScopes.Contains(declaration.ParentScope)
86-
&& declaration.DeclarationType == DeclarationType.Parameter
87-
&& !allInterfaceMembers.Select(m => m.Scope).Contains(declaration.ParentScope)
88-
&& ((VBAParser.ArgContext)declaration.Context).BYVAL() == null
89-
&& !IsUsedAsByRefParam(declarations, declaration)
90-
&& !declaration.References.Any(reference => reference.IsAssignment))
91-
.Select(issue => new ParameterCanBeByValInspectionResult(this, State, issue, issue.Context, issue.QualifiedName)));
92-
93-
return issues;
9497
}
9598

9699
private static bool IsUsedAsByRefParam(IEnumerable<Declaration> declarations, Declaration parameter)

RetailCoder.VBE/Inspections/ParameterCanBeByValInspectionResult.cs

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -46,43 +46,48 @@ public PassParameterByValueQuickFix(RubberduckParserState state, Declaration tar
4646

4747
public override void Fix()
4848
{
49-
if (!_state.AllUserDeclarations.FindInterfaceMembers().Contains(_target.ParentDeclaration))
49+
if (_state.AllUserDeclarations.FindInterfaceMembers().Contains(_target.ParentDeclaration))
5050
{
51-
FixMethod((VBAParser.ArgContext) Context, Selection);
51+
FixInterfaceMethods();
5252
}
5353
else
5454
{
55-
var declarationParameters =
55+
FixMethod((VBAParser.ArgContext)Context, Selection);
56+
}
57+
}
58+
59+
private void FixInterfaceMethods()
60+
{
61+
var declarationParameters =
5662
_state.AllUserDeclarations.Where(declaration => declaration.DeclarationType == DeclarationType.Parameter &&
5763
declaration.ParentDeclaration == _target.ParentDeclaration)
5864
.OrderBy(o => o.Selection.StartLine)
5965
.ThenBy(t => t.Selection.StartColumn)
6066
.ToList();
6167

62-
var parameterIndex = declarationParameters.IndexOf(_target);
63-
64-
if (parameterIndex == -1)
65-
{
66-
return; // should only happen if the parse results are stale; prevents a crash in that case
67-
}
68-
69-
var implementations = _state.AllUserDeclarations.FindInterfaceImplementationMembers(_target.ParentDeclaration);
70-
foreach (var member in implementations)
71-
{
72-
var parameters =
73-
_state.AllUserDeclarations.Where(declaration => declaration.DeclarationType == DeclarationType.Parameter &&
74-
declaration.ParentDeclaration == member)
75-
.OrderBy(o => o.Selection.StartLine)
76-
.ThenBy(t => t.Selection.StartColumn)
77-
.ToList();
78-
79-
FixMethod((VBAParser.ArgContext) parameters[parameterIndex].Context,
80-
parameters[parameterIndex].QualifiedSelection);
81-
}
82-
83-
FixMethod((VBAParser.ArgContext) declarationParameters[parameterIndex].Context,
84-
declarationParameters[parameterIndex].QualifiedSelection);
68+
var parameterIndex = declarationParameters.IndexOf(_target);
69+
70+
if (parameterIndex == -1)
71+
{
72+
return; // should only happen if the parse results are stale; prevents a crash in that case
8573
}
74+
75+
var implementations = _state.AllUserDeclarations.FindInterfaceImplementationMembers(_target.ParentDeclaration);
76+
foreach (var member in implementations)
77+
{
78+
var parameters =
79+
_state.AllUserDeclarations.Where(declaration => declaration.DeclarationType == DeclarationType.Parameter &&
80+
declaration.ParentDeclaration == member)
81+
.OrderBy(o => o.Selection.StartLine)
82+
.ThenBy(t => t.Selection.StartColumn)
83+
.ToList();
84+
85+
FixMethod((VBAParser.ArgContext)parameters[parameterIndex].Context,
86+
parameters[parameterIndex].QualifiedSelection);
87+
}
88+
89+
FixMethod((VBAParser.ArgContext)declarationParameters[parameterIndex].Context,
90+
declarationParameters[parameterIndex].QualifiedSelection);
8691
}
8792

8893
private void FixMethod(VBAParser.ArgContext context, QualifiedSelection qualifiedSelection)

0 commit comments

Comments
 (0)