diff --git a/Upsilon/BaseTypes/UserData/UpsilonCreateStaticAttribute.cs b/Upsilon/BaseTypes/UserData/UpsilonCreateStaticAttribute.cs new file mode 100644 index 0000000..4ae15b5 --- /dev/null +++ b/Upsilon/BaseTypes/UserData/UpsilonCreateStaticAttribute.cs @@ -0,0 +1,15 @@ +using System; + +namespace Upsilon.BaseTypes.UserData +{ + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Enum | AttributeTargets.Interface)] + public class UpsilonCreateStaticAttribute : Attribute + { + public string Name { get; } + + public UpsilonCreateStaticAttribute(string name) + { + Name = name; + } + } +} \ No newline at end of file diff --git a/Upsilon/BaseTypes/UserData/UpsilonUserDataAttribute.cs b/Upsilon/BaseTypes/UserData/UpsilonUserDataAttribute.cs index 823fb96..d55b7de 100644 --- a/Upsilon/BaseTypes/UserData/UpsilonUserDataAttribute.cs +++ b/Upsilon/BaseTypes/UserData/UpsilonUserDataAttribute.cs @@ -2,8 +2,7 @@ using System; namespace Upsilon.BaseTypes.UserData { - [AttributeUsage(AttributeTargets.Class | AttributeTargets.Enum | AttributeTargets.Interface, - AllowMultiple = false, Inherited = true)] + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Enum | AttributeTargets.Interface)] public class UpsilonUserDataAttribute : Attribute { public UpsilonUserDataAttribute(string name) diff --git a/Upsilon/BaseTypes/UserData/UserDataTypeHandler.cs b/Upsilon/BaseTypes/UserData/UserDataTypeHandler.cs index 96a1ec6..6a5b04a 100644 --- a/Upsilon/BaseTypes/UserData/UserDataTypeHandler.cs +++ b/Upsilon/BaseTypes/UserData/UserDataTypeHandler.cs @@ -16,15 +16,9 @@ namespace Upsilon.BaseTypes.UserData public static void LoadType(System.Type t, string name) { - UserDataBoundTypeDefinition boundType; - if (t.IsEnum) - { - boundType = new UserDataBoundEnumDefinition(t, name); - } - else - { - boundType = UserDataBoundTypeDefinition.Create(t, name); - } + var boundType = t.IsEnum + ? new UserDataBoundEnumDefinition(t, name) + : UserDataBoundTypeDefinition.Create(t, name); BoundTypeHandler.LoadUserDataTypeDefinition(boundType); var info = new UserDataType(t); Types.AddOrUpdate(t, info, (type, dataType) => dataType); @@ -46,6 +40,14 @@ namespace Upsilon.BaseTypes.UserData StaticScope.RegisterStaticVariable(attr.Name, def); } } + + var createStaticAttribute = + (UpsilonCreateStaticAttribute) type.GetCustomAttribute(typeof(UpsilonCreateStaticAttribute)); + if (createStaticAttribute != null) + { + var name = createStaticAttribute.Name.ToLowerInvariant(); + StaticScope.RegisterStaticVariable(createStaticAttribute.Name, Activator.CreateInstance(type)); + } } }