public override TooltipInformation CreateTooltipInformation (bool smartWrap)
		{
			var tooltipInfo = new TooltipInformation ();
			var resolver = ext.CSharpUnresolvedFile.GetResolver (ext.Compilation, ext.Document.Editor.Caret.Location);
			var sig = new SignatureMarkupCreator (resolver, ext.FormattingPolicy.CreateOptions ());
			sig.BreakLineAfterReturnType = smartWrap;
			tooltipInfo.SignatureMarkup = sig.GetLocalVariableMarkup (Variable);
			return tooltipInfo;
		}
		public override TooltipInformation CreateTooltipInformation (int overload, int currentParameter, bool smartWrap)
		{
			var tooltipInfo = new TooltipInformation ();
			var file = ext.CSharpUnresolvedFile;
			var compilation = ext.UnresolvedFileCompilation;
			var textEditorData = ext.TextEditorData;
			var formattingPolicy = ext.FormattingPolicy;
			var resolver = file.GetResolver (compilation, textEditorData.Caret.Location);
			var sig = new SignatureMarkupCreator (resolver, formattingPolicy.CreateOptions ());
			sig.HighlightParameter = currentParameter;
			tooltipInfo.SignatureMarkup = sig.GetArrayIndexerMarkup (arrayType);
			return tooltipInfo;
		}
Exemplo n.º 3
0
        public override TooltipInformation CreateTooltipInformation(int overload, int currentParameter, bool smartWrap)
        {
            var tooltipInfo      = new TooltipInformation();
            var file             = ext.CSharpUnresolvedFile;
            var compilation      = ext.UnresolvedFileCompilation;
            var textEditorData   = ext.TextEditorData;
            var formattingPolicy = ext.FormattingPolicy;
            var resolver         = file.GetResolver(compilation, textEditorData.Caret.Location);
            var sig = new SignatureMarkupCreator(resolver, formattingPolicy.CreateOptions());

            sig.HighlightParameter      = currentParameter;
            tooltipInfo.SignatureMarkup = sig.GetArrayIndexerMarkup(arrayType);
            return(tooltipInfo);
        }
Exemplo n.º 4
0
        public static Task <TooltipInformation> CreateTooltipInformation(CancellationToken ctoken, MonoDevelop.Ide.Editor.TextEditor editor, MonoDevelop.Ide.Editor.DocumentContext ctx, ISymbol entity, bool smartWrap, bool createFooter = false, SemanticModel model = null)
        {
            var tooltipInfo = new TooltipInformation();
//			if (resolver == null)
//				resolver = file != null ? file.GetResolver (compilation, textEditorData.Caret.Location) : new CSharpResolver (compilation);
            var sig = new SignatureMarkupCreator(ctx, editor != null ? editor.CaretOffset : 0);

            sig.SemanticModel            = model;
            sig.BreakLineAfterReturnType = smartWrap;

            return(Task.Run(() => {
                if (ctoken.IsCancellationRequested)
                {
                    return null;
                }
                try {
                    tooltipInfo.SignatureMarkup = sig.GetMarkup(entity);
                } catch (Exception e) {
                    LoggingService.LogError("Got exception while creating markup for :" + entity, e);
                    return new TooltipInformation();
                }

                if (ctoken.IsCancellationRequested)
                {
                    return null;
                }

                tooltipInfo.SummaryMarkup = Ambience.GetSummaryMarkup(entity) ?? "";

                //			if (entity is IMember) {
                //				var evt = (IMember)entity;
                //				if (evt.ReturnType.Kind == TypeKind.Delegate) {
                //					tooltipInfo.AddCategory (GettextCatalog.GetString ("Delegate Info"), sig.GetDelegateInfo (evt.ReturnType));
                //				}
                //			}
                if (entity is IMethodSymbol)
                {
                    var method = (IMethodSymbol)entity;
                    if (method.IsExtensionMethod)
                    {
                        tooltipInfo.AddCategory(GettextCatalog.GetString("Extension Method from"), method.ContainingType.Name);
                    }
                }
                if (createFooter)
                {
                    tooltipInfo.FooterMarkup = sig.CreateFooter(entity);
                }
                return tooltipInfo;
            }));
        }
        public static Task <TooltipInformation> CreateTooltipInformation(CancellationToken ctoken, MonoDevelop.Ide.Editor.TextEditor editor, MonoDevelop.Ide.Editor.DocumentContext ctx, ISymbol entity, bool smartWrap, bool createFooter = false, SemanticModel model = null)
        {
            if (entity == null)
            {
                return(TaskUtil.Default <TooltipInformation> ());
            }
            var tooltipInfo = new TooltipInformation();

            var sig = new SignatureMarkupCreator(ctx, editor != null ? editor.CaretOffset : 0);

            sig.SemanticModel            = model;
            sig.BreakLineAfterReturnType = smartWrap;

            return(Task.Run(() => {
                if (ctoken.IsCancellationRequested)
                {
                    return null;
                }
                try {
                    tooltipInfo.SignatureMarkup = sig.GetMarkup(entity);
                } catch (Exception e) {
                    LoggingService.LogError("Got exception while creating markup for :" + entity, e);
                    return new TooltipInformation();
                }

                if (ctoken.IsCancellationRequested)
                {
                    return null;
                }

                tooltipInfo.SummaryMarkup = Ambience.GetSummaryMarkup(entity) ?? "";

                if (entity is IMethodSymbol)
                {
                    var method = (IMethodSymbol)entity;
                    if (method.IsExtensionMethod)
                    {
                        tooltipInfo.AddCategory(GettextCatalog.GetString("Extension Method from"), method.ContainingType.Name);
                    }
                }
                if (createFooter)
                {
                    tooltipInfo.FooterMarkup = sig.CreateFooter(entity);
                }
                return tooltipInfo;
            }));
        }
