// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved.
using System.Collections.Generic;
using System.Linq;
using FlaxEditor.Scripting;
using FlaxEngine;
namespace FlaxEditor.Modules.SourceCodeEditing
{
///
/// Source code documentation module.
///
///
public sealed class CodeDocsModule : EditorModule
{
private Dictionary _typeCache = new Dictionary();
private Dictionary _memberCache = new Dictionary();
internal CodeDocsModule(Editor editor)
: base(editor)
{
}
///
/// Gets the tooltip text for the type.
///
/// The type.
/// The type attributes. Optional, if null type attributes will be used.
/// The documentation tooltip.
public string GetTooltip(ScriptType type, object[] attributes = null)
{
if (_typeCache.TryGetValue(type, out var text))
return text;
if (attributes == null)
attributes = type.GetAttributes(false);
text = type.TypeName;
var tooltip = (TooltipAttribute)attributes.FirstOrDefault(x => x is TooltipAttribute);
if (tooltip != null)
text += '\n' + tooltip.Text;
_typeCache.Add(type, text);
return text;
}
///
/// Gets the tooltip text for the type member.
///
/// The type member.
/// The member attributes. Optional, if null member attributes will be used.
/// The documentation tooltip.
public string GetTooltip(ScriptMemberInfo member, object[] attributes = null)
{
if (_memberCache.TryGetValue(member, out var text))
return text;
if (attributes == null)
attributes = member.GetAttributes(true);
var tooltip = (TooltipAttribute)attributes.FirstOrDefault(x => x is TooltipAttribute);
if (tooltip != null)
text = tooltip.Text;
_memberCache.Add(member, text);
return text;
}
///
public override void OnInit()
{
base.OnInit();
Editor.CodeEditing.TypesCleared += OnTypesCleared;
}
private void OnTypesCleared()
{
_typeCache.Clear();
_memberCache.Clear();
}
///
public override void OnExit()
{
OnTypesCleared();
base.OnExit();
}
}
}