void ProcessField(TypeDefinition typeDefinition, FieldDefinition field) { var name = field.Name; if (!field.IsPublic || field.IsStatic || !char.IsUpper(name, 0)) { return; } if (typeDefinition.HasGenericParameters) { var message = $"Skipped public field '{typeDefinition.Name}.{field.Name}' because generic types are not currently supported. You should make this a public property instead."; moduleWeaver.LogWarning(message); return; } field.Name = $"<{name}>k__BackingField"; field.IsPublic = false; field.IsPrivate = true; var get = GetGet(field, name); typeDefinition.Methods.Add(get); var propertyDefinition = new PropertyDefinition(name, PropertyAttributes.None, field.FieldType) { GetMethod = get }; var forwardedField = new ForwardedField { Get = get, FieldType = field.FieldType, DeclaringType = field.DeclaringType, PropertyDefinition = propertyDefinition, }; var isReadOnly = field.Attributes.HasFlag(FieldAttributes.InitOnly); if (!isReadOnly) { var set = GetSet(field, name); forwardedField.Set = set; typeDefinition.Methods.Add(set); propertyDefinition.SetMethod = set; } forwardedField.IsReadOnly = isReadOnly; foreach (var customAttribute in field.CustomAttributes) { propertyDefinition.CustomAttributes.Add(customAttribute); } field.CustomAttributes.Add(new CustomAttribute(referenceFinder.CompilerGeneratedReference)); typeDefinition.Properties.Add(propertyDefinition); ForwardedFields.Add(field, forwardedField); }
void ProcessField(TypeDefinition typeDefinition, FieldDefinition field) { var name = field.Name; if (!field.IsPublic || field.IsStatic || !char.IsUpper(name, 0)) { return; } if (typeDefinition.HasGenericParameters) { var message = $"Skipped public field '{typeDefinition.Name}.{field.Name}' because generic types are not currently supported. You should make this a public property instead."; moduleWeaver.LogWarning(message); return; } field.Name = $"<{name}>k__BackingField"; field.IsPublic = false; field.IsPrivate = true; var get = GetGet(field, name); typeDefinition.Methods.Add(get); var propertyDefinition = new PropertyDefinition(name, PropertyAttributes.None, field.FieldType) { GetMethod = get }; var forwardedField = new ForwardedField { Get = get, FieldType = field.FieldType, DeclaringType = field.DeclaringType, PropertyDefinition = propertyDefinition, }; var isReadOnly = field.Attributes.HasFlag(FieldAttributes.InitOnly); if (!isReadOnly) { var set = GetSet(field, name); forwardedField.Set = set; typeDefinition.Methods.Add(set); propertyDefinition.SetMethod = set; } forwardedField.IsReadOnly = isReadOnly; foreach (var customAttribute in field.CustomAttributes) { propertyDefinition.CustomAttributes.Add(customAttribute); } field.CustomAttributes.Add(new CustomAttribute(msCoreReferenceFinder.CompilerGeneratedReference)); typeDefinition.Properties.Add(propertyDefinition); ForwardedFields.Add(field, forwardedField); }