public string GenTooltipSignature(AbstractType t, bool templateParamCompletion = false, int currentMethodParam = -1)
        {
            var ds = t as DSymbol;

            if (ds != null)
            {
                if (currentMethodParam >= 0 && !templateParamCompletion && ds.Definition is DVariable && ds.Base != null)
                {
                    return(GenTooltipSignature(ds.Base, false, currentMethodParam));
                }

                var aliasedSymbol = ds.Tag as D_Parser.Resolver.TypeResolution.TypeDeclarationResolver.AliasTag;
                return(GenTooltipSignature(aliasedSymbol == null || currentMethodParam >= 0 ? ds.Definition : aliasedSymbol.aliasDefinition, templateParamCompletion, currentMethodParam, DTypeToTypeDeclVisitor.GenerateTypeDecl(ds.Base), ds.DeducedTypes != null ? new DeducedTypeDictionary(ds) : null));
            }

            if (t is PackageSymbol)
            {
                var pack = (t as PackageSymbol).Package;
                return("<i>(Package)</i> " + pack.ToString());
            }

            if (t is DelegateType)
            {
                var dt = t as DelegateType;
                //TODO
            }

            return(DCodeToMarkup(t != null ? t.ToCode(true) : "null"));
        }