@@ -24,9 +24,38 @@ public override IEnumerable<InspectionResultBase> GetInspectionResults()
24
24
var issues = new List < ParameterCanBeByValInspectionResult > ( ) ;
25
25
26
26
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 ) ) ;
29
29
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
+ {
30
59
foreach ( var member in interfaceDeclarationMembers )
31
60
{
32
61
var declarationParameters =
@@ -60,37 +89,11 @@ public override IEnumerable<InspectionResultBase> GetInspectionResults()
60
89
{
61
90
if ( parametersAreByRef [ i ] )
62
91
{
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 ) ;
65
94
}
66
95
}
67
96
}
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 ;
94
97
}
95
98
96
99
private static bool IsUsedAsByRefParam ( IEnumerable < Declaration > declarations , Declaration parameter )
0 commit comments