public IReturnType ConvertType(AST.TypeReference typeRef) { return(ConvertVisitor.CreateReturnType(typeRef, callingClass, callingMember, caretLine, caretColumn, pc)); }
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); } }