public override object VisitBaseReferenceExpression(BaseReferenceExpression baseReferenceExpression, object data)
        {
            if (resolver.CallingType == null || resolver.CallingType.FullName == "System.Object")
            {
                return(CreateResult(DomReturnType.Void));
            }

            BaseResolveResult result = new BaseResolveResult();

            result.CallingType   = resolver.CallingType;
            result.CallingMember = resolver.CallingMember;
            if (resolver.CallingType != null)
            {
                IType type = null;
                if (resolver.CallingType.BaseType != null)
                {
                    type = this.resolver.SearchType(resolver.CallingType.BaseType);
                }
                result.UnresolvedType = result.ResolvedType = type != null ? new DomReturnType(type) : DomReturnType.Object;
            }
            return(result);
        }
示例#2
0
        public NRefactoryParameterDataProvider(MonoDevelop.Ide.Gui.TextEditor editor, NRefactoryResolver resolver, BaseResolveResult resolveResult)
        {
            this.editor = editor;
            HashSet <string> alreadyAdded = new HashSet <string> ();

            if (resolveResult.CallingType != null)
            {
                IType resolvedType = resolver.Dom.GetType(resolveResult.ResolvedType);
                foreach (IReturnType rt in resolveResult.CallingType.BaseTypes)
                {
                    IType baseType         = resolver.SearchType(rt);
                    bool  includeProtected = DomType.IncludeProtected(resolver.Dom, baseType, resolvedType);

                    if (baseType != null)
                    {
                        foreach (IMethod method in baseType.Methods)
                        {
                            if (!method.IsConstructor)
                            {
                                continue;
                            }
                            string str = ambience.GetString(method, OutputFlags.IncludeParameters);
                            if (alreadyAdded.Contains(str))
                            {
                                continue;
                            }
                            alreadyAdded.Add(str);

                            if (method.IsAccessibleFrom(resolver.Dom, resolver.CallingType, resolver.CallingMember, includeProtected))
                            {
                                methods.Add(method);
                            }
                        }
                    }
                }
            }
        }