private void AutoModifyField(TypeDefinition targetType, MemberActionAttribute fieldActionAttr, FieldDefinition yourField) { Log_modifying_member("field", yourField); (fieldActionAttr != null).AssertTrue(); var asModifies = fieldActionAttr as ModifiesMemberAttribute; string targetFieldName = null; ModificationScope scope; if (asModifies != null) { targetFieldName = asModifies.MemberName ?? yourField.Name; scope = asModifies.Scope; } else if (fieldActionAttr is NewMemberAttribute) { targetFieldName = yourField.Name; scope = ModificationScope.All; } else { throw Errors.Unknown_action_attribute(fieldActionAttr); } var targetField = targetType.GetField(targetFieldName); if (targetField == null) { throw Errors.Missing_member("field", yourField, targetFieldName); } if ((scope & ModificationScope.Accessibility) != 0) { targetField.SetAccessibility(yourField.GetAccessbility()); } if ((scope & ModificationScope.CustomAttributes) != 0) { CopyCustomAttributes(targetField, yourField); } if ((scope & ModificationScope.Body) != 0) { targetField.InitialValue = yourField.InitialValue; //dunno what this is used for targetField.Constant = yourField.Constant; } }
private void ModifyField(MemberActionAttribute fieldActionAttr, FieldDefinition yourField, FieldDefinition targetField) { Log_modifying_member("field", yourField); (fieldActionAttr != null).AssertTrue(); ModificationScope scope = fieldActionAttr.Scope; if ((scope & ModificationScope.Accessibility) != 0) { targetField.SetAccessibility(yourField.GetAccessbility()); } var attrFilter = AttrFilter(scope); CopyCustomAttributes(targetField, yourField, attrFilter); if ((scope & ModificationScope.Body) != 0) { targetField.InitialValue = yourField.InitialValue; //dunno what this is used for targetField.Constant = yourField.Constant; targetField.HasConstant = yourField.HasConstant; } var toggleAttributesAttr = yourField.GetCustomAttribute<ToggleFieldAttributes>(); var toggleValue = toggleAttributesAttr?.Attributes ?? 0; targetField.Attributes ^= (FieldAttributes) toggleValue; }