@@ -263,18 +263,29 @@ public List<Declaration> GetDeclarationsForReference(Reference reference)
263
263
break ;
264
264
}
265
265
266
- ComInformation comInfo ;
267
- if ( _comInformation . TryGetValue ( typeAttributes . guid , out comInfo ) )
266
+ if ( typeAttributes . guid == Guid . Empty )
268
267
{
269
- comInfo . TypeQualifiedModuleName = typeQualifiedModuleName ;
270
- comInfo . ModuleDeclaration = moduleDeclaration ;
271
- comInfo . TypeDeclarationType = typeDeclarationType ;
268
+ LoadDeclarationsInModule ( output ,
269
+ new ComInformation ( typeAttributes , 0 , info , typeName , typeQualifiedModuleName ,
270
+ moduleDeclaration ,
271
+ typeDeclarationType ) ) ;
272
272
}
273
273
else
274
274
{
275
- _comInformation . Add ( typeAttributes . guid ,
276
- new ComInformation ( typeAttributes , 0 , info , typeName , typeQualifiedModuleName , moduleDeclaration ,
277
- typeDeclarationType ) ) ;
275
+ ComInformation comInfo ;
276
+ if ( _comInformation . TryGetValue ( typeAttributes . guid , out comInfo ) )
277
+ {
278
+ comInfo . TypeQualifiedModuleName = typeQualifiedModuleName ;
279
+ comInfo . ModuleDeclaration = moduleDeclaration ;
280
+ comInfo . TypeDeclarationType = typeDeclarationType ;
281
+ }
282
+ else
283
+ {
284
+ _comInformation . Add ( typeAttributes . guid ,
285
+ new ComInformation ( typeAttributes , 0 , info , typeName , typeQualifiedModuleName ,
286
+ moduleDeclaration ,
287
+ typeDeclarationType ) ) ;
288
+ }
278
289
}
279
290
280
291
info . ReleaseTypeAttr ( typeAttributesPointer ) ;
@@ -284,64 +295,69 @@ public List<Declaration> GetDeclarationsForReference(Reference reference)
284
295
285
296
foreach ( var member in _comInformation . Values )
286
297
{
287
- if ( member . TypeAttributes . typekind == TYPEKIND . TKIND_COCLASS )
288
- {
289
- GetCoClassInformation ( member ) ;
290
- }
298
+ LoadDeclarationsInModule ( output , member ) ;
299
+ }
291
300
292
- for ( var memberIndex = 0 ; memberIndex < member . TypeAttributes . cFuncs ; memberIndex ++ )
293
- {
294
- string [ ] memberNames ;
301
+ return output ;
302
+ }
295
303
296
- IntPtr memberDescriptorPointer ;
297
- member . TypeInfo . GetFuncDesc ( memberIndex , out memberDescriptorPointer ) ;
298
- var memberDescriptor = ( FUNCDESC ) Marshal . PtrToStructure ( memberDescriptorPointer , typeof ( FUNCDESC ) ) ;
304
+ private void LoadDeclarationsInModule ( List < Declaration > output , ComInformation member )
305
+ {
306
+ if ( member . TypeAttributes . typekind == TYPEKIND . TKIND_COCLASS )
307
+ {
308
+ GetCoClassInformation ( member ) ;
309
+ }
299
310
300
- var memberDeclaration = CreateMemberDeclaration ( memberDescriptor , member . TypeAttributes . typekind , member . TypeInfo , member . ImplTypeFlags ,
301
- member . TypeQualifiedModuleName , member . ModuleDeclaration , out memberNames ) ;
302
- if ( memberDeclaration == null )
303
- {
304
- member . TypeInfo . ReleaseFuncDesc ( memberDescriptorPointer ) ;
305
- continue ;
306
- }
311
+ for ( var memberIndex = 0 ; memberIndex < member . TypeAttributes . cFuncs ; memberIndex ++ )
312
+ {
313
+ string [ ] memberNames ;
307
314
308
- if ( member . ModuleDeclaration . DeclarationType == DeclarationType . ClassModule &&
309
- memberDeclaration is ICanBeDefaultMember &&
310
- ( ( ICanBeDefaultMember ) memberDeclaration ) . IsDefaultMember )
311
- {
312
- ( ( ClassModuleDeclaration ) member . ModuleDeclaration ) . DefaultMember = memberDeclaration ;
313
- }
314
- output . Add ( memberDeclaration ) ;
315
+ IntPtr memberDescriptorPointer ;
316
+ member . TypeInfo . GetFuncDesc ( memberIndex , out memberDescriptorPointer ) ;
317
+ var memberDescriptor = ( FUNCDESC ) Marshal . PtrToStructure ( memberDescriptorPointer , typeof ( FUNCDESC ) ) ;
315
318
316
- var parameterCount = memberDescriptor . cParams - ( memberDescriptor . invkind . HasFlag ( INVOKEKIND . INVOKE_PROPERTYGET ) ? 0 : 1 ) ;
317
- var parameters = new List < ParameterDeclaration > ( ) ;
318
- for ( var paramIndex = 0 ; paramIndex < parameterCount ; paramIndex ++ )
319
- {
320
- var parameter = CreateParameterDeclaration ( memberNames , paramIndex , memberDescriptor ,
321
- member . TypeQualifiedModuleName , memberDeclaration , member . TypeInfo ) ;
322
- var declaration = memberDeclaration as IDeclarationWithParameter ;
323
- if ( declaration != null )
324
- {
325
- parameters . Add ( parameter ) ;
326
- declaration . AddParameter ( parameter ) ;
327
- }
328
- output . Add ( parameter ) ;
329
- }
319
+ var memberDeclaration = CreateMemberDeclaration ( memberDescriptor , member . TypeAttributes . typekind , member . TypeInfo , member . ImplTypeFlags ,
320
+ member . TypeQualifiedModuleName , member . ModuleDeclaration , out memberNames ) ;
321
+ if ( memberDeclaration == null )
322
+ {
330
323
member . TypeInfo . ReleaseFuncDesc ( memberDescriptorPointer ) ;
331
- if ( parameters . Any ( ) && memberDescriptor . cParamsOpt == - 1 )
324
+ continue ;
325
+ }
326
+
327
+ if ( member . ModuleDeclaration . DeclarationType == DeclarationType . ClassModule &&
328
+ memberDeclaration is ICanBeDefaultMember &&
329
+ ( ( ICanBeDefaultMember ) memberDeclaration ) . IsDefaultMember )
330
+ {
331
+ ( ( ClassModuleDeclaration ) member . ModuleDeclaration ) . DefaultMember = memberDeclaration ;
332
+ }
333
+ output . Add ( memberDeclaration ) ;
334
+
335
+ var parameterCount = memberDescriptor . cParams - ( memberDescriptor . invkind . HasFlag ( INVOKEKIND . INVOKE_PROPERTYGET ) ? 0 : 1 ) ;
336
+ var parameters = new List < ParameterDeclaration > ( ) ;
337
+ for ( var paramIndex = 0 ; paramIndex < parameterCount ; paramIndex ++ )
338
+ {
339
+ var parameter = CreateParameterDeclaration ( memberNames , paramIndex , memberDescriptor ,
340
+ member . TypeQualifiedModuleName , memberDeclaration , member . TypeInfo ) ;
341
+ var declaration = memberDeclaration as IDeclarationWithParameter ;
342
+ if ( declaration != null )
332
343
{
333
- parameters . Last ( ) . IsParamArray = true ;
344
+ parameters . Add ( parameter ) ;
345
+ declaration . AddParameter ( parameter ) ;
334
346
}
347
+ output . Add ( parameter ) ;
335
348
}
336
-
337
- for ( var fieldIndex = 0 ; fieldIndex < member . TypeAttributes . cVars ; fieldIndex ++ )
349
+ member . TypeInfo . ReleaseFuncDesc ( memberDescriptorPointer ) ;
350
+ if ( parameters . Any ( ) && memberDescriptor . cParamsOpt == - 1 )
338
351
{
339
- output . Add ( CreateFieldDeclaration ( member . TypeInfo , fieldIndex , member . TypeDeclarationType , member . TypeQualifiedModuleName ,
340
- member . ModuleDeclaration ) ) ;
352
+ parameters . Last ( ) . IsParamArray = true ;
341
353
}
342
354
}
343
355
344
- return output ;
356
+ for ( var fieldIndex = 0 ; fieldIndex < member . TypeAttributes . cVars ; fieldIndex ++ )
357
+ {
358
+ output . Add ( CreateFieldDeclaration ( member . TypeInfo , fieldIndex , member . TypeDeclarationType , member . TypeQualifiedModuleName ,
359
+ member . ModuleDeclaration ) ) ;
360
+ }
345
361
}
346
362
347
363
private void GetCoClassInformation ( ComInformation member )
0 commit comments