@@ -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 )
0 commit comments