Пример #1
0
        void AddControlMembers(CompletionDataList list, IType controlClass,
                               Dictionary <string, string> existingAtts)
        {
            //add atts only if they're not already in the tag
            foreach (var prop in GetUniqueMembers <IProperty> (controlClass.GetProperties()))
            {
                if (prop.Accessibility == Accessibility.Public && (existingAtts == null || !existingAtts.ContainsKey(prop.Name)))
                {
                    if (GetPersistenceMode(prop) == System.Web.UI.PersistenceMode.Attribute)
                    {
                        list.Add(prop.Name, prop.GetStockIcon(), AmbienceService.GetDocumentationSummary(prop));
                    }
                }
            }

            //similarly add events
            foreach (var eve in GetUniqueMembers <IEvent> (controlClass.GetEvents()))
            {
                string eveName = "On" + eve.Name;
                if (eve.Accessibility == Accessibility.Public && (existingAtts == null || !existingAtts.ContainsKey(eveName)))
                {
                    list.Add(eveName, eve.GetStockIcon(), AmbienceService.GetDocumentationSummary(eve));
                }
            }
        }
        public string GetDescription(int overload, int currentParameter)
        {
            StringBuilder result       = new StringBuilder();
            var           curParameter = currentParameter >= 0 && currentParameter < indexers [overload].Parameters.Count ? indexers [overload].Parameters [currentParameter] : null;

            if (curParameter != null)
            {
                string docText = AmbienceService.GetDocumentation(indexers [overload]);
                if (!string.IsNullOrEmpty(docText))
                {
                    var paramRegex = new Regex("(\\<param\\s+name\\s*=\\s*\"" + curParameter.Name + "\"\\s*\\>.*?\\</param\\>)", RegexOptions.Compiled);
                    var match      = paramRegex.Match(docText);
                    if (match.Success)
                    {
                        result.AppendLine();
                        string text = match.Groups [1].Value;
                        text = "<summary>" + AmbienceService.GetDocumentationSummary(indexers [overload]) + "</summary>" + text;
                        result.Append(AmbienceService.GetDocumentationMarkup(text, new AmbienceService.DocumentationFormatOptions {
                            HighlightParameter = curParameter.Name,
                            MaxLineLength      = 60
                        }));
                    }
                }
            }

            return(result.ToString());
        }
        void CheckDescription()
        {
            if (descriptionCreated)
            {
                return;
            }

            var sb = new StringBuilder();

            descriptionCreated = true;
            if (Entity is IMethod && ((IMethod)Entity).IsExtensionMethod)
            {
                sb.Append(GettextCatalog.GetString("(Extension) "));
            }
            try
            {
                var amb = new MyAmbience(GetBuilder(Entity.Compilation));
                sb.Append(GLib.Markup.EscapeText(amb.ConvertEntity(Entity)));
            }
            catch (Exception e)
            {
                sb.Append(e.ToString());
            }

            var m = (IMember)Entity;

            if (m.IsObsolete())
            {
                sb.AppendLine();
                sb.Append(GettextCatalog.GetString("[Obsolete]"));
                DisplayFlags |= DisplayFlags.Obsolete;
            }

            var returnType = m.ReturnType;

            if (returnType.Kind == TypeKind.Delegate)
            {
                sb.AppendLine();
                sb.AppendLine(GettextCatalog.GetString("Delegate information"));
                sb.Append(ambience.GetString(returnType, OutputFlags.ReformatDelegates | OutputFlags.IncludeReturnType | OutputFlags.IncludeParameters | OutputFlags.IncludeParameterName));
            }

            string docMarkup = AmbienceService.GetDocumentationMarkup("<summary>" + AmbienceService.GetDocumentationSummary((IMember)Entity) + "</summary>", new AmbienceService.DocumentationFormatOptions
            {
                Ambience = ambience
            });

            if (!string.IsNullOrEmpty(docMarkup))
            {
                sb.AppendLine();
                sb.Append(docMarkup);
            }
            description = sb.ToString();
        }
Пример #4
0
        public string GetMethodMarkup(int overload, string[] parameterMarkup, int currentParameter)
        {
            StringBuilder result = new StringBuilder();

//			int curLen = 0;
            result.Append(ambience.GetString(indexers[overload].ReturnType, OutputFlags.ClassBrowserEntries));
            result.Append(' ');
            result.Append("<b>");
            result.Append(resolvedExpression);
            result.Append("</b>");
            result.Append('[');
            int parameterCount = 0;

            foreach (string parameter in parameterMarkup)
            {
                if (parameterCount > 0)
                {
                    result.Append(", ");
                }
                result.Append(parameter);
                parameterCount++;
            }
            result.Append(']');
            IParameter curParameter = currentParameter >= 0 && currentParameter < indexers[overload].Parameters.Count ? indexers[overload].Parameters[currentParameter] : null;

            if (curParameter != null)
            {
                string docText = AmbienceService.GetDocumentation(indexers[overload]);
                if (!string.IsNullOrEmpty(docText))
                {
                    Regex paramRegex = new Regex("(\\<param\\s+name\\s*=\\s*\"" + curParameter.Name + "\"\\s*\\>.*?\\</param\\>)", RegexOptions.Compiled);
                    Match match      = paramRegex.Match(docText);
                    if (match.Success)
                    {
                        result.AppendLine();
                        string text = match.Groups[1].Value;
                        text = "<summary>" + AmbienceService.GetDocumentationSummary(indexers[overload]) + "</summary>" + text;
                        result.Append(AmbienceService.GetDocumentationMarkup(text, new AmbienceService.DocumentationFormatOptions {
                            HighlightParameter = curParameter.Name,
                            MaxLineLength      = 60
                        }));
                    }
                }
            }

            return(result.ToString());
        }
