Skip to content

Commit 4d05bd1

Browse files
committed
fixed a number of NullReferenceExceptions in resolver; more complex project handles an InvalidOperationException (sequence contains more than one element) in VBProjectParseResult, which indicates a bug in resolver.
1 parent 663bc50 commit 4d05bd1

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed

Rubberduck.Parsing/Symbols/Declaration.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public Declaration(QualifiedMemberName qualifiedName, string parentScope,
5050

5151
public void AddReference(IdentifierReference reference)
5252
{
53-
if (reference.Declaration.Context == reference.Context)
53+
if (reference == null || reference.Declaration.Context == reference.Context)
5454
{
5555
return;
5656
}

Rubberduck.Parsing/Symbols/IdentifierReferenceResolver.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ private Declaration ResolveInternal(ParserRuleContext callSiteContext, Declarati
265265
{
266266
// localScope is a UDT
267267
var udt = ResolveType(localScope);
268-
callee = _declarations[identifierName].SingleOrDefault(item => item.Context.Parent == udt.Context);
268+
callee = _declarations[identifierName].SingleOrDefault(item => item.Context != null && item.Context.Parent == udt.Context);
269269
}
270270
else
271271
{
@@ -373,8 +373,11 @@ private Declaration ResolveInternal(VBAParser.ICS_S_MembersCallContext context,
373373
if (parent != null)
374374
{
375375
var parentReference = CreateReference(parent.Context, parent);
376-
parent.AddReference(parentReference);
377-
_alreadyResolved.Add(parentReference.Context);
376+
if (parentReference != null)
377+
{
378+
parent.AddReference(parentReference);
379+
_alreadyResolved.Add(parentReference.Context);
380+
}
378381
}
379382

380383
var chainedCalls = context.iCS_S_MemberCall();
@@ -522,7 +525,7 @@ public void Resolve(VBAParser.ICS_S_MembersCallContext context)
522525
var parent = ResolveInternal(context.iCS_S_ProcedureOrArrayCall(), _currentScope)
523526
?? ResolveInternal(context.iCS_S_VariableOrProcedureCall(), _currentScope);
524527

525-
if (parent != null)
528+
if (parent != null && parent.Context != null)
526529
{
527530
var identifierContext = ((dynamic)parent.Context).ambiguousIdentifier() as VBAParser.AmbiguousIdentifierContext;
528531

0 commit comments

Comments
 (0)