@@ -33,7 +33,7 @@ public class DeclarationFinder
33
33
private IDictionary < DeclarationType , List < Declaration > > _userDeclarationsByType ;
34
34
private IDictionary < QualifiedSelection , List < Declaration > > _declarationsBySelection ;
35
35
private IDictionary < QualifiedSelection , List < IdentifierReference > > _referencesBySelection ;
36
- private IDictionary < QualifiedModuleName , List < IdentifierReference > > _referencesByModule ;
36
+ private IReadOnlyDictionary < QualifiedModuleName , IReadOnlyList < IdentifierReference > > _referencesByModule ;
37
37
private IDictionary < QualifiedMemberName , List < IdentifierReference > > _referencesByMember ;
38
38
39
39
private Lazy < IDictionary < DeclarationType , List < Declaration > > > _builtInDeclarationsByType ;
@@ -43,7 +43,7 @@ public class DeclarationFinder
43
43
private Lazy < IDictionary < VBAParser . ImplementsStmtContext , List < ModuleBodyElementDeclaration > > > _membersByImplementsContext ;
44
44
private Lazy < IDictionary < ClassModuleDeclaration , List < Declaration > > > _interfaceMembers ;
45
45
private Lazy < IDictionary < ClassModuleDeclaration , List < ClassModuleDeclaration > > > _interfaceImplementions ;
46
- private Lazy < IDictionary < ICanBeInterfaceMember , List < ModuleBodyElementDeclaration > > > _implementationsByMember ;
46
+ private Lazy < IDictionary < IInterfaceExposable , List < ModuleBodyElementDeclaration > > > _implementationsByMember ;
47
47
48
48
private Lazy < List < Declaration > > _nonBaseAsType ;
49
49
private Lazy < List < Declaration > > _eventHandlers ;
@@ -129,7 +129,7 @@ private List<Action> CollectionConstructionActions(IReadOnlyList<Declaration> de
129
129
. SelectMany ( declaration => declaration . References )
130
130
. GroupBy ( reference =>
131
131
Declaration . GetModuleParent ( reference . ParentScoping ) . QualifiedName . QualifiedModuleName )
132
- . ToDictionary ( ) ,
132
+ . ToReadonlyDictionary ( ) ,
133
133
( ) =>
134
134
_referencesByMember = declarations
135
135
. SelectMany ( declaration => declaration . References )
@@ -169,7 +169,7 @@ private void InitializeLazyCollections()
169
169
_interfaceMembers = new Lazy < IDictionary < ClassModuleDeclaration , List < Declaration > > > ( FindAllIinterfaceMembersByModule , true ) ;
170
170
_membersByImplementsContext = new Lazy < IDictionary < VBAParser . ImplementsStmtContext , List < ModuleBodyElementDeclaration > > > ( FindAllImplementingMembersByImplementsContext , true ) ;
171
171
_interfaceImplementions = new Lazy < IDictionary < ClassModuleDeclaration , List < ClassModuleDeclaration > > > ( FindAllImplementionsByInterface , true ) ;
172
- _implementationsByMember = new Lazy < IDictionary < ICanBeInterfaceMember , List < ModuleBodyElementDeclaration > > > ( FindAllImplementingMembersByMember , true ) ;
172
+ _implementationsByMember = new Lazy < IDictionary < IInterfaceExposable , List < ModuleBodyElementDeclaration > > > ( FindAllImplementingMembersByMember , true ) ;
173
173
}
174
174
175
175
private IDictionary < ( VBAParser . ImplementsStmtContext Context , Declaration Implementor ) , List < ModuleBodyElementDeclaration > > FindAllImplementingMembers ( )
@@ -195,7 +195,8 @@ private void InitializeLazyCollections()
195
195
output . Add ( ( impl . Context , impl . IdentifierReference . ParentScoping ) ,
196
196
( ( ClassModuleDeclaration ) impl . IdentifierReference . ParentScoping ) . Members . Where ( item =>
197
197
item is ModuleBodyElementDeclaration member && ReferenceEquals ( member . InterfaceImplemented ,
198
- impl . IdentifierReference . Declaration ) ) . Cast < ModuleBodyElementDeclaration > ( ) . ToList ( ) ) ;
198
+ impl . IdentifierReference . Declaration ) )
199
+ . Cast < ModuleBodyElementDeclaration > ( ) . ToList ( ) ) ;
199
200
}
200
201
201
202
return output ;
@@ -210,11 +211,12 @@ private Dictionary<ClassModuleDeclaration, List<ClassModuleDeclaration>> FindAll
210
211
. Where ( type => type . ImplementedInterfaces . Contains ( intrface ) ) . ToList ( ) ) ;
211
212
}
212
213
213
- private IDictionary < ICanBeInterfaceMember , List < ModuleBodyElementDeclaration > > FindAllImplementingMembersByMember ( )
214
+ private IDictionary < IInterfaceExposable , List < ModuleBodyElementDeclaration > > FindAllImplementingMembersByMember ( )
214
215
{
215
216
var implementations = _implementingMembers . Value . AllValues ( ) ;
216
217
return implementations
217
- . GroupBy ( member => ( ICanBeInterfaceMember ) member . InterfaceMemberImplemented )
218
+
219
+ . GroupBy ( member => ( IInterfaceExposable ) member . InterfaceMemberImplemented )
218
220
. ToDictionary ( member => member . Key , member => member . ToList ( ) ) ;
219
221
}
220
222
@@ -231,7 +233,7 @@ private IDictionary<ClassModuleDeclaration, List<Declaration>> FindAllIinterface
231
233
. ToDictionary (
232
234
module => module ,
233
235
module => module . Members
234
- . Where ( member => member is ICanBeInterfaceMember candidate && candidate . IsInterfaceMember )
236
+ . Where ( member => member is IInterfaceExposable candidate && candidate . IsInterfaceMember )
235
237
. ToList ( ) ) ;
236
238
}
237
239
@@ -402,9 +404,10 @@ public IEnumerable<Declaration> FindInterfaceMembersForImplementsContext(VBAPars
402
404
/// <returns>The selected interface if found, null if not found.</returns>
403
405
public ClassModuleDeclaration FindInterface ( QualifiedSelection selection )
404
406
{
405
- return FindAllUserInterfaces ( ) . FirstOrDefault ( declaration => declaration . References
406
- . Where ( refrnce => refrnce . Context . GetAncestor < VBAParser . ImplementsStmtContext > ( ) != null )
407
- . Any ( reference => ReferenceEquals ( reference . Declaration , declaration ) ) ) ;
407
+ return FindAllUserInterfaces ( )
408
+ . FirstOrDefault ( declaration => declaration . References
409
+ . Any ( reference => reference . Context . GetAncestor < VBAParser . ImplementsStmtContext > ( ) != null
410
+ && ReferenceEquals ( reference . Declaration , declaration ) ) ) ;
408
411
}
409
412
410
413
/// <summary>
@@ -454,7 +457,7 @@ public IEnumerable<ModuleBodyElementDeclaration> FindAllInterfaceImplementingMem
454
457
/// <returns>All concrete implementations of the passed interface declaration.</returns>
455
458
public IEnumerable < ModuleBodyElementDeclaration > FindInterfaceImplementationMembers ( Declaration interfaceMember )
456
459
{
457
- if ( ! ( interfaceMember is ICanBeInterfaceMember member ) )
460
+ if ( ! ( interfaceMember is IInterfaceExposable member ) )
458
461
{
459
462
return Enumerable . Empty < ModuleBodyElementDeclaration > ( ) ;
460
463
}
@@ -1131,18 +1134,17 @@ private static bool IsSubroutineOrProperty(Declaration declaration)
1131
1134
/// <summary>
1132
1135
/// Creates a dictionary of identifier references, keyed by module.
1133
1136
/// </summary>
1134
- public IReadOnlyDictionary < QualifiedModuleName , IEnumerable < IdentifierReference > > IdentifierReferences ( )
1137
+ public IReadOnlyDictionary < QualifiedModuleName , IReadOnlyList < IdentifierReference > > IdentifierReferences ( )
1135
1138
{
1136
- return new ReadOnlyDictionary < QualifiedModuleName , IEnumerable < IdentifierReference > > (
1137
- _referencesByModule . ToDictionary ( kvp => kvp . Key , kvp => kvp . Value . AsEnumerable ( ) ) ) ;
1139
+ return _referencesByModule ;
1138
1140
}
1139
1141
1140
1142
/// <summary>
1141
1143
/// Gets all identifier references in the specified module.
1142
1144
/// </summary>
1143
1145
public IEnumerable < IdentifierReference > IdentifierReferences ( QualifiedModuleName module )
1144
1146
{
1145
- return _referencesByModule . TryGetValue ( module , out List < IdentifierReference > value )
1147
+ return _referencesByModule . TryGetValue ( module , out var value )
1146
1148
? value
1147
1149
: Enumerable . Empty < IdentifierReference > ( ) ;
1148
1150
}
0 commit comments