Ejemplo n.º 1
0
        private static IEnumerable<CompletionItem> GetMemberCompletions(SemanticModel semanticModel, FieldAccessExpressionSyntax propertyAccessExpression)
        {
            var targetType = semanticModel.GetExpressionType(propertyAccessExpression.Expression);
            if (targetType != null && !targetType.IsUnknown() && !targetType.IsError())
                return GetTypeCompletions(targetType);

            return Enumerable.Empty<CompletionItem>();
        }
        private static void GetMemberCompletions(SemanticModel semanticModel, FieldAccessExpressionSyntax propertyAccessExpression, CompletionContext context)
        {
            var targetType = semanticModel.GetExpressionType(propertyAccessExpression.Expression);

            if (targetType != null && !targetType.IsUnknown() && !targetType.IsError())
            {
                GetTypeCompletions(targetType, context);
            }
        }
Ejemplo n.º 3
0
        public override void VisitFieldAccessExpression(FieldAccessExpressionSyntax node)
        {
            var symbol = _semanticModel.GetSymbol(node);

            if (symbol != null)
            {
                CreateTag(node.Name, HlslClassificationTypeNames.FieldIdentifier);
            }

            base.VisitFieldAccessExpression(node);
        }
Ejemplo n.º 4
0
        private BoundExpression BindFieldAccessExpression(FieldAccessExpressionSyntax node)
        {
            var target = Bind(node.Expression, BindExpression);

            var name = node.Name;

            if (target.Type.IsError())
            {
                // To avoid cascading errors, we'll give up early.
                return(new BoundErrorExpression());
            }

            var fieldSymbols = LookupField(target.Type, name).ToImmutableArray();

            if (fieldSymbols.Length == 0)
            {
                var hasMethods = LookupMethod(target.Type, name).Any();
                if (hasMethods)
                {
                    Diagnostics.ReportInvocationRequiresParenthesis(name);
                }
                else
                {
                    Diagnostics.ReportUndeclaredField(node, target.Type);
                }

                return(new BoundErrorExpression());
            }

            if (fieldSymbols.Length > 1)
            {
                Diagnostics.ReportAmbiguousField(name);
            }

            var fieldSymbol = fieldSymbols[0];

            return(new BoundFieldExpression(target, fieldSymbol));
        }
        private ExpressionSyntax ParsePostFixExpression(ExpressionSyntax expr)
        {
            Debug.Assert(expr != null);

            while (true)
            {
                var tk = Current.Kind;
                switch (tk)
                {
                case SyntaxKind.OpenBracketToken:
                    expr = new ElementAccessExpressionSyntax(expr, Match(SyntaxKind.OpenBracketToken), ParseExpression(), Match(SyntaxKind.CloseBracketToken));
                    break;

                case SyntaxKind.PlusPlusToken:
                case SyntaxKind.MinusMinusToken:
                    expr = new PostfixUnaryExpressionSyntax(SyntaxFacts.GetPostfixUnaryExpression(tk), expr, NextToken());
                    break;

                case SyntaxKind.DotToken:
                    var dot  = NextToken();
                    var name = Match(SyntaxKind.IdentifierToken);

                    if (Current.Kind == SyntaxKind.OpenParenToken)
                    {
                        expr = new MethodInvocationExpressionSyntax(expr, dot, name, ParseParenthesizedArgumentList(false));
                    }
                    else
                    {
                        expr = new FieldAccessExpressionSyntax(expr, dot, name);
                    }

                    break;

                default:
                    return(expr);
                }
            }
        }
Ejemplo n.º 6
0
 public static void ReportUndeclaredField(this ICollection<Diagnostic> diagnostics, FieldAccessExpressionSyntax node, TypeSymbol type)
 {
     var typeName = type.ToDisplayName();
     var propertyName = node.Name.ValueText;
     diagnostics.Report(node.GetTextSpanSafe(), DiagnosticId.UndeclaredField, typeName, propertyName);
 }
        public static void ReportUndeclaredField(this ICollection <Diagnostic> diagnostics, FieldAccessExpressionSyntax node, TypeSymbol type)
        {
            var typeName     = type.ToDisplayName();
            var propertyName = node.Name.ValueText;

            diagnostics.Report(node.SourceRange, DiagnosticId.UndeclaredField, typeName, propertyName);
        }
Ejemplo n.º 8
0
        private ExpressionSyntax ParsePostFixExpression(ExpressionSyntax expr)
        {
            Debug.Assert(expr != null);

            while (true)
            {
                var tk = Current.Kind;
                switch (tk)
                {
                    case SyntaxKind.OpenBracketToken:
                        expr = new ElementAccessExpressionSyntax(expr, Match(SyntaxKind.OpenBracketToken), ParseExpression(), Match(SyntaxKind.CloseBracketToken));
                        break;

                    case SyntaxKind.PlusPlusToken:
                    case SyntaxKind.MinusMinusToken:
                        expr = new PostfixUnaryExpressionSyntax(SyntaxFacts.GetPostfixUnaryExpression(tk), expr, NextToken());
                        break;

                    case SyntaxKind.DotToken:
                        var dot = NextToken();
                        var name = Match(SyntaxKind.IdentifierToken);

                        if (Current.Kind == SyntaxKind.OpenParenToken)
                            expr = new MethodInvocationExpressionSyntax(expr, dot, name, ParseParenthesizedArgumentList(false));
                        else
                            expr = new FieldAccessExpressionSyntax(expr, dot, name);

                        break;

                    default:
                        return expr;
                }
            }
        }
Ejemplo n.º 9
0
 public virtual void VisitFieldAccess(FieldAccessExpressionSyntax node)
 {
     DefaultVisit(node);
 }
        private static IEnumerable <CompletionItem> GetMemberCompletions(SemanticModel semanticModel, FieldAccessExpressionSyntax propertyAccessExpression)
        {
            var targetType = semanticModel.GetExpressionType(propertyAccessExpression.Expression);

            if (targetType != null && !targetType.IsUnknown() && !targetType.IsError())
            {
                return(GetTypeCompletions(targetType));
            }

            return(Enumerable.Empty <CompletionItem>());
        }
Ejemplo n.º 11
0
        public override void VisitFieldAccess(FieldAccessExpressionSyntax node)
        {
            var symbol = _semanticModel.GetSymbol(node);
            if (symbol != null)
                CreateTag(node.Name, _classificationService.FieldIdentifier);

            base.VisitFieldAccess(node);
        }
Ejemplo n.º 12
0
 public virtual void VisitFieldAccess(FieldAccessExpressionSyntax node)
 {
     DefaultVisit(node);
 }