Пример #5
0
        void CheckDescription()
        {
            if (descriptionCreated)
            {
                return;
            }

            var sb = new StringBuilder();

            descriptionCreated = true;
            if (Entity is IMethod && ((IMethod)Entity).IsExtensionMethod)
            {
                sb.Append(GettextCatalog.GetString("(Extension) "));
            }
            sb.Append(ambience.GetString(Entity,
                                         OutputFlags.ClassBrowserEntries | OutputFlags.IncludeReturnType | OutputFlags.IncludeKeywords | OutputFlags.UseFullName | OutputFlags.IncludeParameterName | OutputFlags.IncludeMarkup | (HideExtensionParameter ? OutputFlags.HideExtensionsParameter : OutputFlags.None)));

            var m = (IMember)Entity;

            if (m.IsObsolete())
            {
                sb.AppendLine();
                sb.Append(GettextCatalog.GetString("[Obsolete]"));
                DisplayFlags |= DisplayFlags.Obsolete;
            }

            var returnType = m.ReturnType;

            if (returnType.Kind == TypeKind.Delegate)
            {
                sb.AppendLine();
                sb.AppendLine(GettextCatalog.GetString("Delegate information"));
                sb.Append(ambience.GetString(returnType, OutputFlags.ReformatDelegates | OutputFlags.IncludeReturnType | OutputFlags.IncludeParameters | OutputFlags.IncludeParameterName));
            }

            string docMarkup = AmbienceService.GetDocumentationMarkup("<summary>" + AmbienceService.GetDocumentationSummary((IMember)Entity) + "</summary>", new AmbienceService.DocumentationFormatOptions {
                Ambience = ambience
            });

            if (!string.IsNullOrEmpty(docMarkup))
            {
                sb.AppendLine();
                sb.Append(docMarkup);
            }
            description = sb.ToString();
        }
Пример #6
0
        public string CreateTooltip(ResolveResult result, int offset, Ambience ambience)
        {
            var doc = IdeApp.Workbench.ActiveDocument;

            if (doc == null)
            {
                return(null);
            }
            try {
                OutputSettings settings = new OutputSettings(OutputFlags.ClassBrowserEntries | OutputFlags.IncludeParameterName | OutputFlags.IncludeKeywords | OutputFlags.IncludeMarkup | OutputFlags.UseFullName);
                // Approximate value for usual case
                StringBuilder s             = new StringBuilder(150);
                string        documentation = null;
                if (result is UnknownIdentifierResolveResult)
                {
                    s.Append(String.Format(GettextCatalog.GetString("Unresolved identifier '{0}'"), ((UnknownIdentifierResolveResult)result).Identifier));
                }
                else if (result.IsError)
                {
                    s.Append(GettextCatalog.GetString("Resolve error."));
                }
                else if (result is LocalResolveResult)
                {
                    var lr = (LocalResolveResult)result;
                    s.Append("<small><i>");
                    s.Append(lr.IsParameter ? paramStr : localStr);
                    s.Append("</i></small>\n");
                    s.Append(ambience.GetString(lr.Variable.Type, settings));
                    s.Append(" ");
                    s.Append(lr.Variable.Name);
                }
                else if (result is MethodGroupResolveResult)
                {
                    var mrr = (MethodGroupResolveResult)result;
                    s.Append("<small><i>");
                    s.Append(methodStr);
                    s.Append("</i></small>\n");
                    var allMethods = new List <IMethod> (mrr.Methods);
                    foreach (var l in mrr.GetExtensionMethods())
                    {
                        allMethods.AddRange(l);
                    }

                    var method = allMethods.FirstOrDefault();
                    if (method != null)
                    {
                        s.Append(GLib.Markup.EscapeText(TextEditorResolverProvider.CreateAmbience(doc, offset, method.Compilation).ConvertEntity(method)));
                        if (allMethods.Count > 1)
                        {
                            int overloadCount = allMethods.Count - 1;
                            s.Append(string.Format(GettextCatalog.GetPluralString(" (+{0} overload)", " (+{0} overloads)", overloadCount), overloadCount));
                        }
                        documentation = AmbienceService.GetDocumentationSummary(method);
                    }
                }
                else if (result is MemberResolveResult)
                {
                    var member = ((MemberResolveResult)result).Member;
                    s.Append("<small><i>");
                    s.Append(GetString(member));
                    s.Append("</i></small>\n");
                    var field = member as IField;
                    if (field != null && field.IsConst)
                    {
                        s.Append(GLib.Markup.EscapeText(TextEditorResolverProvider.CreateAmbience(doc, offset, field.Compilation).ConvertType(field.Type)));
                        s.Append(" ");
                        s.Append(field.Name);
                        s.Append(" = ");
                        s.Append(GetConst(field.ConstantValue));
                        s.Append(";");
                    }
                    else
                    {
                        s.Append(GLib.Markup.EscapeText(TextEditorResolverProvider.CreateAmbience(doc, offset, member.Compilation).ConvertEntity(member)));
                    }
                    documentation = AmbienceService.GetDocumentationSummary(member);
                }
                else if (result is NamespaceResolveResult)
                {
                    s.Append("<small><i>");
                    s.Append(namespaceStr);
                    s.Append("</i></small>\n");
                    s.Append(ambience.GetString(((NamespaceResolveResult)result).NamespaceName, settings));
                }
                else
                {
                    var tr         = result;
                    var typeString = GetString(tr.Type);
                    if (!string.IsNullOrEmpty(typeString))
                    {
                        s.Append("<small><i>");
                        s.Append(typeString);
                        s.Append("</i></small>\n");
                    }
                    settings.OutputFlags |= OutputFlags.UseFullName | OutputFlags.UseFullInnerTypeName;
                    s.Append(ambience.GetString(tr.Type, settings));
                    documentation = AmbienceService.GetDocumentationSummary(tr.Type.GetDefinition());
                }

                if (!string.IsNullOrEmpty(documentation))
                {
                    s.Append("\n<small>");
                    s.Append(AmbienceService.GetDocumentationMarkup("<summary>" + documentation + "</summary>"));
                    s.Append("</small>");
                }
                return(s.ToString());
            } catch (Exception e) {
                LoggingService.LogError("Error while creating tooltip.", e);
                return(null);
            }
        }