Exemplo n.º 6
0
        public static TooltipInformation CreateTooltipInformation(ICompilation compilation, CSharpUnresolvedFile file, CSharpResolver resolver, TextEditorData textEditorData, MonoDevelop.CSharp.Formatting.CSharpFormattingPolicy formattingPolicy, IEntity entity, bool smartWrap, bool createFooter = false)
        {
            var tooltipInfo = new TooltipInformation();

            if (resolver == null)
            {
                resolver = file != null?file.GetResolver(compilation, textEditorData.Caret.Location) : new CSharpResolver(compilation);
            }
            var sig = new SignatureMarkupCreator(resolver, formattingPolicy.CreateOptions());

            sig.BreakLineAfterReturnType = smartWrap;
            try {
                tooltipInfo.SignatureMarkup = sig.GetMarkup(entity);
            } catch (Exception e) {
                LoggingService.LogError("Got exception while creating markup for :" + entity, e);
                return(new TooltipInformation());
            }
            tooltipInfo.SummaryMarkup = AmbienceService.GetSummaryMarkup(entity) ?? "";

            if (entity is IMember)
            {
                var evt = (IMember)entity;
                if (evt.ReturnType.Kind == TypeKind.Delegate)
                {
                    tooltipInfo.AddCategory(GettextCatalog.GetString("Delegate Info"), sig.GetDelegateInfo(evt.ReturnType));
                }
            }
            if (entity is IMethod)
            {
                var method = (IMethod)entity;
                if (method.IsExtensionMethod)
                {
                    tooltipInfo.AddCategory(GettextCatalog.GetString("Extension Method from"), method.DeclaringTypeDefinition.FullName);
                }
            }
            if (createFooter)
            {
                tooltipInfo.FooterMarkup = sig.CreateFooter(entity);
            }
            return(tooltipInfo);
        }
Exemplo n.º 7
0
        public static TooltipInformation CreateTooltipInformation(ICompilation compilation, CSharpUnresolvedFile file, TextEditorData textEditorData, MonoDevelop.CSharp.Formatting.CSharpFormattingPolicy formattingPolicy, IType type, bool smartWrap, bool createFooter = false)
        {
            var tooltipInfo = new TooltipInformation();

            if (type.Kind == TypeKind.Unknown)
            {
                return(tooltipInfo);
            }
            var resolver = file != null?file.GetResolver(compilation, textEditorData.Caret.Location) : new CSharpResolver(compilation);

            var sig = new SignatureMarkupCreator(resolver, formattingPolicy.CreateOptions());

            sig.BreakLineAfterReturnType = smartWrap;
            try {
                tooltipInfo.SignatureMarkup = sig.GetMarkup(type.IsParameterized ? type.GetDefinition() : type);
            } catch (Exception e) {
                LoggingService.LogError("Got exception while creating markup for :" + type, e);
                return(new TooltipInformation());
            }
            if (type.IsParameterized)
            {
                var typeInfo = new StringBuilder();
                for (int i = 0; i < type.TypeParameterCount; i++)
                {
                    typeInfo.AppendLine(type.GetDefinition().TypeParameters [i].Name + " is " + sig.GetTypeReferenceString(type.TypeArguments [i]));
                }
                tooltipInfo.AddCategory("Type Parameters", typeInfo.ToString());
            }

            var def = type.GetDefinition();

            if (def != null)
            {
                if (createFooter)
                {
                    tooltipInfo.FooterMarkup = sig.CreateFooter(def);
                }
                tooltipInfo.SummaryMarkup = AmbienceService.GetSummaryMarkup(def) ?? "";
            }
            return(tooltipInfo);
        }
                public override TooltipInformation CreateTooltipInformation(bool smartWrap)
                {
                    var def    = type.GetDefinition();
                    var result = def != null?MemberCompletionData.CreateTooltipInformation(compilation, file, List.Resolver, ext.TextEditorData, ext.FormattingPolicy, def, smartWrap)  : new TooltipInformation();

                    if (ConflictingTypes != null)
                    {
                        var conflicts = new StringBuilder();
                        var sig       = new SignatureMarkupCreator(List.Resolver, ext.FormattingPolicy.CreateOptions());
                        for (int i = 0; i < ConflictingTypes.Count; i++)
                        {
                            var ct = ConflictingTypes[i];
                            if (i > 0)
                            {
                                conflicts.AppendLine(",");
                            }
//							if ((i + 1) % 5 == 0)
//								conflicts.Append (Environment.NewLine + "\t");
                            conflicts.Append(sig.GetTypeReferenceString(((TypeCompletionData)ct).type));
                        }
                        result.AddCategory("Type Conflicts", conflicts.ToString());
                    }
                    return(result);
                }
		public static Task<TooltipInformation> CreateTooltipInformation (CancellationToken ctoken, MonoDevelop.Ide.Editor.TextEditor editor, MonoDevelop.Ide.Editor.DocumentContext ctx, ISymbol entity, bool smartWrap, bool createFooter = false, SemanticModel model = null)
		{
			var tooltipInfo = new TooltipInformation ();
//			if (resolver == null)
//				resolver = file != null ? file.GetResolver (compilation, textEditorData.Caret.Location) : new CSharpResolver (compilation);
			var sig = new SignatureMarkupCreator (ctx, editor != null ? editor.CaretOffset : 0);
			sig.SemanticModel = model;
			sig.BreakLineAfterReturnType = smartWrap;

			return Task.Run (() => {
				if (ctoken.IsCancellationRequested)
					return null;
				try {
					tooltipInfo.SignatureMarkup = sig.GetMarkup (entity);
				} catch (Exception e) {
					LoggingService.LogError ("Got exception while creating markup for :" + entity, e);
					return new TooltipInformation ();
				}

				if (ctoken.IsCancellationRequested)
					return null;
				
				tooltipInfo.SummaryMarkup = Ambience.GetSummaryMarkup (entity) ?? "";

				//			if (entity is IMember) {
				//				var evt = (IMember)entity;
				//				if (evt.ReturnType.Kind == TypeKind.Delegate) {
				//					tooltipInfo.AddCategory (GettextCatalog.GetString ("Delegate Info"), sig.GetDelegateInfo (evt.ReturnType));
				//				}
				//			}
				if (entity is IMethodSymbol) {
					var method = (IMethodSymbol)entity;
					if (method.IsExtensionMethod) {
						tooltipInfo.AddCategory (GettextCatalog.GetString ("Extension Method from"), method.ContainingType.Name);
					}
				}
				if (createFooter) {
					tooltipInfo.FooterMarkup = sig.CreateFooter (entity);
				}
				return tooltipInfo;
			});
		}
		public static TooltipInformation CreateTooltipInformation (ICompilation compilation, CSharpUnresolvedFile file, TextEditorData textEditorData, MonoDevelop.CSharp.Formatting.CSharpFormattingPolicy formattingPolicy, IParameterizedMember entity, int currentParameter, bool smartWrap)
		{
			var tooltipInfo = new TooltipInformation ();
			var resolver = file.GetResolver (compilation, textEditorData.Caret.Location);
			var sig = new SignatureMarkupCreator (resolver, formattingPolicy.CreateOptions ());
			sig.HighlightParameter = currentParameter;
			sig.BreakLineAfterReturnType = smartWrap;
			try {
				tooltipInfo.SignatureMarkup = sig.GetMarkup (entity);
			} catch (Exception e) {
				LoggingService.LogError ("Got exception while creating markup for :" + entity, e);
				return new TooltipInformation ();
			}
			tooltipInfo.SummaryMarkup = AmbienceService.GetSummaryMarkup (entity) ?? "";
			
			if (entity is IMethod) {
				var method = (IMethod)entity;
				if (method.IsExtensionMethod) {
					tooltipInfo.AddCategory (GettextCatalog.GetString ("Extension Method from"), method.DeclaringTypeDefinition.FullName);
				}
			}
			int paramIndex = currentParameter;

			if (entity is IMethod && ((IMethod)entity).IsExtensionMethod)
				paramIndex++;
			paramIndex = Math.Min (entity.Parameters.Count - 1, paramIndex);

			var curParameter = paramIndex >= 0  && paramIndex < entity.Parameters.Count ? entity.Parameters [paramIndex] : null;
			if (curParameter != null) {

				string docText = AmbienceService.GetDocumentation (entity);
				if (!string.IsNullOrEmpty (docText)) {
					string text = docText;
					Regex paramRegex = new Regex ("(\\<param\\s+name\\s*=\\s*\"" + curParameter.Name + "\"\\s*\\>.*?\\</param\\>)", RegexOptions.Compiled);
					Match match = paramRegex.Match (docText);
					
					if (match.Success) {
						text = AmbienceService.GetDocumentationMarkup (entity, match.Groups [1].Value);
						if (!string.IsNullOrWhiteSpace (text))
							tooltipInfo.AddCategory (GettextCatalog.GetString ("Parameter"), text);
					}
				}
		
				if (curParameter.Type.Kind == TypeKind.Delegate)
					tooltipInfo.AddCategory (GettextCatalog.GetString ("Delegate Info"), sig.GetDelegateInfo (curParameter.Type));
			}
			return tooltipInfo;
		}
