@@ -98,15 +98,23 @@ public DeclarationFinder(IReadOnlyList<Declaration> declarations, IEnumerable<IA
98
98
cls . References . Where ( reference => ParserRuleContextHelper . HasParent < VBAParser . ImplementsStmtContext > ( reference . Context ) )
99
99
. Select ( reference => new { IdentifierReference = reference , Context = ParserRuleContextHelper . GetParent < VBAParser . ImplementsStmtContext > ( reference . Context ) } ) ) ;
100
100
101
- var interfaceMembers = implementsInstructions . Select ( item => new
101
+ var interfaceModules = implementsInstructions . Select ( item => item . IdentifierReference . Declaration ) . Distinct ( ) ;
102
+
103
+ var interfaceMembers = interfaceModules . Select ( item => new
102
104
{
103
- InterfaceModule = item . IdentifierReference . Declaration ,
104
- InterfaceMembers = _declarations [ item . IdentifierReference . Declaration . QualifiedName . QualifiedModuleName ]
105
- . Where ( member => member . DeclarationType . HasFlag ( DeclarationType . Member ) )
105
+ InterfaceModule = item ,
106
+ InterfaceMembers = _declarations [ item . QualifiedName . QualifiedModuleName ]
107
+ . Where ( member => member . DeclarationType . HasFlag ( DeclarationType . Member ) )
106
108
} ) ;
107
109
108
110
_interfaceMembers = new Lazy < ConcurrentDictionary < Declaration , Declaration [ ] > > ( ( ) =>
109
- new ConcurrentDictionary < Declaration , Declaration [ ] > ( interfaceMembers . ToDictionary ( item => item . InterfaceModule , item => item . InterfaceMembers . ToArray ( ) ) ) , true ) ;
111
+ new ConcurrentDictionary < Declaration , Declaration [ ] > (
112
+ interfaceMembers . ToDictionary (
113
+ item => item . InterfaceModule ,
114
+ item => item . InterfaceMembers . ToArray ( )
115
+ )
116
+ )
117
+ , true ) ;
110
118
111
119
var implementingNames = new Lazy < IEnumerable < string > > ( ( ) => implementsInstructions . SelectMany ( item =>
112
120
_declarations [ item . IdentifierReference . Declaration . QualifiedName . QualifiedModuleName ]
0 commit comments