private IdentifierTooltipContent TryPresentColorized([CanBeNull] DeclaredElementInfo info, [NotNull] IContextBoundSettingsStore settings) { if (info == null) { return(null); } PsiLanguageType languageType = info.TreeNode.Language; IDeclaredElement element = info.DeclaredElement; IPsiModule psiModule = info.TreeNode.GetPsiModule(); HighlighterIdProvider highlighterIdProvider = _highlighterIdProviderFactory.CreateProvider(settings); RichText identifierText; if (info.DeclaredElement is ICppDeclaredElement cppDeclaredElement) { identifierText = _solution.TryGetComponent <CppDeclaredElementTooltipProvider>()?.GetTooltip(cppDeclaredElement)?.RichText; } else { identifierText = _colorizerPresenter.TryPresent( new DeclaredElementInstance(element, info.Substitution), PresenterOptions.ForIdentifierToolTip(settings, !element.IsEnumMember()), languageType, highlighterIdProvider, info.TreeNode, out _); } if (identifierText == null || identifierText.IsEmpty) { return(null); } var identifierContent = new IdentifierTooltipContent(identifierText, info.SourceRange); if (settings.GetValue((IdentifierTooltipSettings s) => s.ShowIcon)) { identifierContent.Icon = TryGetIcon(element); } if (settings.GetValue((IdentifierTooltipSettings s) => s.ShowDocumentation)) { XmlNode xmlDoc = element.GetXMLDoc(true); identifierContent.Description = TryGetDescription(element, xmlDoc, psiModule, languageType); if (settings.GetValue((IdentifierTooltipSettings s) => s.ShowObsolete)) { identifierContent.Obsolete = TryRemoveObsoletePrefix(TryGetObsolete(element, psiModule, languageType)); } if (settings.GetValue((IdentifierTooltipSettings s) => s.ShowReturn)) { identifierContent.Return = TryPresentDocNode(xmlDoc, "returns", languageType, psiModule); } if (settings.GetValue((IdentifierTooltipSettings s) => s.ShowValue)) { identifierContent.Value = TryPresentDocNode(xmlDoc, "value", languageType, psiModule); } if (settings.GetValue((IdentifierTooltipSettings s) => s.ShowRemarks)) { identifierContent.Remarks = TryPresentDocNode(xmlDoc, "remarks", languageType, psiModule); } if (settings.GetValue((IdentifierTooltipSettings s) => s.ShowExceptions)) { identifierContent.Exceptions.AddRange(GetExceptions(xmlDoc, languageType, psiModule)); } } if (settings.GetValue((IdentifierTooltipSettings s) => s.ShowOverloadCount)) { identifierContent.OverloadCount = TryGetOverloadCount(element as IFunction, info.Reference, languageType); } if (info.DeclaredElement is ITypeElement typeElement) { var baseTypeDisplayKind = settings.GetValue((IdentifierTooltipSettings s) => s.BaseTypeDisplayKind); var implementedInterfacesDisplayKind = settings.GetValue((IdentifierTooltipSettings s) => s.ImplementedInterfacesDisplayKind); if (baseTypeDisplayKind != BaseTypeDisplayKind.Never || implementedInterfacesDisplayKind != ImplementedInterfacesDisplayKind.Never) { AddSuperTypes(identifierContent, typeElement, baseTypeDisplayKind, implementedInterfacesDisplayKind, languageType, info.TreeNode, highlighterIdProvider, settings); } if (settings.GetValue((IdentifierTooltipSettings s) => s.ShowAttributesUsage) && typeElement.IsAttribute()) { identifierContent.AttributeUsage = GetAttributeUsage((IClass)info.DeclaredElement); } } return(identifierContent); }