Exemplo n.º 11
0
        TooltipInformation CreateTooltip(ToolTipData data, int offset, Ambience ambience, Gdk.ModifierType modifierState)
        {
            ResolveResult result = data.Result;
            var           doc    = IdeApp.Workbench.ActiveDocument;

            if (doc == null)
            {
                return(null);
            }
            bool createFooter = (modifierState & Gdk.ModifierType.Mod1Mask) != 0;
            var  file         = doc.ParsedDocument.ParsedFile as CSharpUnresolvedFile;

            if (file == null)
            {
                return(null);
            }
            try {
                if (result is AliasNamespaceResolveResult)
                {
                    var resolver = file.GetResolver(doc.Compilation, doc.Editor.Caret.Location);
                    var sig      = new SignatureMarkupCreator(resolver, doc.GetFormattingPolicy().CreateOptions());
                    sig.BreakLineAfterReturnType = false;
                    return(sig.GetAliasedNamespaceTooltip((AliasNamespaceResolveResult)result));
                }

                if (result is AliasTypeResolveResult)
                {
                    var resolver = file.GetResolver(doc.Compilation, doc.Editor.Caret.Location);
                    var sig      = new SignatureMarkupCreator(resolver, doc.GetFormattingPolicy().CreateOptions());
                    sig.BreakLineAfterReturnType = false;
                    return(sig.GetAliasedTypeTooltip((AliasTypeResolveResult)result));
                }

                if (data.Node is TypeOfExpression)
                {
                    var resolver = file.GetResolver(doc.Compilation, doc.Editor.Caret.Location);
                    var sig      = new SignatureMarkupCreator(resolver, doc.GetFormattingPolicy().CreateOptions());
                    sig.BreakLineAfterReturnType = false;
                    return(sig.GetTypeOfTooltip((TypeOfExpression)data.Node, result as TypeOfResolveResult));
                }
                if (data.Node is PrimitiveType && data.Node.Parent is Constraint)
                {
                    var t = (PrimitiveType)data.Node;
                    if (t.Keyword == "class" || t.Keyword == "new" || t.Keyword == "struct")
                    {
                        var resolver = file.GetResolver(doc.Compilation, doc.Editor.Caret.Location);
                        var sig      = new SignatureMarkupCreator(resolver, doc.GetFormattingPolicy().CreateOptions());
                        sig.BreakLineAfterReturnType = false;
                        return(sig.GetConstraintTooltip(t.Keyword));
                    }
                    return(null);
                }
                if (data.Node is ExternAliasDeclaration)
                {
                    var resolver = file.GetResolver(doc.Compilation, doc.Editor.Caret.Location);
                    var sig      = new SignatureMarkupCreator(resolver, doc.GetFormattingPolicy().CreateOptions());
                    sig.BreakLineAfterReturnType = false;
                    return(sig.GetExternAliasTooltip((ExternAliasDeclaration)data.Node, doc.Project as DotNetProject));
                }
                if (result == null && data.Node is CSharpTokenNode)
                {
                    var resolver = file.GetResolver(doc.Compilation, doc.Editor.Caret.Location);
                    var sig      = new SignatureMarkupCreator(resolver, doc.GetFormattingPolicy().CreateOptions());
                    sig.BreakLineAfterReturnType = false;
                    return(sig.GetKeywordTooltip(data.Node));
                }
                if (data.Node is PrimitiveType && ((PrimitiveType)data.Node).KnownTypeCode == KnownTypeCode.Void)
                {
                    var resolver = file.GetResolver(doc.Compilation, doc.Editor.Caret.Location);
                    var sig      = new SignatureMarkupCreator(resolver, doc.GetFormattingPolicy().CreateOptions());
                    sig.BreakLineAfterReturnType = false;
                    return(sig.GetKeywordTooltip("void", null));
                }
                if (data.Node is NullReferenceExpression)
                {
                    var resolver = file.GetResolver(doc.Compilation, doc.Editor.Caret.Location);
                    var sig      = new SignatureMarkupCreator(resolver, doc.GetFormattingPolicy().CreateOptions());
                    sig.BreakLineAfterReturnType = false;
                    return(sig.GetKeywordTooltip("null", null));
                }

                if (result is UnknownIdentifierResolveResult)
                {
                    return(new TooltipInformation()
                    {
                        SignatureMarkup = string.Format("error CS0103: The name `{0}' does not exist in the current context", ((UnknownIdentifierResolveResult)result).Identifier)
                    });
                }
                else if (result is UnknownMemberResolveResult)
                {
                    var ur = (UnknownMemberResolveResult)result;
                    if (ur.TargetType.Kind != TypeKind.Unknown)
                    {
                        return(new TooltipInformation()
                        {
                            SignatureMarkup = string.Format("error CS0117: `{0}' does not contain a definition for `{1}'", ur.TargetType.FullName, ur.MemberName)
                        });
                    }
                }
                else if (result.IsError)
                {
                    return(new TooltipInformation()
                    {
                        SignatureMarkup = "Unknown resolve error."
                    });
                }
                if (result is LocalResolveResult)
                {
                    var lr          = (LocalResolveResult)result;
                    var tooltipInfo = new TooltipInformation();
                    var resolver    = file.GetResolver(doc.Compilation, doc.Editor.Caret.Location);
                    var sig         = new SignatureMarkupCreator(resolver, doc.GetFormattingPolicy().CreateOptions());
                    sig.BreakLineAfterReturnType = false;
                    tooltipInfo.SignatureMarkup  = sig.GetLocalVariableMarkup(lr.Variable);
                    return(tooltipInfo);
                }
                else if (result is MethodGroupResolveResult)
                {
                    var mrr        = (MethodGroupResolveResult)result;
                    var allMethods = new List <IMethod> (mrr.Methods);
                    foreach (var l in mrr.GetExtensionMethods())
                    {
                        allMethods.AddRange(l);
                    }

                    var method = allMethods.FirstOrDefault();
                    if (method != null)
                    {
                        return(MemberCompletionData.CreateTooltipInformation(
                                   doc.Compilation,
                                   file,
                                   doc.Editor,
                                   doc.GetFormattingPolicy(),
                                   method,
                                   false,
                                   createFooter));
                    }
                }
                else if (result is CSharpInvocationResolveResult)
                {
                    var invocationResult = (CSharpInvocationResolveResult)result;
                    var member           = (IMember)invocationResult.ReducedMethod ?? invocationResult.Member;
                    return(MemberCompletionData.CreateTooltipInformation(
                               doc.Compilation,
                               file,
                               doc.Editor,
                               doc.GetFormattingPolicy(),
                               member,
                               false,
                               createFooter));
                }
                else if (result is MemberResolveResult)
                {
                    var member = ((MemberResolveResult)result).Member;
                    return(MemberCompletionData.CreateTooltipInformation(
                               doc.Compilation,
                               file,
                               doc.Editor,
                               doc.GetFormattingPolicy(),
                               member,
                               false,
                               createFooter));
                }
                else if (result is NamespaceResolveResult)
                {
                    var tooltipInfo = new TooltipInformation();
                    var resolver    = file.GetResolver(doc.Compilation, doc.Editor.Caret.Location);
                    var sig         = new SignatureMarkupCreator(resolver, doc.GetFormattingPolicy().CreateOptions());
                    sig.BreakLineAfterReturnType = false;
                    try {
                        tooltipInfo.SignatureMarkup = sig.GetMarkup(((NamespaceResolveResult)result).Namespace);
                    } catch (Exception e) {
                        LoggingService.LogError("Got exception while creating markup for :" + ((NamespaceResolveResult)result).Namespace, e);
                        return(new TooltipInformation());
                    }
                    return(tooltipInfo);
                }
                else if (result is OperatorResolveResult)
                {
                    var or          = result as OperatorResolveResult;
                    var tooltipInfo = new TooltipInformation();
                    var resolver    = file.GetResolver(doc.Compilation, doc.Editor.Caret.Location);
                    var sig         = new SignatureMarkupCreator(resolver, doc.GetFormattingPolicy().CreateOptions());
                    sig.BreakLineAfterReturnType = false;
                    try {
                        tooltipInfo.SignatureMarkup = sig.GetMarkup(or.UserDefinedOperatorMethod);
                    } catch (Exception e) {
                        LoggingService.LogError("Got exception while creating markup for :" + ((NamespaceResolveResult)result).Namespace, e);
                        return(new TooltipInformation());
                    }
                    return(tooltipInfo);
                }
                else
                {
                    return(MemberCompletionData.CreateTooltipInformation(
                               doc.Compilation,
                               file,
                               doc.Editor,
                               doc.GetFormattingPolicy(),
                               result.Type,
                               false,
                               createFooter));
                }
            } catch (Exception e) {
                LoggingService.LogError("Error while creating tooltip.", e);
                return(null);
            }

            return(null);
        }
