Example #1
0
        public static List <string> GetResolveableNamespaces(RefactoringOptions options, out bool resolveDirect)
        {
            IReturnType            returnType  = null;
            INRefactoryASTProvider astProvider = RefactoringService.GetASTProvider(DesktopService.GetMimeTypeForUri(options.Document.FileName));

            if (options.ResolveResult != null && options.ResolveResult.ResolvedExpression != null)
            {
                if (astProvider != null)
                {
                    returnType = astProvider.ParseTypeReference(options.ResolveResult.ResolvedExpression.Expression).ConvertToReturnType();
                }
                if (returnType == null)
                {
                    returnType = DomReturnType.GetSharedReturnType(options.ResolveResult.ResolvedExpression.Expression);
                }
            }

            List <string> namespaces;

            if (options.ResolveResult is UnresolvedMemberResolveResult)
            {
                namespaces = new List <string> ();
                UnresolvedMemberResolveResult unresolvedMemberResolveResult = options.ResolveResult as UnresolvedMemberResolveResult;
                IType type = unresolvedMemberResolveResult.TargetResolveResult != null?options.Dom.GetType(unresolvedMemberResolveResult.TargetResolveResult.ResolvedType) : null;

                if (type != null)
                {
                    List <IType> allExtTypes = DomType.GetAccessibleExtensionTypes(options.Dom, null);
                    foreach (ExtensionMethod method in type.GetExtensionMethods(allExtTypes, unresolvedMemberResolveResult.MemberName))
                    {
                        string ns = method.OriginalMethod.DeclaringType.Namespace;
                        if (!namespaces.Contains(ns) && !options.Document.CompilationUnit.Usings.Any(u => u.Namespaces.Contains(ns)))
                        {
                            namespaces.Add(ns);
                        }
                    }
                }
                resolveDirect = false;
            }
            else
            {
                namespaces    = new List <string> (options.Dom.ResolvePossibleNamespaces(returnType));
                resolveDirect = true;
            }
            for (int i = 0; i < namespaces.Count; i++)
            {
                for (int j = i + 1; j < namespaces.Count; j++)
                {
                    if (namespaces[j] == namespaces[i])
                    {
                        namespaces.RemoveAt(j);
                        j--;
                    }
                }
            }
            return(namespaces);
        }
        public override object VisitThisReferenceExpression(ThisReferenceExpression thisReferenceExpression, object data)
        {
            if (resolver.CallingType == null)
            {
                return(CreateResult(DomReturnType.Void));
            }

            ThisResolveResult result = new ThisResolveResult();

            result.CallingType    = resolver.CallingType;
            result.CallingMember  = resolver.CallingMember;
            result.UnresolvedType = result.ResolvedType = DomReturnType.GetSharedReturnType(new DomReturnType(resolver.CallingType));
            return(result);
        }
        public static IReturnType ReadReturnType(BinaryReader reader, INameDecoder nameTable)
        {
            if (ReadNull(reader))
            {
                return(null);
            }
            byte index = reader.ReadByte();

            if (index < 0xFF)
            {
                return(DomReturnType.GetSharedReturnType(index));
            }

            string ns = ReadString(reader, nameTable);
            List <IReturnTypePart> parts = new List <IReturnTypePart> ();

            uint partCount = ReadUInt(reader, 500);

            while (partCount-- > 0)
            {
                ReturnTypePart part = new ReturnTypePart();
                parts.Add(part);
                part.Name        = ReadString(reader, nameTable);
                part.IsGenerated = reader.ReadBoolean();
                uint arguments = ReadUInt(reader, 1000);
                while (arguments-- > 0)
                {
                    part.AddTypeParameter(ReadReturnType(reader, nameTable));
                }
            }

            DomReturnType result = new DomReturnType(ns, parts);

            result.PointerNestingLevel = reader.ReadInt32();
            result.IsNullable          = reader.ReadBoolean();
            result.IsByRef             = reader.ReadBoolean();

            int arrayDimensions = reader.ReadInt32();

            int[] dims = new int [arrayDimensions];
            for (int n = 0; n < arrayDimensions; n++)
            {
                dims [n] = reader.ReadInt32();
            }

            result.SetDimensions(dims);
            return(result);
        }
Example #4
0
        internal IReturnType GetSharedReturnType(IReturnType rt)
        {
            string      id = rt.ToInvariantString();
            IReturnType s;

            if (!returnTypeCache.TryGetValue(id, out s))
            {
                s = DomReturnType.GetSharedReturnType(rt, true);
                if (s == null)
                {
                    s = rt;
                    returnTypeCache [id] = rt;
                }
            }
            return(s);
        }
Example #5
0
        internal IReturnType GetSharedReturnType(IReturnType rt)
        {
            string      id = rt.ToInvariantString();
            IReturnType s;

            if (returnTypeCache.TryGetValue(id, out s))
            {
                return(s);
            }

            s = DomReturnType.GetSharedReturnType(rt);
            if (object.ReferenceEquals(s, rt))
            {
                returnTypeCache [id] = rt;
            }
            return(s);
        }
Example #6
0
 internal IReturnType GetSharedReturnType(DomReturnType rt)
 {
     return(DomReturnType.GetSharedReturnType(rt));
 }