Пример #7
0
        public void AddOverload(MemberCompletionData overload)
        {
            if (overloads == null)
            {
                overloads = new Dictionary <string, CompletionData> ();
            }

            if (overload.Entity is IMember && Entity is IMember)
            {
                // filter virtual & overriden members that came from base classes
                // note that the overload tree is traversed top down.
                var member = Entity as IMember;
                if ((member.IsVirtual || member.IsOverride) && member.DeclaringType != null && ((IMember)overload.Entity).DeclaringType != null && member.DeclaringType.ReflectionName != ((IMember)overload.Entity).DeclaringType.ReflectionName)
                {
                    string str1 = ambience.GetString(member as IMember, flags);

                    string str2 = ambience.GetString(overload.Entity as IMember, flags);
                    if (str1 == str2)
                    {
                        if (string.IsNullOrEmpty(AmbienceService.GetDocumentationSummary((IMember)Entity)) && !string.IsNullOrEmpty(AmbienceService.GetDocumentationSummary((IMember)overload.Entity)))
                        {
                            SetMember(overload.Entity as IMember);
                        }
                        return;
                    }
                }

                string MemberId = (overload.Entity as IMember).GetIdString();
                if (Entity is IMethod && overload.Entity is IMethod)
                {
                    string signature1 = ambience.GetString(Entity as IMember, OutputFlags.IncludeParameters | OutputFlags.IncludeGenerics | OutputFlags.GeneralizeGenerics);
                    string signature2 = ambience.GetString(overload.Entity as IMember, OutputFlags.IncludeParameters | OutputFlags.IncludeGenerics | OutputFlags.GeneralizeGenerics);
                    if (signature1 == signature2)
                    {
                        return;
                    }
                }

                if (MemberId != (this.Entity as IMember).GetIdString() && !overloads.ContainsKey(MemberId))
                {
//					if (((IMethod)overload.Member).IsPartial)
//						return;
                    overloads[MemberId] = overload;

                    //if any of the overloads is obsolete, we should not mark the item obsolete
                    if (!(overload.Entity as IMember).IsObsolete())
                    {
                        DisplayFlags &= ~DisplayFlags.Obsolete;
                    }

/*
 *                                      //make sure that if there are generic overloads, we show a generic signature
 *                                      if (overload.Member is IType && Member is IType && ((IType)Member).TypeParameters.Count == 0 && ((IType)overload.Member).TypeParameters.Count > 0) {
 *                                              displayText = overload.DisplayText;
 *                                      }
 *                                      if (overload.Member is IMethod && Member is IMethod && ((IMethod)Member).TypeParameters.Count == 0 && ((IMethod)overload.Member).TypeParameters.Count > 0) {
 *                                              displayText = overload.DisplayText;
 *                                      }*/
                }
            }


            // always set the member with the least type parameters as the main member.
//			if (Member is ITypeParameterMember && overload.Member is ITypeParameterMember) {
//				if (((ITypeParameterMember)Member).TypeParameters.Count > ((ITypeParameterMember)overload.Member).TypeParameters.Count) {
//					INode member = Member;
//					SetMember (overload.Member);
//					overload.Member = member;
//				}
//			}
        }
        public override string GetDescription(int overload, int currentParameter)
        {
//			var flags = OutputFlags.ClassBrowserEntries | OutputFlags.IncludeMarkup | OutputFlags.IncludeGenerics;
//
//			string name = delegateType.Name;
//			var parameters = new StringBuilder ();
//			int curLen = 0;

            var sb = new StringBuilder();

            if (delegateType.GetDefinition().IsObsolete())
            {
                sb.AppendLine();
                sb.Append(GettextCatalog.GetString("[Obsolete]"));
            }
            var curParameter = currentParameter >= 0 && currentParameter < delegateMethod.Parameters.Count ? delegateMethod.Parameters [currentParameter] : null;

            string docText = AmbienceService.GetDocumentation(delegateType.GetDefinition());

            if (!string.IsNullOrEmpty(docText))
            {
                string text = docText;
                if (curParameter != null)
                {
                    Regex paramRegex = new Regex("(\\<param\\s+name\\s*=\\s*\"" + curParameter.Name + "\"\\s*\\>.*?\\</param\\>)", RegexOptions.Compiled);
                    Match match      = paramRegex.Match(docText);
                    if (match.Success)
                    {
                        text = match.Groups [1].Value;
                        text = "<summary>" + AmbienceService.GetDocumentationSummary(delegateMethod) + "</summary>" + text;
                    }
                }
                else
                {
                    text = "<summary>" + AmbienceService.GetDocumentationSummary(delegateMethod) + "</summary>";
                }
                sb.Append(AmbienceService.GetDocumentationMarkup(text, new AmbienceService.DocumentationFormatOptions
                {
                    HighlightParameter = curParameter != null ? curParameter.Name : null,
                    Ambience           = ambience,
                    SmallText          = true,
                    BoldHeadings       = false
                }));
            }

            if (curParameter != null)
            {
                var returnType = curParameter.Type;
                if (returnType.Kind == TypeKind.Delegate)
                {
                    if (sb.Length > 0)
                    {
                        sb.AppendLine();
                        sb.AppendLine();
                    }
                    sb.Append("<small>");
                    sb.AppendLine(GettextCatalog.GetString("Delegate information"));
                    sb.Append(ambience.GetString(returnType, OutputFlags.ReformatDelegates | OutputFlags.IncludeReturnType | OutputFlags.IncludeParameters | OutputFlags.IncludeParameterName));
                    sb.Append("</small>");
                }
            }
            return(sb.ToString());
        }