Exemplo n.º 12
0
        public static TooltipInformation CreateTooltipInformation(ICompilation compilation, CSharpUnresolvedFile file, CSharpResolver resolver, TextEditorData textEditorData, MonoDevelop.CSharp.Formatting.CSharpFormattingPolicy formattingPolicy, IEntity entity, bool smartWrap, bool createFooter = false)
        {
            var tooltipInfo = new TooltipInformation();

            if (resolver == null)
            {
                resolver = file != null?file.GetResolver(compilation, textEditorData.Caret.Location) : new CSharpResolver(compilation);
            }
            var sig = new SignatureMarkupCreator(resolver, formattingPolicy.CreateOptions());

            sig.BreakLineAfterReturnType = smartWrap;
            try {
                tooltipInfo.SignatureMarkup = sig.GetMarkup(entity);
            } catch (Exception e) {
                LoggingService.LogError("Got exception while creating markup for :" + entity, e);
                return(new TooltipInformation());
            }
            tooltipInfo.SummaryMarkup = AmbienceService.GetSummaryMarkup(entity) ?? "";

            if (entity is IMember)
            {
                var evt = (IMember)entity;
                if (evt.ReturnType.Kind == TypeKind.Delegate)
                {
                    tooltipInfo.AddCategory(GettextCatalog.GetString("Delegate Info"), sig.GetDelegateInfo(evt.ReturnType));
                }
            }
            if (entity is IMethod)
            {
                var method = (IMethod)entity;
                if (method.IsExtensionMethod)
                {
                    tooltipInfo.AddCategory(GettextCatalog.GetString("Extension Method from"), method.DeclaringTypeDefinition.FullName);
                }
            }
            if (createFooter)
            {
                if (entity is IType)
                {
                    var type = entity as IType;
                    var def  = type.GetDefinition();
                    if (def != null)
                    {
                        if (!string.IsNullOrEmpty(def.ParentAssembly.AssemblyName))
                        {
                            var project = def.GetSourceProject();
                            if (project != null)
                            {
                                var relPath = FileService.AbsoluteToRelativePath(project.BaseDirectory, def.Region.FileName);
                                tooltipInfo.FooterMarkup = "<small>" + GettextCatalog.GetString("Project:\t{0}", AmbienceService.EscapeText(def.ParentAssembly.AssemblyName)) + "</small>" + Environment.NewLine +
                                                           "<small>" + GettextCatalog.GetString("File:\t\t{0} (line {1})", AmbienceService.EscapeText(relPath), def.Region.Begin.Line) + "</small>";
                            }
                        }
                    }
                }
                else if (entity.DeclaringTypeDefinition != null)
                {
                    var project = entity.DeclaringTypeDefinition.GetSourceProject();
                    if (project != null)
                    {
                        var relPath = FileService.AbsoluteToRelativePath(project.BaseDirectory, entity.Region.FileName);
                        tooltipInfo.FooterMarkup =
                            "<small>" + GettextCatalog.GetString("Project:\t{0}", AmbienceService.EscapeText(project.Name)) + "</small>" + Environment.NewLine +
                            "<small>" + GettextCatalog.GetString("From:\t{0}", AmbienceService.EscapeText(entity.DeclaringType.FullName)) + "</small>" + Environment.NewLine +
                            "<small>" + GettextCatalog.GetString("File:\t\t{0} (line {1})", AmbienceService.EscapeText(relPath), entity.Region.Begin.Line) + "</small>";
                    }
                }
            }
            return(tooltipInfo);
        }
			public override Task<TooltipInformation> CreateTooltipInformation (MonoDevelop.Ide.Editor.TextEditor editor, MonoDevelop.Ide.Editor.DocumentContext ctx, int currentParameter, bool smartWrap, CancellationToken cancelToken)
			{
				var sig = new SignatureMarkupCreator (ctx, editor != null ? editor.CaretOffset : 0) {
					HighlightParameter = currentParameter
				};
				return Task.FromResult (new TooltipInformation {
					SignatureMarkup = sig.GetArrayIndexerMarkup (arrayType)
				});
			}
            internal static Task <TooltipInformation> CreateTooltipInformation(MonoDevelop.Ide.Editor.TextEditor editor, MonoDevelop.Ide.Editor.DocumentContext ctx, ISymbol sym, int currentParameter, bool smartWrap, CancellationToken cancelToken)
            {
                var tooltipInfo = new TooltipInformation();
                var sig         = new SignatureMarkupCreator(ctx, editor != null ? editor.CaretOffset : 0);

                sig.HighlightParameter       = currentParameter;
                sig.BreakLineAfterReturnType = smartWrap;

                return(Task.Run(() => {
                    if (cancelToken.IsCancellationRequested)
                    {
                        return null;
                    }
                    try {
                        tooltipInfo.SignatureMarkup = sig.GetMarkup(sym);
                    } catch (Exception e) {
                        LoggingService.LogError("Got exception while creating markup for :" + sym, e);
                        return new TooltipInformation();
                    }
                    tooltipInfo.SummaryMarkup = Ambience.GetSummaryMarkup(sym) ?? "";

                    if (cancelToken.IsCancellationRequested)
                    {
                        return null;
                    }

                    if (sym is IMethodSymbol)
                    {
                        var method = (IMethodSymbol)sym;
                        if (method.IsExtensionMethod && method.ReducedFrom != null && method.ReducedFrom.ContainingType != null)
                        {
                            tooltipInfo.AddCategory(GettextCatalog.GetString("Extension Method from"), method.ReducedFrom.ContainingType.Name);
                        }
                    }
                    int paramIndex = currentParameter;

                    //				if (Symbol is IMethodSymbol && ((IMethodSymbol)Symbol).IsExtensionMethod)
                    //					paramIndex++;
                    var list = GetParameterList(sym);
                    paramIndex = Math.Min(list.Length - 1, paramIndex);

                    var curParameter = paramIndex >= 0 && paramIndex < list.Length ? list [paramIndex] : null;
                    if (curParameter != null)
                    {
                        string docText = Ambience.GetDocumentation(sym);
                        if (!string.IsNullOrEmpty(docText))
                        {
                            string text = docText;
                            Regex paramRegex = new Regex("(\\<param\\s+name\\s*=\\s*\"" + curParameter.Name + "\"\\s*\\>.*?\\</param\\>)", RegexOptions.Compiled);
                            Match match = paramRegex.Match(docText);

                            if (match.Success)
                            {
                                text = Ambience.GetDocumentationMarkup(sym, match.Groups [1].Value);
                                if (!string.IsNullOrWhiteSpace(text))
                                {
                                    tooltipInfo.AddCategory(GettextCatalog.GetString("Parameter"), text);
                                }
                            }
                        }
                        if (curParameter.Type.TypeKind == TypeKind.Delegate)
                        {
                            tooltipInfo.AddCategory(GettextCatalog.GetString("Delegate Info"), sig.GetDelegateInfo(curParameter.Type));
                        }
                    }
                    return tooltipInfo;
                }));
            }
			internal static Task<TooltipInformation> CreateTooltipInformation (MonoDevelop.Ide.Editor.TextEditor editor, MonoDevelop.Ide.Editor.DocumentContext ctx, ISymbol sym, int currentParameter, bool smartWrap, CancellationToken cancelToken)
			{
				var tooltipInfo = new TooltipInformation ();
				var sig = new SignatureMarkupCreator (ctx, editor != null ? editor.CaretOffset : 0);
				sig.HighlightParameter = currentParameter;
				sig.BreakLineAfterReturnType = smartWrap;

				return Task.Run (() => {
					if (cancelToken.IsCancellationRequested)
						return null;
					try {
						tooltipInfo.SignatureMarkup = sig.GetMarkup (sym);
					} catch (Exception e) {
						LoggingService.LogError ("Got exception while creating markup for :" + sym, e);
						return new TooltipInformation ();
					}
					tooltipInfo.SummaryMarkup = Ambience.GetSummaryMarkup (sym) ?? "";

					if (cancelToken.IsCancellationRequested)
						return null;
					
					if (sym is IMethodSymbol) {
						var method = (IMethodSymbol)sym;
						if (method.IsExtensionMethod && method.ReducedFrom != null && method.ReducedFrom.ContainingType != null) {
							tooltipInfo.AddCategory (GettextCatalog.GetString ("Extension Method from"), method.ReducedFrom.ContainingType.Name);
						}
					}
					int paramIndex = currentParameter;

					//				if (Symbol is IMethodSymbol && ((IMethodSymbol)Symbol).IsExtensionMethod)
					//					paramIndex++;
					var list = GetParameterList (sym);
					paramIndex = Math.Min (list.Length - 1, paramIndex);

					var curParameter = paramIndex >= 0 && paramIndex < list.Length ? list [paramIndex] : null;
					if (curParameter != null) {

						string docText = Ambience.GetDocumentation (sym);
						if (!string.IsNullOrEmpty (docText)) {
							string text = docText;
							Regex paramRegex = new Regex ("(\\<param\\s+name\\s*=\\s*\"" + curParameter.Name + "\"\\s*\\>.*?\\</param\\>)", RegexOptions.Compiled);
							Match match = paramRegex.Match (docText);

							if (match.Success) {
								text = Ambience.GetDocumentationMarkup (sym, match.Groups [1].Value);
								if (!string.IsNullOrWhiteSpace (text))
									tooltipInfo.AddCategory (GettextCatalog.GetString ("Parameter"), text);
							}
						}
						if (curParameter.Type.TypeKind == TypeKind.Delegate)
							tooltipInfo.AddCategory (GettextCatalog.GetString ("Delegate Info"), sig.GetDelegateInfo (curParameter.Type));
					}
					return tooltipInfo;
				});
			}
