private void DeepCopyFields(MemberCloneContext context) { foreach (var field in _fieldsToClone) { DeepCopyField(context, field); } }
private static void CloneSemantics(MemberCloneContext context, IHasSemantics semanticsProvider, IHasSemantics clonedProvider) { foreach (var semantics in semanticsProvider.Semantics) { clonedProvider.Semantics.Add(new MethodSemantics( (MethodDefinition)context.ClonedMembers[semantics.Method], semantics.Attributes)); } }
private FieldDefinition CreateFieldStub(MemberCloneContext context, FieldDefinition field) { var clonedField = new FieldDefinition( field.Name, field.Attributes, context.Importer.ImportFieldSignature(field.Signature)); context.ClonedMembers.Add(field, clonedField); return(clonedField); }
private static EventDefinition DeepCopyEvent(MemberCloneContext context, EventDefinition @event) { var clonedEvent = new EventDefinition(@event.Name, @event.Attributes, context.Importer.ImportType(@event.EventType)); CloneSemantics(context, @event, clonedEvent); CloneCustomAttributes(context, @event, clonedEvent); return(clonedEvent); }
private void DeepCopyField(MemberCloneContext context, FieldDefinition field) { var clonedField = (FieldDefinition)context.ClonedMembers[field]; CloneCustomAttributes(context, field, clonedField); clonedField.ImplementationMap = CloneImplementationMap(context, field.ImplementationMap); clonedField.Constant = CloneConstant(context, field.Constant); clonedField.FieldRva = FieldRvaCloner.CloneFieldRvaData(field); clonedField.MarshalDescriptor = CloneMarshalDescriptor(context, field.MarshalDescriptor); clonedField.FieldOffset = field.FieldOffset; }
private PropertyDefinition DeepCopyProperty(MemberCloneContext context, PropertyDefinition property) { var clonedProperty = new PropertyDefinition(property.Name, property.Attributes, context.Importer.ImportPropertySignature(property.Signature)); CloneSemantics(context, property, clonedProperty); CloneCustomAttributes(context, property, clonedProperty); property.Constant = CloneConstant(context, property.Constant); return(clonedProperty); }
private void DeepCopyProperties(MemberCloneContext context) { foreach (var property in _propertiesToClone) { var clonedProperty = DeepCopyProperty(context, property); // If property's declaring type is cloned as well, add the cloned property to the cloned type. if (context.ClonedMembers.TryGetValue(property.DeclaringType, out var member) && member is TypeDefinition declaringType) { declaringType.Properties.Add(clonedProperty); } } }
private void DeepCopyEvents(MemberCloneContext context) { foreach (var @event in _eventsToClone) { var clonedEvent = DeepCopyEvent(context, @event); // If event's declaring type is cloned as well, add the cloned event to the cloned type. if (context.ClonedMembers.TryGetValue(@event.DeclaringType, out var member) && member is TypeDefinition declaringType) { declaringType.Events.Add(clonedEvent); } } }
private void CreateFieldStubs(MemberCloneContext context) { foreach (var field in _fieldsToClone) { var stub = CreateFieldStub(context, field); // If field's declaring type is cloned as well, add the cloned method to the cloned type. if (context.ClonedMembers.TryGetValue(field.DeclaringType, out var member) && member is TypeDefinition declaringType) { declaringType.Fields.Add(stub); } } }
/// <summary> /// Creates a new instance of the <see cref="CloneContextAwareReferenceImporter"/> class. /// </summary> /// <param name="context">The metadata cloning workspace.</param> public CloneContextAwareReferenceImporter(MemberCloneContext context) : base(context.Module) { _context = context; }