Пример #9
0
        public void GenerateDoc(IMember member)
        {
            Init(member);

            this.member      = member;
            this.currentType = GetType(member);
            DocConfig.Instance.Rules.ForEach(r => r.Run(this));

            if (member.CanHaveParameters)
            {
                this.currentType = "parameter";
                foreach (IParameter p in member.Parameters)
                {
                    curName     = p.Name;
                    this.member = member;
                    SplitWords(p, p.Name);
                    DocConfig.Instance.Rules.ForEach(r => r.Run(this));
                }
            }

            if (member is IMethod)
            {
                IMethod method = (IMethod)member;
                int     count  = 1;
                foreach (var param in method.TypeParameters)
                {
                    this.currentType  = "typeparam";
                    curName           = param.Name;
                    tags["TypeParam"] = param.Name;
                    switch (count)
                    {
                    case 1:
                        tags["TypeParamNumber"] = "1st";
                        break;

                    case 2:
                        tags["TypeParamNumber"] = "2nd";
                        break;

                    case 3:
                        tags["TypeParamNumber"] = "3rd";
                        break;

                    default:
                        tags["TypeParamNumber"] = count + "th";
                        break;
                    }
                    count++;
                    Console.WriteLine("type parameter:" + curName);
                    DocConfig.Instance.Rules.ForEach(r => r.Run(this));
                }
            }

            IType type;

            if (member is IType)
            {
                type = (IType)member;
            }
            else
            {
                type = member.DeclaringType;
            }

            this.currentType = "exception";
            foreach (var exception in visitor.Exceptions)
            {
                var exceptionType = HelperMethods.ConvertToReturnType(exception);


                curName           = exceptionType.FullName;
                tags["Exception"] = exceptionType.ToInvariantString();
                SplitWords(exceptionType, exceptionType.Name);

                if (type != null)
                {
                    IType  resolvedType = type.SourceProjectDom.SearchType(type, exceptionType);
                    string sentence     = AmbienceService.GetDocumentationSummary(resolvedType).Trim();
                    if (sentence.StartsWith("<para>") && sentence.EndsWith("</para>"))
                    {
                        sentence = sentence.Substring("<para>".Length, sentence.Length - "<para>".Length - "</para>".Length).Trim();
                    }
                    if (sentence.StartsWith("Represents the error that occurs when"))
                    {
                        sentence = "Is thrown when" + sentence.Substring("Represents the error that occurs when".Length);
                    }
                    if (!string.IsNullOrEmpty(sentence))
                    {
                        Set("exception", curName, sentence);
                    }
                }

                DocConfig.Instance.Rules.ForEach(r => r.Run(this));
            }
        }
