Example #1
0
        //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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }