async Task <TooltipInformation> CreateTooltip(ISymbol symbol, SyntaxToken token, int caretOffset, EditorTheme theme, DocumentContext doc, int offset) { try { TooltipInformation result; var sig = new SignatureMarkupCreator(doc, offset); sig.BreakLineAfterReturnType = false; var typeOfExpression = token.Parent as TypeOfExpressionSyntax; if (typeOfExpression != null && symbol is ITypeSymbol) { return(sig.GetTypeOfTooltip(typeOfExpression, (ITypeSymbol)symbol)); } result = sig.GetKeywordTooltip(token); if (result != null) { return(result); } if (symbol != null) { result = await QuickInfoProvider.GetQuickInfoAsync(caretOffset, theme, doc, symbol); } return(result); } catch (Exception e) { LoggingService.LogError("Error while creating tooltip.", e); return(null); } }
async Task <TooltipInformation> CreateTooltip(ISymbol symbol, SyntaxToken token, TextEditor editor, DocumentContext doc, int offset) { try { TooltipInformation result; var sig = new SignatureMarkupCreator(doc, offset); sig.BreakLineAfterReturnType = false; var typeOfExpression = token.Parent as TypeOfExpressionSyntax; if (typeOfExpression != null && symbol is ITypeSymbol) { return(sig.GetTypeOfTooltip(typeOfExpression, (ITypeSymbol)symbol)); } result = sig.GetKeywordTooltip(token); if (result != null) { return(result); } if (symbol != null) { result = await RoslynSymbolCompletionData.CreateTooltipInformation(CancellationToken.None, editor, doc, symbol, false, true); } return(result); } catch (Exception e) { LoggingService.LogError("Error while creating tooltip.", e); return(null); } }
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, 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); }
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; }