174
175
return "'" + obj + "'";
175
176
return obj.ToString ();
178
public string CreateTooltip (IParsedFile unit, ResolveResult result, string errorInformations, Ambience ambience, Gdk.ModifierType modifierState)
180
OutputSettings settings = new OutputSettings (OutputFlags.ClassBrowserEntries | OutputFlags.IncludeParameterName | OutputFlags.IncludeKeywords | OutputFlags.IncludeMarkup | OutputFlags.UseFullName);
181
// if ((Gdk.ModifierType.ShiftMask & modifierState) == Gdk.ModifierType.ShiftMask) {
182
// settings.EmitNameCallback = delegate(object domVisitable, ref string outString) {
183
// // crop used namespaces.
184
// if (unit != null) {
186
// foreach (var u in unit.Usings) {
187
// foreach (string ns in u.Namespaces) {
188
// if (outString.StartsWith (ns + ".")) {
189
// len = Math.Max (len, ns.Length + 1);
193
// string newName = outString.Substring (len);
195
// // check if there is a name clash.
196
// if (dom.GetType (newName) != null)
198
// foreach (IUsing u in unit.Usings) {
199
// foreach (string ns in u.Namespaces) {
200
// if (dom.GetType (ns + "." + newName) != null)
204
// if (len > 0 && count == 1)
205
// outString = newName;
210
// Approximate value for usual case
211
StringBuilder s = new StringBuilder (150);
213
if (result != null) {
214
if (result is UnknownIdentifierResolveResult) {
215
s.Append (String.Format (GettextCatalog.GetString ("Unresolved identifier '{0}'"), ((UnknownIdentifierResolveResult)result).Identifier));
216
} else if (result.IsError) {
217
s.Append (GettextCatalog.GetString ("Resolve error."));
218
} else if (result is LocalResolveResult) {
219
var lr = (LocalResolveResult)result;
220
s.Append ("<small><i>");
221
s.Append (lr.IsParameter ? paramStr : localStr);
222
s.Append ("</i></small>\n");
223
s.Append (ambience.GetString (lr.Variable.Type, settings));
225
s.Append (lr.Variable.Name);
226
} else if (result is MethodGroupResolveResult) {
227
var mrr = (MethodGroupResolveResult)result;
228
s.Append ("<small><i>");
229
s.Append (methodStr);
230
s.Append ("</i></small>\n");
231
var allMethods = new List<IMethod> (mrr.Methods);
232
foreach (var l in mrr.GetExtensionMethods ()) {
233
allMethods.AddRange (l);
236
var method = allMethods.FirstOrDefault ();
237
if (method != null) {
238
s.Append (ambience.GetString (method, settings));
239
if (allMethods.Count > 1) {
240
int overloadCount = allMethods.Count - 1;
241
s.Append (string.Format (GettextCatalog.GetPluralString (" (+{0} overload)", " (+{0} overloads)", overloadCount), overloadCount));
243
doc = AmbienceService.GetDocumentationSummary (method);
245
} else if (result is MemberResolveResult) {
246
var member = ((MemberResolveResult)result).Member;
247
s.Append ("<small><i>");
248
s.Append (GetString (member));
249
s.Append ("</i></small>\n");
250
var field = member as IField;
251
if (field != null && field.IsConst) {
252
s.Append (ambience.GetString (field.Type, settings));
178
static CSharpAmbience ambience = new CSharpAmbience ();
180
static TypeSystemAstBuilder CreateBuilder (MonoDevelop.Ide.Gui.Document doc, int offset, ICompilation compilation)
182
var ctx = doc.ParsedDocument.ParsedFile as CSharpUnresolvedFile;
183
var state = ctx.GetResolver (doc.Compilation, doc.Editor.OffsetToLocation (offset));
184
var builder = new TypeSystemAstBuilder (state);
185
builder.AddAnnotations = true;
186
var dt = state.CurrentTypeDefinition;
187
var declaring = dt != null ? dt.DeclaringTypeDefinition : null;
188
if (declaring != null) {
190
if (dt.Equals (declaring)) {
191
builder.AlwaysUseShortTypeNames = true;
194
dt = dt.DeclaringTypeDefinition;
200
internal static MonoDevelop.CSharp.Completion.MemberCompletionData.MyAmbience CreateAmbience (Document doc, int offset, ICompilation compilation)
202
return new MonoDevelop.CSharp.Completion.MemberCompletionData.MyAmbience (CreateBuilder (doc, offset, compilation));
205
public string CreateTooltip (MonoDevelop.Ide.Gui.Document doc, int offset, ResolveResult result, string errorInformations, Gdk.ModifierType modifierState)
208
OutputSettings settings = new OutputSettings (OutputFlags.ClassBrowserEntries | OutputFlags.IncludeParameterName | OutputFlags.IncludeKeywords | OutputFlags.IncludeMarkup | OutputFlags.UseFullName);
209
// Approximate value for usual case
210
StringBuilder s = new StringBuilder (150);
211
string documentation = null;
212
if (result != null) {
213
if (result is UnknownIdentifierResolveResult) {
214
s.Append (String.Format (GettextCatalog.GetString ("Unresolved identifier '{0}'"), ((UnknownIdentifierResolveResult)result).Identifier));
215
} else if (result.IsError) {
216
s.Append (GettextCatalog.GetString ("Resolve error."));
217
} else if (result is LocalResolveResult) {
218
var lr = (LocalResolveResult)result;
219
s.Append ("<small><i>");
220
s.Append (lr.IsParameter ? paramStr : localStr);
221
s.Append ("</i></small>\n");
222
s.Append (ambience.GetString (lr.Variable.Type, settings));
254
s.Append (field.Name);
256
s.Append (GetConst (field.ConstantValue));
224
s.Append (lr.Variable.Name);
225
} else if (result is MethodGroupResolveResult) {
226
var mrr = (MethodGroupResolveResult)result;
227
s.Append ("<small><i>");
228
s.Append (methodStr);
229
s.Append ("</i></small>\n");
230
var allMethods = new List<IMethod> (mrr.Methods);
231
foreach (var l in mrr.GetExtensionMethods ()) {
232
allMethods.AddRange (l);
234
var method = allMethods.FirstOrDefault ();
235
if (method != null) {
236
s.Append (GLib.Markup.EscapeText (CreateAmbience (doc, offset, method.Compilation).ConvertEntity (method)));
237
if (allMethods.Count > 1) {
238
int overloadCount = allMethods.Count - 1;
239
s.Append (string.Format (GettextCatalog.GetPluralString (" (+{0} overload)", " (+{0} overloads)", overloadCount), overloadCount));
241
documentation = AmbienceService.GetSummaryMarkup (method);
243
} else if (result is MemberResolveResult) {
244
var member = ((MemberResolveResult)result).Member;
245
s.Append ("<small><i>");
246
s.Append (GetString (member));
247
s.Append ("</i></small>\n");
248
var field = member as IField;
249
if (field != null && field.IsConst) {
250
s.Append (GLib.Markup.EscapeText (CreateAmbience (doc, offset, field.Compilation).ConvertType (field.Type)));
252
s.Append (field.Name);
254
s.Append (GetConst (field.ConstantValue));
257
s.Append (GLib.Markup.EscapeText (CreateAmbience (doc, offset, member.Compilation).ConvertEntity (member)));
259
documentation = AmbienceService.GetSummaryMarkup (member);
260
} else if (result is NamespaceResolveResult) {
261
s.Append ("<small><i>");
262
s.Append (namespaceStr);
263
s.Append ("</i></small>\n");
264
s.Append (ambience.GetString (((NamespaceResolveResult)result).NamespaceName, settings));
259
s.Append (ambience.GetString (member, settings));
261
doc = AmbienceService.GetDocumentationSummary (member);
262
} else if (result is NamespaceResolveResult) {
263
s.Append ("<small><i>");
264
s.Append (namespaceStr);
265
s.Append ("</i></small>\n");
266
s.Append (ambience.GetString (((NamespaceResolveResult)result).NamespaceName, settings));
269
var typeString = GetString (tr.Type);
270
if (!string.IsNullOrEmpty (typeString)) {
271
s.Append ("<small><i>");
272
s.Append (typeString);
273
s.Append ("</i></small>\n");
275
settings.OutputFlags |= OutputFlags.UseFullName;
276
s.Append (ambience.GetString (tr.Type, settings));
277
doc = AmbienceService.GetDocumentationSummary (tr.Type.GetDefinition ());
267
var typeString = GetString (tr.Type);
268
if (!string.IsNullOrEmpty (typeString)) {
269
s.Append ("<small><i>");
270
s.Append (typeString);
271
s.Append ("</i></small>\n");
273
settings.OutputFlags |= OutputFlags.UseFullName;
274
s.Append (ambience.GetString (tr.Type, settings));
275
documentation = AmbienceService.GetSummaryMarkup (tr.Type.GetDefinition ());
278
if (!string.IsNullOrEmpty (documentation)) {
279
s.Append ("\n<small>");
280
s.Append (documentation);
281
s.Append ("</small>");
280
if (!string.IsNullOrEmpty (doc)) {
281
s.Append ("\n<small>");
282
s.Append (AmbienceService.GetDocumentationMarkup ("<summary>" + doc + "</summary>"));
285
if (!string.IsNullOrEmpty (errorInformations)) {
288
s.Append ("<small>");
289
s.Append (errorInformations);
283
290
s.Append ("</small>");
287
if (!string.IsNullOrEmpty (errorInformations)) {
290
s.Append ("<small>");
291
s.Append (errorInformations);
292
s.Append ("</small>");
294
return s.ToString ();
292
return s.ToString ();
293
} catch (Exception e){
294
return e.ToString ();