コード例 #1
0
        private static bool IsStatic(IReferenceExpression expr)
        {
            var elem       = expr.Reference.Resolve().DeclaredElement;
            var typeMember = elem as ITypeMember;

            return(typeMember != null && typeMember.IsStatic);
        }
コード例 #2
0
        public override IAssignableExpression VisitReferenceExpression(IReferenceExpression expr,
                                                                       IList <IStatement> context)
        {
            var qualifierExpr = expr.QualifierExpression;
            var name          = expr.NameIdentifier != null ? expr.NameIdentifier.Name : "";

            if (expr == _marker.HandlingNode && _marker.HandlingNode != null)
            {
                var ce = new CompletionExpression
                {
                    Token = name
                };
                if (qualifierExpr != null)
                {
                    if (qualifierExpr.IsClassifiedAsVariable ||
                        qualifierExpr is IInvocationExpression ||
                        qualifierExpr is IThisExpression ||
                        qualifierExpr is IBaseExpression)
                    {
                        ce.VariableReference = ToVariableRef(qualifierExpr, context);
                    }
                    else
                    {
                        ce.TypeReference = ToTypeRef(qualifierExpr);
                    }
                }
                return(ce);
            }

            if (IsMember(expr))
            {
                IVariableReference varRef;
                if (IsStatic(expr))
                {
                    varRef = new VariableReference();
                }
                else
                {
                    varRef = HasImpliciteThis(expr)
                        ? new VariableReference {
                        Identifier = "this"
                    }
                        : ToVariableRef(qualifierExpr, context);
                }

                return(new ReferenceExpression
                {
                    Reference = GetReference(expr, varRef)
                });
            }

            return(new ReferenceExpression
            {
                Reference = ToReference(expr, context)
            });
        }
コード例 #3
0
        private static bool IsMember(IReferenceExpression refExpr)
        {
            if (refExpr == null)
            {
                return(false);
            }
            var elem     = refExpr.Reference.Resolve().DeclaredElement;
            var isMember = elem is IEvent || elem is IField || elem is IMethod || elem is IProperty;

            return(isMember);
        }
コード例 #4
0
        private IReference ToReference(IReferenceExpression refExpr, ITypeMember elem, IList <IStatement> body)
        {
            IVariableReference baseRef = new VariableReference();

            if (!elem.IsStatic)
            {
                baseRef = HasImpliciteThis(refExpr)
                    ? new VariableReference {
                    Identifier = "this"
                }
                    : ToVariableRef(refExpr.QualifierExpression, body);
            }

            return(ToReference(elem, baseRef));
        }
コード例 #5
0
        private IReference GetReference(IReferenceExpression refExpr, IVariableReference baseRef)
        {
            if (refExpr != null)
            {
                var resolveResult = refExpr.Reference.Resolve();
                var elem          = resolveResult.DeclaredElement;
                if (elem == null)
                {
                    return(new UnknownReference());
                }

                var field = elem as IField;
                if (field != null)
                {
                    return(new FieldReference
                    {
                        FieldName = field.GetName <IFieldName>(),
                        Reference = baseRef
                    });
                }

                var property = elem as IProperty;
                if (property != null)
                {
                    return(new PropertyReference
                    {
                        PropertyName = property.GetName <IPropertyName>(),
                        Reference = baseRef
                    });
                }

                var @event = elem as IEvent;
                if (@event != null)
                {
                    return(new EventReference
                    {
                        EventName = @event.GetName <IEventName>(),
                        Reference = baseRef
                    });
                }

                var method = elem as IMethod;
                if (method != null)
                {
                    return(new MethodReference
                    {
                        MethodName = method.GetName <IMethodName>(),
                        Reference = baseRef
                    });
                }

                var localVar  = elem as ILocalVariable;
                var parameter = elem as IParameter;
                if (localVar != null || parameter != null)
                {
                    return(new VariableReference {
                        Identifier = elem.ShortName
                    });
                }
            }

            return(new UnknownReference());
        }
コード例 #6
0
 private static bool HasImpliciteThis(IReferenceExpression refExpr)
 {
     return(IsMember(refExpr) && refExpr.QualifierExpression == null);
 }
コード例 #7
0
        private static bool IsResolved(IReferenceExpression refExpr)
        {
            var elem = refExpr.Reference.Resolve().DeclaredElement;

            return(elem != null);
        }