Пример #10
0
        public string GetMethodMarkup(int overload, string[] parameterMarkup, int currentParameter)
        {
            string        name       = (this.delegateName ?? (methods[overload].IsConstructor ? ambience.GetString(methods[overload].DeclaringType, OutputFlags.ClassBrowserEntries | OutputFlags.IncludeMarkup | OutputFlags.IncludeGenerics) : methods[overload].Name));
            StringBuilder parameters = new StringBuilder();
            int           curLen     = 0;
            string        prefix     = !methods[overload].IsConstructor ? ambience.GetString(methods[overload].ReturnType, OutputFlags.ClassBrowserEntries | OutputFlags.IncludeMarkup | OutputFlags.IncludeGenerics) + " " : "";

            foreach (string parameter in parameterMarkup)
            {
                if (parameters.Length > 0)
                {
                    parameters.Append(", ");
                }
                string         text;
                Pango.AttrList attrs;
                char           ch;
                Pango.Global.ParseMarkup(parameter, '_', out attrs, out text, out ch);
                if (curLen > 80)
                {
                    parameters.AppendLine();
                    parameters.Append(new string (' ', (prefix != null ? prefix.Length : 0) + name.Length + 4));
                    curLen = 0;
                }
                curLen += text.Length + 2;
                parameters.Append(parameter);
            }
            StringBuilder sb = new StringBuilder();

            if (methods[overload].WasExtended)
            {
                sb.Append(GettextCatalog.GetString("(Extension) "));
            }
            sb.Append(prefix);
            sb.Append("<b>");
            sb.Append(name);
            sb.Append("</b> (");
            sb.Append(parameters.ToString());
            sb.Append(")");

            if (methods[overload].IsObsolete)
            {
                sb.AppendLine();
                sb.Append(GettextCatalog.GetString("[Obsolete]"));
            }
            IParameter curParameter = currentParameter >= 0 && currentParameter < methods[overload].Parameters.Count ? methods[overload].Parameters[currentParameter] : null;

            string docText = AmbienceService.GetDocumentation(methods[overload]);

            if (!string.IsNullOrEmpty(docText))
            {
                string text = docText;
                if (curParameter != null)
                {
                    Regex paramRegex = new Regex("(\\<param\\s+name\\s*=\\s*\"" + curParameter.Name + "\"\\s*\\>.*?\\</param\\>)", RegexOptions.Compiled);
                    Match match      = paramRegex.Match(docText);
                    if (match.Success)
                    {
                        text = match.Groups[1].Value;
                        text = "<summary>" + AmbienceService.GetDocumentationSummary(methods[overload]) + "</summary>" + text;
                    }
                }
                else
                {
                    text = "<summary>" + AmbienceService.GetDocumentationSummary(methods[overload]) + "</summary>";
                }
                sb.AppendLine();
                sb.Append(AmbienceService.GetDocumentationMarkup(text, new AmbienceService.DocumentationFormatOptions {
                    HighlightParameter = curParameter != null ? curParameter.Name : null,
                    Ambience           = ambience,
                    SmallText          = true
                }));
            }
            return(sb.ToString());
        }
        public string CreateTooltip(ProjectDom dom, ICompilationUnit unit, MonoDevelop.Projects.Dom.ResolveResult result, string errorInformations, Ambience ambience, Gdk.ModifierType modifierState)
        {
            OutputSettings settings = new OutputSettings(OutputFlags.ClassBrowserEntries | OutputFlags.IncludeParameterName | OutputFlags.IncludeKeywords | OutputFlags.IncludeMarkup | OutputFlags.UseFullName);

            if ((Gdk.ModifierType.ShiftMask & modifierState) == Gdk.ModifierType.ShiftMask)
            {
                settings.EmitNameCallback = delegate(INode domVisitable, ref string outString) {
                    // crop used namespaces.
                    if (unit != null)
                    {
                        int len = 0;
                        foreach (IUsing u in unit.Usings)
                        {
                            foreach (string ns in u.Namespaces)
                            {
                                if (outString.StartsWith(ns + "."))
                                {
                                    len = Math.Max(len, ns.Length + 1);
                                }
                            }
                        }
                        string newName = outString.Substring(len);
                        int    count   = 0;
                        // check if there is a name clash.
                        if (dom.GetType(newName) != null)
                        {
                            count++;
                        }
                        foreach (IUsing u in unit.Usings)
                        {
                            foreach (string ns in u.Namespaces)
                            {
                                if (dom.GetType(ns + "." + newName) != null)
                                {
                                    count++;
                                }
                            }
                        }

                        if (len > 0 && count == 1)
                        {
                            outString = newName;
                        }
                    }
                };
            }

            // Approximate value for usual case
            StringBuilder s   = new StringBuilder(150);
            string        doc = null;

            if (result != null)
            {
                if (result is AggregatedResolveResult)
                {
                    result = ((AggregatedResolveResult)result).PrimaryResult;
                }
                if (result is ParameterResolveResult)
                {
                    s.Append("<small><i>");
                    s.Append(paramStr);
                    s.Append("</i></small>\n");
                    s.Append(ambience.GetString(((ParameterResolveResult)result).Parameter, settings));
                }
                else if (result is LocalVariableResolveResult)
                {
                    s.Append("<small><i>");
                    s.Append(localStr);
                    s.Append("</i></small>\n");
                    s.Append(ambience.GetString(((LocalVariableResolveResult)result).ResolvedType, settings));
                    s.Append(" ");
                    s.Append(((LocalVariableResolveResult)result).LocalVariable.Name);
                }
                else if (result is UnresolvedMemberResolveResult)
                {
                    s.Append(String.Format(GettextCatalog.GetString("Unresolved member '{0}'"), ((UnresolvedMemberResolveResult)result).MemberName));
                }
                else if (result is MethodResolveResult)
                {
                    MethodResolveResult mrr = (MethodResolveResult)result;
                    s.Append("<small><i>");
                    s.Append(methodStr);
                    s.Append("</i></small>\n");
                    s.Append(ambience.GetString(mrr.MostLikelyMethod, settings));
                    if (mrr.Methods.Count > 1)
                    {
                        int overloadCount = mrr.Methods.Count - 1;
                        s.Append(string.Format(GettextCatalog.GetPluralString(" (+{0} overload)", " (+{0} overloads)", overloadCount), overloadCount));
                    }
                    doc = AmbienceService.GetDocumentationSummary(((MethodResolveResult)result).MostLikelyMethod);
                }
                else if (result is MemberResolveResult)
                {
                    IMember member = ((MemberResolveResult)result).ResolvedMember;
                    if (member == null)
                    {
                        IReturnType returnType = ((MemberResolveResult)result).ResolvedType;
                        if (returnType != null)
                        {
                            IType type = dom.GetType(returnType);
                            if (type != null)
                            {
                                s.Append("<small><i>");
                                s.Append(typeStr);
                                s.Append("</i></small>\n");
                                s.Append(ambience.GetString(type, settings));
                                doc = AmbienceService.GetDocumentationSummary(type);
                            }
                        }
                    }
                    else
                    {
                        if (member is IField)
                        {
                            s.Append("<small><i>");
                            s.Append(fieldStr);
                            s.Append("</i></small>\n");
                        }
                        else if (member is IProperty)
                        {
                            s.Append("<small><i>");
                            s.Append(propertyStr);
                            s.Append("</i></small>\n");
                        }
                        s.Append(ambience.GetString(member, settings));
                        doc = AmbienceService.GetDocumentationSummary(member);
                    }
                }
                else if (result is NamespaceResolveResult)
                {
                    s.Append("<small><i>");
                    s.Append(namespaceStr);
                    s.Append("</i></small>\n");
                    s.Append(ambience.GetString(new Namespace(((NamespaceResolveResult)result).Namespace), settings));
                }
                else
                {
                    s.Append(ambience.GetString(result.ResolvedType, settings));
                }


                if (!string.IsNullOrEmpty(doc))
                {
                    s.Append("\n<small>");
                    s.Append(AmbienceService.GetDocumentationMarkup("<summary>" + doc + "</summary>"));
                    s.Append("</small>");
                }
            }

            if (!string.IsNullOrEmpty(errorInformations))
            {
                if (s.Length != 0)
                {
                    s.Append("\n\n");
                }
                s.Append("<small>");
                s.Append(errorInformations);
                s.Append("</small>");
            }
            return(s.ToString());
        }
Пример #12
0
        void CheckDescription()
        {
            if (descriptionCreated)
            {
                return;
            }

            StringBuilder sb = new StringBuilder();

            descriptionCreated = true;
            if (Member is IMethod && ((IMethod)Member).WasExtended)
            {
                sb.Append(GettextCatalog.GetString("(Extension) "));
            }
            sb.Append(ambience.GetString(Member,
                                         OutputFlags.ClassBrowserEntries | OutputFlags.IncludeKeywords | OutputFlags.UseFullName | OutputFlags.IncludeParameterName | OutputFlags.IncludeMarkup
                                         | (HideExtensionParameter ? OutputFlags.HideExtensionsParameter : OutputFlags.None)));

            if (Member is IMember)
            {
                if ((Member as IMember).IsObsolete)
                {
                    sb.AppendLine();
                    sb.Append(GettextCatalog.GetString("[Obsolete]"));
                    DisplayFlags |= DisplayFlags.Obsolete;
                }
                string docMarkup = AmbienceService.GetDocumentationMarkup("<summary>" + AmbienceService.GetDocumentationSummary((IMember)Member) + "</summary>", new AmbienceService.DocumentationFormatOptions {
                    Ambience = ambience
                });
                if (!string.IsNullOrEmpty(docMarkup))
                {
                    sb.AppendLine();
                    sb.Append(docMarkup);
                }
            }
            description = sb.ToString();
        }
