Пример #1
0
 private void DeepCopyFields(MemberCloneContext context)
 {
     foreach (var field in _fieldsToClone)
     {
         DeepCopyField(context, field);
     }
 }
Пример #2
0
 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));
     }
 }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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;
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
                }
            }
        }
Пример #8
0
        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);
                }
            }
        }
Пример #9
0
        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;
 }