Esempio n. 1
0
 public IReturnType ConvertType(AST.TypeReference typeRef)
 {
     return(ConvertVisitor.CreateReturnType(typeRef, callingClass, callingMember,
                                            caretLine, caretColumn, pc));
 }
Esempio n. 2
0
        public ConstructedReturnType ConstructTypeFromGenericReferenceExpression(GenericReferenceExpression node)
        {
            Stack <Expression> stack = new Stack <Expression>();
            Expression         expr  = node;

            while (expr != null)
            {
                stack.Push(expr);
                if (expr is MemberReferenceExpression)
                {
                    expr = ((MemberReferenceExpression)expr).Target;
                }
                else if (expr is GenericReferenceExpression)
                {
                    expr = ((GenericReferenceExpression)expr).Target;
                }
                else
                {
                    expr = null;
                }
            }
            StringBuilder      name          = new StringBuilder();
            List <IReturnType> typeArguments = new List <IReturnType>();

            while (stack.Count > 0)
            {
                expr = stack.Pop();
                if (expr is MemberReferenceExpression)
                {
                    name.Append('.');
                    name.Append(((MemberReferenceExpression)expr).Name);
                }
                else if (expr is GenericReferenceExpression)
                {
                    foreach (TypeReference tr in ((GenericReferenceExpression)expr).GenericArguments)
                    {
                        typeArguments.Add(ConvertVisitor.CreateReturnType(tr, callingClass,
                                                                          resolver.CallingMember,
                                                                          resolver.CaretLine,
                                                                          resolver.CaretColumn,
                                                                          projectContent));
                    }
                }
                else if (expr is ReferenceExpression)
                {
                    name.Append(((ReferenceExpression)expr).Name);
                }
                else
                {
                    LoggingService.Warn("Unknown expression in GenericReferenceExpression: " + expr);
                }
            }
            IReturnType rt = projectContent.SearchType(new SearchTypeRequest(name.ToString(), typeArguments.Count, callingClass,
                                                                             cu, resolver.CaretLine, resolver.CaretColumn)).Result;

            if (rt != null)
            {
                return(new ConstructedReturnType(rt, typeArguments));
            }
            else
            {
                return(null);
            }
        }