Пример #13
0
        void CheckDescription()
        {
            if (descriptionCreated)
            {
                return;
            }

            StringBuilder sb = new StringBuilder();

            descriptionCreated = true;
            if (Member is IMethod && ((IMethod)Member).WasExtended)
            {
                sb.Append(GettextCatalog.GetString("(Extension) "));
            }
            sb.Append(ambience.GetString(Member,
                                         OutputFlags.ClassBrowserEntries | OutputFlags.IncludeKeywords | OutputFlags.UseFullName | OutputFlags.IncludeParameterName | OutputFlags.IncludeMarkup | (HideExtensionParameter ? OutputFlags.HideExtensionsParameter : OutputFlags.None)));

            if (Member is IMember)
            {
                var m = (IMember)Member;
                if (m.IsObsolete)
                {
                    sb.AppendLine();
                    sb.Append(GettextCatalog.GetString("[Obsolete]"));
                    DisplayFlags |= DisplayFlags.Obsolete;
                }
                var returnType = m.SourceProjectDom != null?m.SourceProjectDom.GetType(m.ReturnType) : null;

                if (returnType != null && returnType.ClassType == MonoDevelop.Projects.Dom.ClassType.Delegate)
                {
                    sb.AppendLine();
                    sb.AppendLine(GettextCatalog.GetString("Delegate information"));
                    sb.Append(ambience.GetString(returnType, OutputFlags.ReformatDelegates | OutputFlags.IncludeReturnType | OutputFlags.IncludeParameters | OutputFlags.IncludeParameterName));
                }

                string docMarkup = AmbienceService.GetDocumentationMarkup("<summary>" + AmbienceService.GetDocumentationSummary((IMember)Member) + "</summary>", new AmbienceService.DocumentationFormatOptions {
                    Ambience = ambience
                });
                if (!string.IsNullOrEmpty(docMarkup))
                {
                    sb.AppendLine();
                    sb.Append(docMarkup);
                }
            }
            description = sb.ToString();
        }
        public string CreateTooltip(IParsedFile unit, ResolveResult result, string errorInformations, Ambience ambience, Gdk.ModifierType modifierState)
        {
            OutputSettings settings = new OutputSettings(OutputFlags.ClassBrowserEntries | OutputFlags.IncludeParameterName | OutputFlags.IncludeKeywords | OutputFlags.IncludeMarkup | OutputFlags.UseFullName);
            //			if ((Gdk.ModifierType.ShiftMask & modifierState) == Gdk.ModifierType.ShiftMask) {
            //				settings.EmitNameCallback = delegate(object domVisitable, ref string outString) {
            //					// crop used namespaces.
            //					if (unit != null) {
            //						int len = 0;
            //						foreach (var u in unit.Usings) {
            //							foreach (string ns in u.Namespaces) {
            //								if (outString.StartsWith (ns + ".")) {
            //									len = Math.Max (len, ns.Length + 1);
            //								}
            //							}
            //						}
            //						string newName = outString.Substring (len);
            //						int count = 0;
            //						// check if there is a name clash.
            //						if (dom.GetType (newName) != null)
            //							count++;
            //						foreach (IUsing u in unit.Usings) {
            //							foreach (string ns in u.Namespaces) {
            //								if (dom.GetType (ns + "." + newName) != null)
            //									count++;
            //							}
            //						}
            //						if (len > 0 && count == 1)
            //							outString = newName;
            //					}
            //				};
            //			}

            // Approximate value for usual case
            StringBuilder s   = new StringBuilder(150);
            string        doc = null;

            if (result != null)
            {
                if (result is UnknownIdentifierResolveResult)
                {
                    s.Append(String.Format(GettextCatalog.GetString("Unresolved identifier '{0}'"), ((UnknownIdentifierResolveResult)result).Identifier));
                }
                else if (result.IsError)
                {
                    s.Append(GettextCatalog.GetString("Resolve error."));
                }
                else if (result is LocalResolveResult)
                {
                    var lr = (LocalResolveResult)result;
                    s.Append("<small><i>");
                    s.Append(lr.IsParameter ? paramStr : localStr);
                    s.Append("</i></small>\n");
                    s.Append(ambience.GetString(lr.Variable.Type, settings));
                    s.Append(" ");
                    s.Append(lr.Variable.Name);
                }
                else if (result is MethodGroupResolveResult)
                {
                    var mrr = (MethodGroupResolveResult)result;
                    s.Append("<small><i>");
                    s.Append(methodStr);
                    s.Append("</i></small>\n");
                    var allMethods = new List <IMethod> (mrr.Methods);
                    foreach (var l in mrr.GetExtensionMethods())
                    {
                        allMethods.AddRange(l);
                    }

                    var method = allMethods.FirstOrDefault();
                    if (method != null)
                    {
                        s.Append(ambience.GetString(method, settings));
                        if (allMethods.Count > 1)
                        {
                            int overloadCount = allMethods.Count - 1;
                            s.Append(string.Format(GettextCatalog.GetPluralString(" (+{0} overload)", " (+{0} overloads)", overloadCount), overloadCount));
                        }
                        doc = AmbienceService.GetDocumentationSummary(method);
                    }
                }
                else if (result is MemberResolveResult)
                {
                    var member = ((MemberResolveResult)result).Member;
                    s.Append("<small><i>");
                    s.Append(GetString(member));
                    s.Append("</i></small>\n");
                    var field = member as IField;
                    if (field != null && field.IsConst)
                    {
                        s.Append(ambience.GetString(field.Type, settings));
                        s.Append(" ");
                        s.Append(field.Name);
                        s.Append(" = ");
                        s.Append(GetConst(field.ConstantValue));
                        s.Append(";");
                    }
                    else
                    {
                        s.Append(ambience.GetString(member, settings));
                    }
                    doc = AmbienceService.GetDocumentationSummary(member);
                }
                else if (result is NamespaceResolveResult)
                {
                    s.Append("<small><i>");
                    s.Append(namespaceStr);
                    s.Append("</i></small>\n");
                    s.Append(ambience.GetString(((NamespaceResolveResult)result).NamespaceName, settings));
                }
                else
                {
                    var tr         = result;
                    var typeString = GetString(tr.Type);
                    if (!string.IsNullOrEmpty(typeString))
                    {
                        s.Append("<small><i>");
                        s.Append(typeString);
                        s.Append("</i></small>\n");
                    }
                    settings.OutputFlags |= OutputFlags.UseFullName;
                    s.Append(ambience.GetString(tr.Type, settings));
                    doc = AmbienceService.GetDocumentationSummary(tr.Type.GetDefinition());
                }

                if (!string.IsNullOrEmpty(doc))
                {
                    s.Append("\n<small>");
                    s.Append(AmbienceService.GetDocumentationMarkup("<summary>" + doc + "</summary>"));
                    s.Append("</small>");
                }
            }

            if (!string.IsNullOrEmpty(errorInformations))
            {
                if (s.Length != 0)
                {
                    s.Append("\n\n");
                }
                s.Append("<small>");
                s.Append(errorInformations);
                s.Append("</small>");
            }
            return(s.ToString());
        }
