void WriteToolTipWithClassInfo(ITextOutput output, ITypeDefOrRef type) { var td = type.ResolveTypeDef(); MethodDef invoke; if (IsDelegate(td) && (invoke = td.FindMethod("Invoke")) != null && invoke.MethodSig != null) { output.Write("delegate", TextTokenType.Keyword); output.WriteSpace(); var writer = new MethodWriter(this, output, invoke); writer.WriteReturnType(); // Always print the namespace here because that's what VS does. I.e., ignore // TOOLTIP_USE_NAMESPACES. WriteToolTipType(output, td, true); writer.WriteGenericArguments(); writer.WriteMethodParameterList('(', ')'); return; } if (td == null) { base.WriteToolTip(output, type, null); return; } string keyword; if (td.IsEnum) keyword = "enum"; else if (td.IsValueType) keyword = "struct"; else if (td.IsInterface) keyword = "interface"; else keyword = "class"; output.Write(keyword, TextTokenType.Keyword); output.WriteSpace(); // Always print the namespace here because that's what VS does. I.e., ignore // TOOLTIP_USE_NAMESPACES. WriteToolTipType(output, type, true, false); }
void WriteToolTip(ITextOutput output, PropertyDef prop) { var sig = prop.PropertySig; var md = prop.GetMethods.FirstOrDefault() ?? prop.SetMethods.FirstOrDefault() ?? prop.OtherMethods.FirstOrDefault(); var writer = new MethodWriter(this, output, md); writer.WriteReturnType(); WriteToolTip(output, prop.DeclaringType); output.Write('.', TextTokenType.Operator); var ovrMeth = md == null || md.Overrides.Count == 0 ? null : md.Overrides[0].MethodDeclaration; if (prop.IsIndexer()) { if (ovrMeth != null) { WriteToolTipType(output, ovrMeth.DeclaringType, false); output.Write('.', TextTokenType.Operator); } output.Write("this", TextTokenType.Keyword); writer.WriteGenericArguments(); writer.WriteMethodParameterList('[', ']'); } else if (ovrMeth != null && GetPropName(ovrMeth) != null) { WriteToolTipType(output, ovrMeth.DeclaringType, false); output.Write('.', TextTokenType.Operator); output.Write(IdentifierEscaper.Escape(GetPropName(ovrMeth)), TextTokenHelper.GetTextTokenType(prop)); } else output.Write(IdentifierEscaper.Escape(prop.Name), TextTokenHelper.GetTextTokenType(prop)); output.WriteSpace(); output.WriteLeftBrace(); if (prop.GetMethods.Count > 0) { output.WriteSpace(); output.Write("get", TextTokenType.Keyword); output.Write(';', TextTokenType.Operator); } if (prop.SetMethods.Count > 0) { output.WriteSpace(); output.Write("set", TextTokenType.Keyword); output.Write(';', TextTokenType.Operator); } output.WriteSpace(); output.WriteRightBrace(); }
void WriteToolTipMethod(ITextOutput output, IMethod method) { var writer = new MethodWriter(this, output, method); writer.WriteReturnType(); WriteToolTip(output, method.DeclaringType); output.Write('.', TextTokenType.Operator); if (writer.md != null && writer.md.IsConstructor && method.DeclaringType != null) output.Write(IdentifierEscaper.Escape(RemoveGenericTick(method.DeclaringType.Name)), TextTokenHelper.GetTextTokenType(method)); else if (writer.md != null && writer.md.Overrides.Count > 0) { var ovrMeth = (IMemberRef)writer.md.Overrides[0].MethodDeclaration; WriteToolTipType(output, ovrMeth.DeclaringType, false); output.Write('.', TextTokenType.Operator); WriteMethodName(output, method, ovrMeth.Name); } else WriteMethodName(output, method, method.Name); writer.WriteGenericArguments(); writer.WriteMethodParameterList('(', ')'); }