Skip to content

Commit 96a014d

Browse files
committed
Set up reference removal and modules to reresolve in the ParseCoordinator. (Not yet activated.)
1 parent 9be8481 commit 96a014d

File tree

1 file changed

+26
-8
lines changed

1 file changed

+26
-8
lines changed

Rubberduck.Parsing/VBA/ParseCoordinator.cs

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -214,10 +214,8 @@ private void ExecuteCommonParseActivities(List<IVBComponent> toParse, Cancellati
214214

215215
token.ThrowIfCancellationRequested();
216216

217-
_projectDeclarations.Clear();
218-
State.ClearAllReferences();
219-
220-
ClearModuleToModuleReferences(toParse);
217+
var toResolveReferences = ModulesForWhichToResolveReferences(toParse);
218+
PerformPreParseCleanup(toParse, toResolveReferences);
221219

222220
ParseComponents(toParse, token);
223221

@@ -241,7 +239,7 @@ private void ExecuteCommonParseActivities(List<IVBComponent> toParse, Cancellati
241239
throw new OperationCanceledException(token);
242240
}
243241

244-
var toResolveReferences = State.ParseTrees.Select(kvp => kvp.Key).ToHashSet();
242+
toResolveReferences = State.ParseTrees.Select(kvp => kvp.Key).ToHashSet();
245243
ResolveAllReferences(toResolveReferences, token);
246244

247245
if (token.IsCancellationRequested || State.Status >= ParserState.Error)
@@ -271,6 +269,24 @@ private void SetModuleStates(List<IVBComponent> components, ParserState parserSt
271269
}
272270
}
273271

272+
private ICollection<QualifiedModuleName> ModulesForWhichToResolveReferences(List<IVBComponent> toParse)
273+
{
274+
var toResolveReferences = new HashSet<QualifiedModuleName>();
275+
foreach (var qmn in toParse.Select(component => new QualifiedModuleName(component)))
276+
{
277+
toResolveReferences.UnionWith(State.ModulesReferencing(qmn));
278+
}
279+
return toResolveReferences;
280+
}
281+
282+
private void PerformPreParseCleanup(List<IVBComponent> toParse, ICollection<QualifiedModuleName> toResolveReferences)
283+
{
284+
ClearModuleToModuleReferences(toParse);
285+
State.RemoveAllReferencesBy(toResolveReferences);
286+
State.ClearAllReferences(); //This has to stay here until the selective resolving actually works.
287+
_projectDeclarations.Clear();
288+
}
289+
274290
private void ClearModuleToModuleReferences(List<IVBComponent> toClear)
275291
{
276292
foreach (var component in toClear)
@@ -711,10 +727,12 @@ private bool CleanUpRemovedComponents(List<IVBComponent> components)
711727
{
712728
var removedModuledecalrations = RemovedModuleDeclarations(components);
713729
var componentRemoved = removedModuledecalrations.Any();
714-
foreach (var declaration in removedModuledecalrations)
730+
var removedModules = removedModuledecalrations.Select(declaration => declaration.QualifiedName.QualifiedModuleName).ToHashSet();
731+
State.RemoveAllReferencesBy(removedModules);
732+
foreach (var qmn in removedModules)
715733
{
716-
State.ClearModuleToModuleReferencesFromModule(declaration.QualifiedName.QualifiedModuleName);
717-
State.ClearStateCache(declaration.QualifiedName.QualifiedModuleName);
734+
State.ClearModuleToModuleReferencesFromModule(qmn);
735+
State.ClearStateCache(qmn);
718736
}
719737
return componentRemoved;
720738
}

0 commit comments

Comments
 (0)