Skip to content

Commit e859968

Browse files
committed
Closes #934; resolver handles evil, purposely ambiguous naming that wrecks one's brain.
1 parent 40edf8e commit e859968

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

Rubberduck.Parsing/Symbols/IdentifierReferenceResolver.cs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ public void ExitWithBlock()
145145

146146
private IdentifierReference CreateReference(ParserRuleContext callSiteContext, Declaration callee, bool isAssignmentTarget = false, bool hasExplicitLetStatement = false)
147147
{
148-
if (callSiteContext == null || _currentScope == null)
148+
if (callSiteContext == null || _currentScope == null || _alreadyResolved.Contains(callSiteContext))
149149
{
150150
return null;
151151
}
@@ -225,9 +225,16 @@ private Declaration ResolveType(VBAParser.ComplexTypeContext context)
225225
if (udtMatch != null)
226226
{
227227
var udtReference = CreateReference(identifiers[2], udtMatch);
228+
228229
projectMatch.AddReference(projectReference);
230+
_alreadyResolved.Add(projectReference.Context);
231+
229232
moduleMatch.AddReference(moduleReference);
233+
_alreadyResolved.Add(moduleReference.Context);
234+
230235
udtMatch.AddReference(udtReference);
236+
_alreadyResolved.Add(udtReference.Context);
237+
231238
return udtMatch;
232239
}
233240
}
@@ -244,6 +251,7 @@ private Declaration ResolveType(VBAParser.ComplexTypeContext context)
244251
{
245252
var reference = CreateReference(identifiers[1], match);
246253
match.AddReference(reference);
254+
_alreadyResolved.Add(reference.Context);
247255
return match;
248256
}
249257
}
@@ -276,8 +284,13 @@ private Declaration ResolveType(VBAParser.ComplexTypeContext context)
276284
if (udtMatch != null)
277285
{
278286
var udtReference = CreateReference(identifiers[1], udtMatch);
287+
279288
moduleMatch.AddReference(moduleReference);
289+
_alreadyResolved.Add(moduleReference.Context);
290+
280291
udtMatch.AddReference(udtReference);
292+
_alreadyResolved.Add(udtReference.Context);
293+
281294
return udtMatch;
282295
}
283296
}
@@ -828,8 +841,7 @@ public void Resolve(VBAParser.AsTypeClauseContext context)
828841
}
829842
else
830843
{
831-
type = ResolveType(asType.complexType());
832-
reference = CreateReference(asType.complexType(), type);
844+
ResolveType(asType.complexType());
833845
}
834846

835847
if (type != null && reference != null)

0 commit comments

Comments
 (0)