//Please note that the lExpression is the (whitespace) index expression itself and not the lExpression it contains. private Declaration ResolveIndexExpressionAsArrayAccess(VBAParser.LExpressionContext actualIndexExpr, QualifiedModuleName containingModule, DeclarationFinder finder) { // An array access references the entire (whitespace)indexExpr. var qualifiedSelection = new QualifiedSelection(containingModule, actualIndexExpr.GetSelection()); return(finder .IdentifierReferences(qualifiedSelection) .LastOrDefault(reference => reference.IsArrayAccess) ?.Declaration); }
private Declaration ResolveIndexExpressionAsDefaultMemberAccess(VBAParser.LExpressionContext lExpressionOfIndexExpression, QualifiedModuleName containingModule, DeclarationFinder finder) { // A default member access references the entire lExpression. // If there are multiple, the references are ordered by recursion depth. var qualifiedSelection = new QualifiedSelection(containingModule, lExpressionOfIndexExpression.GetSelection()); return(finder .IdentifierReferences(qualifiedSelection) .LastOrDefault(reference => reference.IsDefaultMemberAccess) ?.Declaration); }
private Declaration ResolveIndexExpressionAsMethod(VBAParser.LExpressionContext lExpressionOfIndexExpression, QualifiedModuleName containingModule, DeclarationFinder finder) { //For functions and properties, the identifier will be at the end of the lExpression. var qualifiedSelection = new QualifiedSelection(containingModule, lExpressionOfIndexExpression.GetSelection().Collapse()); var candidate = finder .ContainingIdentifierReferences(qualifiedSelection) .LastOrDefault() ?.Declaration; return(candidate?.DeclarationType.HasFlag(DeclarationType.Member) ?? false ? candidate : null); }