@@ -56,33 +56,46 @@ public IEnumerable<Declaration> FindEventHandlers(Declaration control)
56
56
DeclarationType . PropertySet
57
57
} ;
58
58
59
+ private IEnumerable < Declaration > _interfaceMembers ;
60
+
59
61
/// <summary>
60
62
/// Finds all interface members.
61
63
/// </summary>
62
64
public IEnumerable < Declaration > FindInterfaceMembers ( )
63
65
{
66
+ if ( _interfaceMembers != null )
67
+ {
68
+ return _interfaceMembers ;
69
+ }
70
+
64
71
var classes = _declarations . Where ( item => item . DeclarationType == DeclarationType . Class ) ;
65
72
var interfaces = classes . Where ( item => item . References . Any ( reference =>
66
- reference . Context . Parent is VBAParser . ImplementsStmtContext ) )
67
- . Select ( i => i . Scope )
68
- . ToList ( ) ;
69
-
70
- var members = _declarations . Where ( item => ProcedureTypes . Contains ( item . DeclarationType )
71
- && interfaces . Any ( i => item . ParentScope . StartsWith ( i ) ) ) ;
73
+ reference . Context . Parent is VBAParser . ImplementsStmtContext ) )
74
+ . Select ( i => i . Scope )
75
+ . ToList ( ) ;
72
76
73
- return members ;
77
+ _interfaceMembers = _declarations . Where ( item => ProcedureTypes . Contains ( item . DeclarationType )
78
+ && interfaces . Any ( i => item . ParentScope . StartsWith ( i ) ) ) ;
79
+ return _interfaceMembers ;
74
80
}
75
81
82
+ private IEnumerable < Declaration > _interfaceImplementationMembers ;
83
+
76
84
/// <summary>
77
85
/// Finds all class members that are interface implementation members.
78
86
/// </summary>
79
87
public IEnumerable < Declaration > FindInterfaceImplementationMembers ( )
80
88
{
89
+ if ( _interfaceImplementationMembers != null )
90
+ {
91
+ return _interfaceImplementationMembers ;
92
+ }
93
+
81
94
var members = FindInterfaceMembers ( ) ;
82
- var implementations = _declarations . Where ( item => ProcedureTypes . Contains ( item . DeclarationType )
95
+ _interfaceImplementationMembers = _declarations . Where ( item => ProcedureTypes . Contains ( item . DeclarationType )
83
96
&& members . Select ( m => m . ComponentName + '_' + m . IdentifierName ) . Contains ( item . IdentifierName ) ) ;
84
97
85
- return implementations ;
98
+ return _interfaceImplementationMembers ;
86
99
}
87
100
}
88
101
}
0 commit comments