private void AddFailedLetCoercionReference(
            LetCoercionDefaultMemberAccessExpression expression,
            QualifiedModuleName module,
            Declaration scope,
            Declaration parent,
            bool isAssignmentTarget,
            bool hasExplicitLetStatement)
        {
            var callSiteContext = expression.Context;
            var identifier      = callSiteContext.GetText();
            var selection       = callSiteContext.GetSelection();
            var callee          = expression.ReferencedDeclaration;
            var reference       = new IdentifierReference(
                module,
                scope,
                parent,
                identifier,
                selection,
                callSiteContext,
                callee,
                isAssignmentTarget,
                hasExplicitLetStatement,
                FindIdentifierAnnotations(module, selection.StartLine),
                false,
                isNonIndexedDefaultMemberAccess: true,
                defaultMemberRecursionDepth: expression.DefaultMemberRecursionDepth);

            _declarationFinder.AddFailedLetCoercionReference(reference);
        }
        private void Visit(
            LetCoercionDefaultMemberAccessExpression expression,
            QualifiedModuleName module,
            Declaration scope,
            Declaration parent,
            bool isAssignmentTarget      = false,
            bool hasExplicitLetStatement = false)
        {
            var containedExpression = expression.ContainedDefaultMemberRecursionExpression;

            if (containedExpression != null)
            {
                Visit(containedExpression, module, scope, parent, hasExplicitLetStatement: hasExplicitLetStatement);
            }

            Visit(expression.WrappedExpression, module, scope, parent);

            switch (expression.Classification)
            {
            case ExpressionClassification.ResolutionFailed:
                AddFailedLetCoercionReference(expression, module, scope, parent, isAssignmentTarget, hasExplicitLetStatement);
                break;

            case ExpressionClassification.Unbound:
                AddUnboundDefaultMemberReference(expression, module, scope, parent, isAssignmentTarget, hasExplicitLetStatement);
                break;

            default:
                if (expression.ReferencedDeclaration != null)
                {
                    AddDefaultMemberReference(expression, module, scope, parent, isAssignmentTarget, hasExplicitLetStatement);
                }

                break;
            }
        }
Esempio n. 3
0
 private void Visit(LetCoercionDefaultMemberAccessExpression expression, Declaration parent, IBoundExpression withExpression)
 {
     Visit(expression.WrappedExpression, parent, withExpression);
 }