@@ -410,8 +410,29 @@ private Declaration ResolveInternal(VBAParser.ICS_B_ProcedureCallContext context
410
410
return callee ;
411
411
}
412
412
413
+ private void ResolveIdentifier ( VBAParser . AmbiguousIdentifierContext context )
414
+ {
415
+ if ( context == null )
416
+ {
417
+ return ;
418
+ }
419
+
420
+ var identifier = ResolveInternal ( context , _currentScope ) ;
421
+ if ( identifier == null )
422
+ {
423
+ return ;
424
+ }
425
+
426
+ identifier . AddReference ( CreateReference ( context , identifier ) ) ;
427
+ }
428
+
413
429
public void Resolve ( VBAParser . ICS_B_ProcedureCallContext context )
414
430
{
431
+ if ( _alreadyResolved . Contains ( context ) )
432
+ {
433
+ return ;
434
+ }
435
+
415
436
ResolveInternal ( context ) ;
416
437
}
417
438
@@ -454,58 +475,27 @@ public void Resolve(VBAParser.ICS_B_MemberProcedureCallContext context)
454
475
455
476
public void Resolve ( VBAParser . ICS_S_VariableOrProcedureCallContext context )
456
477
{
457
- if ( _alreadyResolved . Contains ( context ) )
458
- {
459
- return ;
460
- }
461
-
462
- try
463
- {
464
- ResolveInternal ( context , _currentScope ) ;
465
- }
466
- catch ( InvalidOperationException )
467
- {
468
- // bug: more than a single match was found.
469
- }
478
+ TryResolve ( context ) ;
470
479
}
471
480
472
481
public void Resolve ( VBAParser . ICS_S_ProcedureOrArrayCallContext context )
473
482
{
474
- if ( _alreadyResolved . Contains ( context ) )
475
- {
476
- return ;
477
- }
478
-
479
- try
480
- {
481
- ResolveInternal ( context , _currentScope ) ;
482
- }
483
- catch ( InvalidOperationException )
484
- {
485
- // bug: more than a single match was found.
486
- }
483
+ TryResolve ( context ) ;
487
484
}
488
485
489
486
public void Resolve ( VBAParser . ICS_S_MembersCallContext context )
490
487
{
491
- if ( _alreadyResolved . Contains ( context ) )
492
- {
493
- return ;
494
- }
495
-
496
- try
497
- {
498
- ResolveInternal ( context , _currentScope ) ;
499
- }
500
- catch ( InvalidOperationException )
501
- {
502
- // bug: more than a single match was found.
503
- }
488
+ TryResolve ( context ) ;
504
489
}
505
490
506
491
public void Resolve ( VBAParser . ICS_S_DictionaryCallContext context )
507
492
{
508
- if ( _alreadyResolved . Contains ( context ) )
493
+ TryResolve ( context ) ;
494
+ }
495
+
496
+ private void TryResolve < TContext > ( TContext context ) where TContext : ParserRuleContext
497
+ {
498
+ if ( context == null || _alreadyResolved . Contains ( context ) )
509
499
{
510
500
return ;
511
501
}
@@ -598,56 +588,32 @@ public void Resolve(VBAParser.ForEachStmtContext context)
598
588
599
589
public void Resolve ( VBAParser . ImplementsStmtContext context )
600
590
{
601
- var identifierContext = context . ambiguousIdentifier ( ) ;
602
- var identifier = ResolveInternal ( identifierContext , _currentScope ) ;
603
- identifier . AddReference ( CreateReference ( identifierContext , identifier ) ) ;
591
+ ResolveIdentifier ( context . ambiguousIdentifier ( ) ) ;
604
592
}
605
593
606
594
public void Resolve ( VBAParser . RaiseEventStmtContext context )
607
595
{
608
- var identifierContext = context . ambiguousIdentifier ( ) ;
609
- var identifier = ResolveInternal ( identifierContext , _currentScope ) ;
610
- identifier . AddReference ( CreateReference ( identifierContext , identifier ) ) ;
596
+ ResolveIdentifier ( context . ambiguousIdentifier ( ) ) ;
611
597
}
612
598
613
599
public void Resolve ( VBAParser . ResumeStmtContext context )
614
600
{
615
- var identifierContext = context . ambiguousIdentifier ( ) ;
616
- var identifier = ResolveInternal ( identifierContext , _currentScope ) ;
617
- identifier . AddReference ( CreateReference ( identifierContext , identifier ) ) ;
601
+ ResolveIdentifier ( context . ambiguousIdentifier ( ) ) ;
618
602
}
619
603
620
604
public void Resolve ( VBAParser . FileNumberContext context )
621
605
{
622
- var identifierContext = context . ambiguousIdentifier ( ) ;
623
- if ( identifierContext == null )
624
- {
625
- return ;
626
- }
627
- var identifier = ResolveInternal ( identifierContext , _currentScope ) ;
628
- identifier . AddReference ( CreateReference ( identifierContext , identifier ) ) ;
606
+ ResolveIdentifier ( context . ambiguousIdentifier ( ) ) ;
629
607
}
630
608
631
609
public void Resolve ( VBAParser . ArgDefaultValueContext context )
632
610
{
633
- var identifierContext = context . ambiguousIdentifier ( ) ;
634
- if ( identifierContext == null )
635
- {
636
- return ;
637
- }
638
- var identifier = ResolveInternal ( identifierContext , _currentScope ) ;
639
- identifier . AddReference ( CreateReference ( identifierContext , identifier ) ) ;
611
+ ResolveIdentifier ( context . ambiguousIdentifier ( ) ) ;
640
612
}
641
613
642
614
public void Resolve ( VBAParser . FieldLengthContext context )
643
615
{
644
- var identifierContext = context . ambiguousIdentifier ( ) ;
645
- if ( identifierContext == null )
646
- {
647
- return ;
648
- }
649
- var identifier = ResolveInternal ( identifierContext , _currentScope ) ;
650
- identifier . AddReference ( CreateReference ( identifierContext , identifier ) ) ;
616
+ ResolveIdentifier ( context . ambiguousIdentifier ( ) ) ;
651
617
}
652
618
653
619
public void Resolve ( VBAParser . VsAssignContext context )
@@ -706,6 +672,15 @@ private Declaration FindModuleScopeProcedure(string identifierName, Declaration
706
672
return result . SingleOrDefault ( ) ;
707
673
}
708
674
675
+ private Declaration FindProjectScopeDeclaration ( string identifierName )
676
+ {
677
+ // assume unqualified variable call, i.e. unique declaration.
678
+ return _declarations [ identifierName ] . SingleOrDefault ( item =>
679
+ ( item . Accessibility == Accessibility . Public
680
+ || item . Accessibility == Accessibility . Global
681
+ || _moduleTypes . Contains ( item . DeclarationType ) ) ) ;
682
+ }
683
+
709
684
private bool IsProcedure ( Declaration item )
710
685
{
711
686
return item . DeclarationType == DeclarationType . Procedure
@@ -741,14 +716,5 @@ private bool IsPropertyAccessor(Declaration item, ContextAccessorType accessorTy
741
716
item . DeclarationType == DeclarationType . PropertyGet &&
742
717
! isAssignmentTarget ) ;
743
718
}
744
-
745
- private Declaration FindProjectScopeDeclaration ( string identifierName )
746
- {
747
- // assume unqualified variable call, i.e. unique declaration.
748
- return _declarations [ identifierName ] . SingleOrDefault ( item =>
749
- ( item . Accessibility == Accessibility . Public
750
- || item . Accessibility == Accessibility . Global
751
- || item . DeclarationType == DeclarationType . Module ) ) ;
752
- }
753
719
}
754
720
}
0 commit comments