using System; using System.Linq; using Unity.VisualScripting.AssemblyQualifiedNameParser; namespace Unity.VisualScripting { public abstract class MemberUnitDescriptor : UnitDescriptor where TMemberUnit : MemberUnit { protected MemberUnitDescriptor(TMemberUnit unit) : base(unit) { } protected Member member => unit.member; protected abstract ActionDirection direction { get; } private string Name() { return unit.member.info.DisplayName(direction); } protected override string DefinedTitle() { return Name(); } protected override string ErrorSurtitle(Exception exception) { if (member?.targetType != null) { return member.targetType.DisplayName(); } else if (member?.targetTypeName != null) { try { var parsedName = new ParsedAssemblyQualifiedName(member.targetTypeName).TypeName.Split('.').Last(); if (BoltCore.Configuration.humanNaming) { return parsedName.Prettify(); } else { return parsedName; } } catch { return "Malformed Type Name"; } } else { return "Missing Type"; } } protected override string ErrorTitle(Exception exception) { if (!string.IsNullOrEmpty(member?.name)) { if (BoltCore.Configuration.humanNaming) { return member.name.Prettify(); } else { return member.name; } } return base.ErrorTitle(exception); } protected override string DefinedShortTitle() { return Name(); } protected override EditorTexture DefinedIcon() { return member.targetType.Icon(); } protected override EditorTexture ErrorIcon(Exception exception) { if (member.targetType != null) { return member.targetType.Icon(); } return base.ErrorIcon(exception); } protected override string DefinedSurtitle() { return member.targetType.DisplayName(); } protected override string DefinedSummary() { return member.info.Summary(); } } }