Exemplo n.º 16
0
        TooltipInformation CreateTooltip(ToolTipData data, TextEditor editor, DocumentContext doc, int offset, Gdk.ModifierType modifierState)
        {
            bool createFooter = true;             //(modifierState & Gdk.ModifierType.Mod1Mask) != 0;

            try {
                TooltipInformation result;
                var sig = new SignatureMarkupCreator(doc, offset);
                sig.BreakLineAfterReturnType = false;

                var typeOfExpression = data.Token.Parent as TypeOfExpressionSyntax;
                if (typeOfExpression != null && data.Symbol is ITypeSymbol)
                {
                    return(sig.GetTypeOfTooltip(typeOfExpression, (ITypeSymbol)data.Symbol));
                }

//				var parentKind = data.Token.Parent != null ? data.Token.Parent.Kind () : SyntaxKind.None;
//				switch (parentKind) {
//					case SyntaxKind.ConstructorConstraint:
//					case SyntaxKind.ClassConstraint:
//					case SyntaxKind.StructConstraint:
//						return sig.GetConstraintTooltip (data.Token);
//				}
//
//				if (data.Node is ThisReferenceExpression && result is ThisResolveResult) {
//					var resolver = file.GetResolver (doc.Compilation, doc.Editor.Caret.Location);
//					var sig = new SignatureMarkupCreator (resolver, doc.GetFormattingPolicy ().CreateOptions ());
//					sig.BreakLineAfterReturnType = false;
//
//					return sig.GetKeywordTooltip ("this", data.Node);
//				}
//
//				if (data.Node is TypeOfExpression) {
//					var resolver = file.GetResolver (doc.Compilation, doc.Editor.Caret.Location);
//					var sig = new SignatureMarkupCreator (resolver, doc.GetFormattingPolicy ().CreateOptions ());
//					sig.BreakLineAfterReturnType = false;
//					return sig.GetTypeOfTooltip ((TypeOfExpression)data.Node, result as TypeOfResolveResult);
//				}
//				if (data.Node is PrimitiveType && data.Node.Parent is Constraint) {
//					var t = (PrimitiveType)data.Node;
//					if (t.Keyword == "class" || t.Keyword == "new" || t.Keyword == "struct") {
//						var resolver = file.GetResolver (doc.Compilation, doc.Editor.Caret.Location);
//						var sig = new SignatureMarkupCreator (resolver, doc.GetFormattingPolicy ().CreateOptions ());
//						sig.BreakLineAfterReturnType = false;
//						return sig.GetConstraintTooltip (t.Keyword);
//					}
//					return null;
//				}
                result = sig.GetKeywordTooltip(data.Token);
                if (result != null)
                {
                    return(result);
                }

                if (data.Symbol != null)
                {
                    result = RoslynSymbolCompletionData.CreateTooltipInformation(CancellationToken.None, editor, doc, data.Symbol, false, createFooter).Result;
                }

//				if (result == null && parentKind == SyntaxKind.IdentifierName) {
//					if (data.SymbolInfo.CandidateReason == CandidateReason.None) {
//						if (data.Token.Parent.Parent.Kind () == SyntaxKind.SimpleMemberAccessExpression ||
//							data.Token.Parent.Parent.Kind () == SyntaxKind.PointerMemberAccessExpression) {
//							var ma = (MemberAccessExpressionSyntax)data.Token.Parent.Parent;
//							return new TooltipInformation {
//								SignatureMarkup = string.Format ("error CS0117: `{0}' does not contain a definition for `{1}'", ma.Expression, ma.Name)
//							};
//						}
//						return new TooltipInformation {
//							SignatureMarkup = string.Format ("error CS0103: The name `{0}' does not exist in the current context", data.Token)
//						};
//					}
//				}

                return(result);

//				if (result is AliasNamespaceResolveResult) {
//					var resolver = file.GetResolver (doc.Compilation, doc.Editor.Caret.Location);
//					var sig = new SignatureMarkupCreator (doc);
//					sig.BreakLineAfterReturnType = false;
//					return sig.GetAliasedNamespaceTooltip ((AliasNamespaceResolveResult)result);
//				}
//
//				if (result is AliasTypeResolveResult) {
//					var resolver = file.GetResolver (doc.Compilation, doc.Editor.Caret.Location);
//					var sig = new SignatureMarkupCreator (doc);
//					sig.BreakLineAfterReturnType = false;
//					return sig.GetAliasedTypeTooltip ((AliasTypeResolveResult)result);
//				}
//
//
//				if (data.Node is ExternAliasDeclaration) {
//					var resolver = file.GetResolver (doc.Compilation, doc.Editor.Caret.Location);
//					var sig = new SignatureMarkupCreator (resolver, doc.GetFormattingPolicy ().CreateOptions ());
//					sig.BreakLineAfterReturnType = false;
//					return sig.GetExternAliasTooltip ((ExternAliasDeclaration)data.Node, doc.Project as DotNetProject);
//				}
//				if (result is MethodGroupResolveResult) {
//					var mrr = (MethodGroupResolveResult)result;
//					var allMethods = new List<IMethod> (mrr.Methods);
//					foreach (var l in mrr.GetExtensionMethods ()) {
//						allMethods.AddRange (l);
//					}
//
//					var method = allMethods.FirstOrDefault ();
//					if (method != null) {
////						return MemberCompletionData.CreateTooltipInformation (
////							doc.Compilation,
////							file,
////							doc.Editor,
////							doc.GetFormattingPolicy (),
////							method,
////							false,
////							createFooter);
//					}
//				} else if (result is CSharpInvocationResolveResult) {
//					var invocationResult = (CSharpInvocationResolveResult)result;
//					var member = (IMember)invocationResult.ReducedMethod ?? invocationResult.Member;
////						return MemberCompletionData.CreateTooltipInformation (
////							doc.Compilation,
////							file,
////							doc.Editor,
////							doc.GetFormattingPolicy (),
////							member,
////							false,
////							createFooter);
//				} else if (result is MemberResolveResult) {
//					var member = ((MemberResolveResult)result).Member;
////					return MemberCompletionData.CreateTooltipInformation (
////						doc.Compilation,
////						file,
////						doc.Editor,
////						doc.GetFormattingPolicy (),
////						member,
////						false,
////						createFooter);
//				} else {
//					return MemberCompletionData.CreateTooltipInformation (
//						doc.Compilation,
//						file,
//						doc.Editor,
//						doc.GetFormattingPolicy (),
//						result.Type,
//						false,
//						createFooter);
//				}
            } catch (Exception e) {
                LoggingService.LogError("Error while creating tooltip.", e);
                return(null);
            }
        }
		TooltipInformation CreateTooltip (ToolTipData data, int offset, Ambience ambience)
		{
			ResolveResult result = data.Result;
			var doc = IdeApp.Workbench.ActiveDocument;
			if (doc == null)
				return null;
			try {

				if (result is AliasNamespaceResolveResult) {
					var resolver = (doc.ParsedDocument.ParsedFile as CSharpUnresolvedFile).GetResolver (doc.Compilation, doc.Editor.Caret.Location);
					var sig = new SignatureMarkupCreator (resolver, doc.GetFormattingPolicy ().CreateOptions ());
					sig.BreakLineAfterReturnType = false;
					return sig.GetAliasedNamespaceTooltip ((AliasNamespaceResolveResult)result);
				}
				
				if (result is AliasTypeResolveResult) {
					var resolver = (doc.ParsedDocument.ParsedFile as CSharpUnresolvedFile).GetResolver (doc.Compilation, doc.Editor.Caret.Location);
					var sig = new SignatureMarkupCreator (resolver, doc.GetFormattingPolicy ().CreateOptions ());
					sig.BreakLineAfterReturnType = false;
					return sig.GetAliasedTypeTooltip ((AliasTypeResolveResult)result);
				}
				
				if (data.Node is TypeOfExpression) {
					var resolver = (doc.ParsedDocument.ParsedFile as CSharpUnresolvedFile).GetResolver (doc.Compilation, doc.Editor.Caret.Location);
					var sig = new SignatureMarkupCreator (resolver, doc.GetFormattingPolicy ().CreateOptions ());
					sig.BreakLineAfterReturnType = false;
					return sig.GetTypeOfTooltip ((TypeOfExpression)data.Node, result as TypeOfResolveResult);
				}
				if (data.Node is PrimitiveType && data.Node.Parent is Constraint) {
					var t = (PrimitiveType)data.Node;
					if (t.Keyword == "class" || t.Keyword == "new" || t.Keyword == "struct") {
						var resolver = (doc.ParsedDocument.ParsedFile as CSharpUnresolvedFile).GetResolver (doc.Compilation, doc.Editor.Caret.Location);
						var sig = new SignatureMarkupCreator (resolver, doc.GetFormattingPolicy ().CreateOptions ());
						sig.BreakLineAfterReturnType = false;
						return sig.GetConstraintTooltip (t.Keyword);
					}
					return null;
				}
				if (data.Node is ExternAliasDeclaration) {
					var resolver = (doc.ParsedDocument.ParsedFile as CSharpUnresolvedFile).GetResolver (doc.Compilation, doc.Editor.Caret.Location);
					var sig = new SignatureMarkupCreator (resolver, doc.GetFormattingPolicy ().CreateOptions ());
					sig.BreakLineAfterReturnType = false;
					return sig.GetExternAliasTooltip ((ExternAliasDeclaration)data.Node, doc.Project as DotNetProject);
				}
				if (result == null && data.Node is CSharpTokenNode) {
					var resolver = (doc.ParsedDocument.ParsedFile as CSharpUnresolvedFile).GetResolver (doc.Compilation, doc.Editor.Caret.Location);
					var sig = new SignatureMarkupCreator (resolver, doc.GetFormattingPolicy ().CreateOptions ());
					sig.BreakLineAfterReturnType = false;
					return sig.GetKeywordTooltip (data.Node);
				}
				if (data.Node is PrimitiveType && ((PrimitiveType)data.Node).KnownTypeCode == KnownTypeCode.Void) {
					var resolver = (doc.ParsedDocument.ParsedFile as CSharpUnresolvedFile).GetResolver (doc.Compilation, doc.Editor.Caret.Location);
					var sig = new SignatureMarkupCreator (resolver, doc.GetFormattingPolicy ().CreateOptions ());
					sig.BreakLineAfterReturnType = false;
					return sig.GetKeywordTooltip ("void", null);
				}

				if (result is UnknownIdentifierResolveResult) {
					return new TooltipInformation () {
						SignatureMarkup = string.Format ("error CS0103: The name `{0}' does not exist in the current context", ((UnknownIdentifierResolveResult)result).Identifier)
					};
				} else if (result is UnknownMemberResolveResult) {
					var ur = (UnknownMemberResolveResult)result;
					if (ur.TargetType.Kind != TypeKind.Unknown) {
						return new TooltipInformation () {
							SignatureMarkup = string.Format ("error CS0117: `{0}' does not contain a definition for `{1}'", ur.TargetType.FullName, ur.MemberName)
						};
					}
				} else if (result.IsError) {
					return new TooltipInformation () {
						SignatureMarkup = "Unknown resolve error."
					};
				}
				if (result is LocalResolveResult) {
					var lr = (LocalResolveResult)result;
					var tooltipInfo = new TooltipInformation ();
					var resolver = (doc.ParsedDocument.ParsedFile as CSharpUnresolvedFile).GetResolver (doc.Compilation, doc.Editor.Caret.Location);
					var sig = new SignatureMarkupCreator (resolver, doc.GetFormattingPolicy ().CreateOptions ());
					sig.BreakLineAfterReturnType = false;
					tooltipInfo.SignatureMarkup = sig.GetLocalVariableMarkup (lr.Variable);
					return tooltipInfo;
				} else if (result is MethodGroupResolveResult) {
					var mrr = (MethodGroupResolveResult)result;
					var allMethods = new List<IMethod> (mrr.Methods);
					foreach (var l in mrr.GetExtensionMethods ()) {
						allMethods.AddRange (l);
					}
				
					var method = allMethods.FirstOrDefault ();
					if (method != null) {
						return MemberCompletionData.CreateTooltipInformation (
						doc.Compilation,
						doc.ParsedDocument.ParsedFile as CSharpUnresolvedFile,
						doc.Editor,
						doc.GetFormattingPolicy (),
						method, 
						false);
					}
				} else if (result is CSharpInvocationResolveResult) {
					var member = ((CSharpInvocationResolveResult)result).ReducedMethod ?? (IMethod)((CSharpInvocationResolveResult)result).Member;
					return MemberCompletionData.CreateTooltipInformation (
						doc.Compilation,
						doc.ParsedDocument.ParsedFile as CSharpUnresolvedFile,
						doc.Editor,
						doc.GetFormattingPolicy (),
						member, 
						false);
				} else if (result is MemberResolveResult) {
					var member = ((MemberResolveResult)result).Member;
					return MemberCompletionData.CreateTooltipInformation (
					doc.Compilation,
					doc.ParsedDocument.ParsedFile as CSharpUnresolvedFile,
					doc.Editor,
					doc.GetFormattingPolicy (),
					member, 
					false);
				}else if (result is NamespaceResolveResult) {
					var tooltipInfo = new TooltipInformation ();
					var resolver = (doc.ParsedDocument.ParsedFile as CSharpUnresolvedFile).GetResolver (doc.Compilation, doc.Editor.Caret.Location);
					var sig = new SignatureMarkupCreator (resolver, doc.GetFormattingPolicy ().CreateOptions ());
					sig.BreakLineAfterReturnType = false;
					try {
						tooltipInfo.SignatureMarkup = sig.GetMarkup (((NamespaceResolveResult)result).Namespace);
					} catch (Exception e) {
						LoggingService.LogError ("Got exception while creating markup for :" + ((NamespaceResolveResult)result).Namespace, e);
						return new TooltipInformation ();
					}
					return tooltipInfo;
				} else {
					return MemberCompletionData.CreateTooltipInformation (
					doc.Compilation,
					doc.ParsedDocument.ParsedFile as CSharpUnresolvedFile,
					doc.Editor,
					doc.GetFormattingPolicy (),
					result.Type, 
					false);
				}
			} catch (Exception e) {
				LoggingService.LogError ("Error while creating tooltip.", e);
				return null;
			}
		
			return null;
		}