Пример #15
0
        void AddAspAttributeValueCompletionData(CompletionDataList list, S.XName tagName, S.XName attName, string id)
        {
            Debug.Assert(tagName.IsValid && tagName.HasPrefix);
            Debug.Assert(attName.IsValid && !attName.HasPrefix);

            IType controlClass = HasDoc ? refman.GetControlType(tagName.Prefix, tagName.Name) : null;

            if (controlClass == null)
            {
                LoggingService.LogWarning("Could not obtain IType for {0}", tagName.FullName);

                var database = WebTypeContext.GetSystemWebDom(project);
                controlClass = database.LookupType("System.Web.UI.WebControls", "WebControl");

                if (controlClass == null)
                {
                    LoggingService.LogWarning("Could not obtain IType for System.Web.UI.WebControls.WebControl");
                    return;
                }
            }

            //find the codebehind class
            IType        codeBehindClass;
            ICompilation projectDatabase;

            GetCodeBehind(out codeBehindClass, out projectDatabase);

            //if it's an event, suggest compatible methods
            if (codeBehindClass != null && attName.Name.StartsWith("On"))
            {
                string eventName = attName.Name.Substring(2);

                foreach (IEvent ev in controlClass.GetEvents())
                {
                    if (ev.Name == eventName)
                    {
                        var domMethod = BindingService.MDDomToCodeDomMethod(ev);
                        if (domMethod == null)
                        {
                            return;
                        }

                        foreach (IMethod meth
                                 in BindingService.GetCompatibleMethodsInClass(codeBehindClass, ev))
                        {
                            list.Add(meth.Name, "md-method",
                                     GettextCatalog.GetString("A compatible method in the CodeBehind class"));
                        }

                        string suggestedIdentifier = ev.Name;
                        if (id != null)
                        {
                            suggestedIdentifier = id + "_" + suggestedIdentifier;
                        }
                        else
                        {
                            suggestedIdentifier = tagName.Name + "_" + suggestedIdentifier;
                        }

                        domMethod.Name = BindingService.GenerateIdentifierUniqueInClass
                                             (codeBehindClass, suggestedIdentifier);
                        domMethod.Attributes = (domMethod.Attributes & ~System.CodeDom.MemberAttributes.AccessMask)
                                               | System.CodeDom.MemberAttributes.Family;

                        list.Add(
                            new SuggestedHandlerCompletionData(project, domMethod, codeBehindClass,
                                                               MonoDevelop.DesignerSupport.CodeBehind.GetNonDesignerClass(codeBehindClass))
                            );
                        return;
                    }
                }
            }

            if (projectDatabase == null)
            {
                projectDatabase = WebTypeContext.GetSystemWebDom(project);

                if (projectDatabase == null)
                {
                    LoggingService.LogWarning("Could not obtain type database in AddAspAttributeCompletionData");
                    return;
                }
            }

            //if it's a property and is an enum or bool, suggest valid values
            foreach (IProperty prop in controlClass.GetProperties())
            {
                if (prop.Name != attName.Name)
                {
                    continue;
                }

                //boolean completion
                if (prop.ReturnType.Equals(projectDatabase.FindType(KnownTypeCode.Boolean)))
                {
                    AddBooleanCompletionData(list);
                    return;
                }
                //color completion
                if (prop.ReturnType.Equals(projectDatabase.FindType(typeof(System.Drawing.Color))))
                {
                    System.Drawing.ColorConverter conv = new System.Drawing.ColorConverter();
                    foreach (System.Drawing.Color c in conv.GetStandardValues(null))
                    {
                        if (c.IsSystemColor)
                        {
                            continue;
                        }
                        string hexcol = string.Format("#{0:x2}{1:x2}{2:x2}", c.R, c.G, c.B);
                        list.Add(c.Name, hexcol);
                    }
                    return;
                }

                //enum completion
                IType retCls = prop.ReturnType;
                if (retCls != null && retCls.Kind == TypeKind.Enum)
                {
                    foreach (var enumVal in retCls.GetFields())
                    {
                        if (enumVal.IsPublic && enumVal.IsStatic)
                        {
                            list.Add(enumVal.Name, "md-literal", AmbienceService.GetDocumentationSummary(enumVal));
                        }
                    }
                    return;
                }
            }
        }
