public CachedProperty(ManagedProperty property, string cacheFieldName = null) { Property = property; if (cacheFieldName != null) { CacheFieldName = cacheFieldName; } else { string name = property.Name; CacheFieldName = "_" + char.ToLower(name[0]) + name.Substring(1); } Access = RefAccessSpecifier.Private; }
public CachedProperty(ManagedProperty property, string cacheFieldName = null) { Property = property; if (cacheFieldName != null) { CacheFieldName = cacheFieldName; } else { string name = property.Name; CacheFieldName = "_" + char.ToLower(name[0]) + name.Substring(1); } Access = RefAccessSpecifier.Private; }
void WriteProperty(ManagedProperty prop, int level) { var getterNative = prop.Getter.Native; var setterNative = prop.Setter?.Native; EnsureWhiteSpace(); Write(level + 1, $"public "); if (getterNative.IsStatic) Write("static "); WriteLine($"{GetTypeNameCS(prop.Type)} {prop.Name}"); WriteLine(level + 1, "{"); if (prop.Parent.CachedProperties.ContainsKey(prop.Name)) { var cachedProperty = prop.Parent.CachedProperties[prop.Name]; WriteLine(level + 2, $"get {{ return {cachedProperty.CacheFieldName}; }}"); if (setterNative != null) { WriteLine(level + 2, "set"); WriteLine(level + 2, "{"); Write(level + 3, $"{GetFullNameC(prop.Parent.Native)}_{setterNative.Name}("); if (!setterNative.IsStatic) Write("_native, "); WriteLine($"{GetTypeSetterCSMarshal(prop.Type)});"); WriteLine(level + 3, $"{cachedProperty.CacheFieldName} = value;"); WriteLine(level + 2, "}"); } } else { var type = prop.Type; if ((type.Target != null && type.Target.MarshalAsStruct) || (type.Kind == TypeKind.LValueReference && type.Referenced.Target != null && type.Referenced.Target.MarshalAsStruct)) { WriteLine(level + 2, "get"); WriteLine(level + 2, "{"); WriteLine(level + 3, $"{GetTypeNameCS(type)} value;"); Write(level + 3, $"{GetFullNameC(prop.Parent.Native)}_{getterNative.Name}("); if (!getterNative.IsStatic) Write("_native, "); WriteLine("out value);"); WriteLine(level + 3, "return value;"); WriteLine(level + 2, "}"); } else { string objPtr = getterNative.IsStatic ? "" : "_native"; WriteLine(level + 2, string.Format("get {{ return {0}{1}_{2}({3}){4}; }}", BulletParser.GetTypeMarshalConstructorStartCS(getterNative), GetFullNameC(prop.Parent.Native), getterNative.Name, objPtr, BulletParser.GetTypeMarshalConstructorEndCS(getterNative))); } if (setterNative != null) { string marshal = GetTypeSetterCSMarshal(prop.Type); Write(level + 2, $"set {{ {GetFullNameC(prop.Parent.Native)}_{setterNative.Name}("); if (!setterNative.IsStatic) Write("_native, "); WriteLine($"{marshal}); }}"); } } WriteLine(level + 1, "}"); hasCSWhiteSpace = false; }
void WriteProperty(ManagedProperty prop, int level) { var getterNative = prop.Getter.Native; var setterNative = prop.Setter?.Native; EnsureWhiteSpace(); Write(level + 1, $"public "); if (getterNative.IsStatic) { Write("static "); } WriteLine($"{GetTypeNameCS(prop.Type)} {prop.Name}"); WriteLine(level + 1, "{"); if (prop.Parent.CachedProperties.ContainsKey(prop.Name)) { var cachedProperty = prop.Parent.CachedProperties[prop.Name]; WriteLine(level + 2, $"get {{ return {cachedProperty.CacheFieldName}; }}"); if (setterNative != null) { WriteLine(level + 2, "set"); WriteLine(level + 2, "{"); Write(level + 3, $"{GetFullNameC(prop.Parent.Native)}_{setterNative.Name}("); if (!setterNative.IsStatic) { Write("_native, "); } WriteLine($"{GetTypeSetterCSMarshal(prop.Type)});"); WriteLine(level + 3, $"{cachedProperty.CacheFieldName} = value;"); WriteLine(level + 2, "}"); } } else { var type = prop.Type; if ((type.Target != null && type.Target.MarshalAsStruct) || (type.Kind == TypeKind.LValueReference && type.Referenced.Target != null && type.Referenced.Target.MarshalAsStruct)) { WriteLine(level + 2, "get"); WriteLine(level + 2, "{"); WriteLine(level + 3, $"{GetTypeNameCS(type)} value;"); Write(level + 3, $"{GetFullNameC(prop.Parent.Native)}_{getterNative.Name}("); if (!getterNative.IsStatic) { Write("_native, "); } WriteLine("out value);"); WriteLine(level + 3, "return value;"); WriteLine(level + 2, "}"); } else { string objPtr = getterNative.IsStatic ? "" : "_native"; WriteLine(level + 2, string.Format("get {{ return {0}{1}_{2}({3}){4}; }}", BulletParser.GetTypeMarshalConstructorStartCS(getterNative), GetFullNameC(prop.Parent.Native), getterNative.Name, objPtr, BulletParser.GetTypeMarshalConstructorEndCS(getterNative))); } if (setterNative != null) { string marshal = GetTypeSetterCSMarshal(prop.Type); Write(level + 2, $"set {{ {GetFullNameC(prop.Parent.Native)}_{setterNative.Name}("); if (!setterNative.IsStatic) { Write("_native, "); } WriteLine($"{marshal}); }}"); } } WriteLine(level + 1, "}"); hasCSWhiteSpace = false; }