Skip to content

Commit a87e067

Browse files
authored
Merge branch 'next' into next
2 parents 601665c + e270a7f commit a87e067

File tree

3 files changed

+25
-9
lines changed

3 files changed

+25
-9
lines changed

Rubberduck.Parsing/Symbols/DeclarationFinder.cs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -98,15 +98,23 @@ public DeclarationFinder(IReadOnlyList<Declaration> declarations, IEnumerable<IA
9898
cls.References.Where(reference => ParserRuleContextHelper.HasParent<VBAParser.ImplementsStmtContext>(reference.Context))
9999
.Select(reference => new { IdentifierReference = reference, Context = ParserRuleContextHelper.GetParent<VBAParser.ImplementsStmtContext>(reference.Context)}));
100100

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
102104
{
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))
106108
});
107109

108110
_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);
110118

111119
var implementingNames = new Lazy<IEnumerable<string>>(() => implementsInstructions.SelectMany(item =>
112120
_declarations[item.IdentifierReference.Declaration.QualifiedName.QualifiedModuleName]

Rubberduck.Parsing/VBA/ParseCoordinator.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ private void ExecuteCommonParseActivities(List<IVBComponent> toParse, Cancellati
215215
token.ThrowIfCancellationRequested();
216216

217217
_projectDeclarations.Clear();
218-
State.ClearBuiltInReferences();
218+
State.ClearAllReferences();
219219

220220
ParseComponents(toParse, token);
221221

@@ -612,7 +612,7 @@ private void ParseAllInternal(object requestor, CancellationToken token)
612612

613613
token.ThrowIfCancellationRequested();
614614

615-
var componentsRemoved = ClearStateCashForRemovedComponents(components);
615+
var componentsRemoved = CleanUpRemovedComponents(components);
616616

617617
token.ThrowIfCancellationRequested();
618618

@@ -642,10 +642,10 @@ private void ParseAllInternal(object requestor, CancellationToken token)
642642
}
643643

644644
/// <summary>
645-
/// Clears state cach for removed components.
645+
/// Clears state cache of removed components.
646646
/// Returns whether components have been removed.
647647
/// </summary>
648-
private bool ClearStateCashForRemovedComponents(List<IVBComponent> components)
648+
private bool CleanUpRemovedComponents(List<IVBComponent> components)
649649
{
650650
var removedModuledecalrations = RemovedModuleDeclarations(components);
651651
var componentRemoved = removedModuledecalrations.Any();

Rubberduck.Parsing/VBA/RubberduckParserState.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -742,6 +742,14 @@ public void ClearBuiltInReferences()
742742
}
743743
}
744744

745+
public void ClearAllReferences()
746+
{
747+
foreach (var declaration in AllDeclarations)
748+
{
749+
declaration.ClearReferences();
750+
}
751+
}
752+
745753
public bool ClearStateCache(IVBComponent component, bool notifyStateChanged = false)
746754
{
747755
return component != null && ClearStateCache(new QualifiedModuleName(component), notifyStateChanged);

0 commit comments

Comments
 (0)