Пример #16
0
        /*public override void RunParameterCompletionCommand ()
         * {
         *      if (localDocumentInfo == null) {
         *              base.RunParameterCompletionCommand ();
         *              return;
         *      }
         *      var doc = document;
         *      document = localDocumentInfo.HiddenDocument;
         *      var cw = CompletionWidget;
         *      CompletionWidget = documentBuilder.CreateCompletionWidget (localDocumentInfo);
         *      try {
         *              base.RunParameterCompletionCommand ();
         *      } finally {
         *              document = doc;
         *              CompletionWidget = cw;
         *      }
         * }*/

        protected override void GetElementCompletions(CompletionDataList list)
        {
            S.XName parentName = GetParentElementName(0);

            //fallback
            if (!HasDoc)
            {
                AddAspBeginExpressions(list);
                string aspPrefix = "asp:";
                foreach (var cls in WebTypeContext.ListSystemControlClasses(TypeSystemService.GetCompilation(project).LookupType("System.Web.UI", "Control"), project))
                {
                    list.Add(new AspTagCompletionData(aspPrefix, cls));
                }

                base.GetElementCompletions(list);
                return;
            }

            IType controlClass = null;

            if (parentName.HasPrefix)
            {
                controlClass = refman.GetControlType(parentName.Prefix, parentName.Name);
            }
            else
            {
                S.XName grandparentName = GetParentElementName(1);
                if (grandparentName.IsValid && grandparentName.HasPrefix)
                {
                    controlClass = refman.GetControlType(grandparentName.Prefix, grandparentName.Name);
                }
            }

            //we're just in HTML
            if (controlClass == null)
            {
                //root element?
                if (!parentName.IsValid)
                {
                    if (aspDoc.Info.Subtype == WebSubtype.WebControl)
                    {
                        AddHtmlTagCompletionData(list, Schema, new S.XName("div"));
                        AddAspBeginExpressions(list);
                        list.AddRange(refman.GetControlCompletionData());
                        AddMiscBeginTags(list);
                    }
                    else if (!string.IsNullOrEmpty(aspDoc.Info.MasterPageFile))
                    {
                        //FIXME: add the actual region names
                        list.Add(new CompletionData("asp:Content"));
                    }
                }
                else
                {
                    AddAspBeginExpressions(list);
                    list.AddRange(refman.GetControlCompletionData());
                    base.GetElementCompletions(list);
                }
                return;
            }

            string defaultProp;
            bool   childrenAsProperties = AreChildrenAsProperties(controlClass, out defaultProp);

            if (defaultProp != null && defaultProp.Length == 0)
            {
                defaultProp = null;
            }

            //parent permits child controls directly
            if (!childrenAsProperties)
            {
                AddAspBeginExpressions(list);
                list.AddRange(refman.GetControlCompletionData());
                AddMiscBeginTags(list);
                //TODO: get correct parent for Content tags
                AddHtmlTagCompletionData(list, Schema, new S.XName("body"));
                return;
            }

            //children of properties
            if (childrenAsProperties && (!parentName.HasPrefix || defaultProp != null))
            {
                if (controlClass.GetProjectContent() == null)
                {
                    LoggingService.LogWarning("IType {0} does not have a SourceProjectDom", controlClass);
                    return;
                }

                string    propName = defaultProp ?? parentName.Name;
                IProperty property =
                    controlClass.GetProperties()
                    .Where(x => string.Compare(propName, x.Name, StringComparison.OrdinalIgnoreCase) == 0)
                    .FirstOrDefault();

                if (property == null)
                {
                    return;
                }

                //sanity checks on attributes
                switch (GetPersistenceMode(property))
                {
                case System.Web.UI.PersistenceMode.Attribute:
                case System.Web.UI.PersistenceMode.EncodedInnerDefaultProperty:
                    return;

                case System.Web.UI.PersistenceMode.InnerDefaultProperty:
                    if (!parentName.HasPrefix)
                    {
                        return;
                    }
                    break;

                case System.Web.UI.PersistenceMode.InnerProperty:
                    if (parentName.HasPrefix)
                    {
                        return;
                    }
                    break;
                }

                //check if allows freeform ASP/HTML content
                if (property.ReturnType.ToString() == "System.Web.UI.ITemplate")
                {
                    AddAspBeginExpressions(list);
                    AddMiscBeginTags(list);
                    AddHtmlTagCompletionData(list, Schema, new S.XName("body"));
                    list.AddRange(refman.GetControlCompletionData());
                    return;
                }

                //FIXME:unfortunately ASP.NET doesn't seem to have enough type information / attributes
                //to be able to resolve the correct child types here
                //so we assume it's a list and have a quick hack to find arguments of strongly typed ILists

                IType collectionType = property.ReturnType;
                if (collectionType == null)
                {
                    list.AddRange(refman.GetControlCompletionData());
                    return;
                }

                string  addStr = "Add";
                IMethod meth   = collectionType.GetMethods()
                                 .Where(m => m.Parameters.Count == 1 && m.Name == addStr).FirstOrDefault();

                if (meth != null)
                {
                    IType argType = meth.Parameters [0].Type;
                    if (argType != null && argType.IsBaseType(argType.GetDefinition().Compilation.LookupType("System.Web.UI", "Control")))
                    {
                        list.AddRange(refman.GetControlCompletionData(argType));
                        return;
                    }
                }

                list.AddRange(refman.GetControlCompletionData());
                return;
            }

            //properties as children of controls
            if (parentName.HasPrefix && childrenAsProperties)
            {
                if (controlClass.GetProjectContent() == null)
                {
                    LoggingService.LogWarning("IType {0} does not have a SourceProjectDom", controlClass);
                }

                foreach (IProperty prop in GetUniqueMembers <IProperty> (controlClass.GetProperties()))
                {
                    if (GetPersistenceMode(prop) != System.Web.UI.PersistenceMode.Attribute)
                    {
                        list.Add(prop.Name, prop.GetStockIcon(), AmbienceService.GetDocumentationSummary(prop));
                    }
                }
                return;
            }
        }