Exemple #1
0
        /// <summary>
        /// Sets the attributes.
        /// </summary>
        /// <param name="module">The module.</param>
        /// <param name="owner">The owner.</param>
        /// <param name="attributes">The attributes.</param>
        private void SetAttributes(IMetadataModule module, TokenTypes owner, List <CustomAttributeRow> attributes)
        {
            ITypeSystem ts = (ITypeSystem)this;

            // Convert the custom attribute rows to RuntimeAttribute instances
            RuntimeAttribute[] ra = new RuntimeAttribute[attributes.Count];
            for (int i = 0; i < attributes.Count; i++)
            {
                ra[i] = new RuntimeAttribute(module, attributes[i]);
            }

            // The following switch matches the AttributeTargets enumeration against
            // metadata tables, which make valid targets for an attribute.
            switch (owner & TokenTypes.TableMask)
            {
            case TokenTypes.Assembly:
                // AttributeTargets.Assembly
                break;

            case TokenTypes.TypeDef:
                // AttributeTargets.Class
                // AttributeTargets.Delegate
                // AttributeTargets.Enum
                // AttributeTargets.Interface
                // AttributeTargets.Struct
                RuntimeType type = ts.GetType(module, owner);
                type.SetAttributes(ra);
                if (rtCallTypeAttribute != null)
                {
                    if (type.IsDefined(rtCallTypeAttribute) == true)
                    {
                        this.internalTypes.Add(type);
                    }
                }
                break;

            case TokenTypes.MethodDef:
                // AttributeTargets.Constructor
                // AttributeTargets.Method
                RuntimeMethod method = ts.GetMethod(module, owner);
                method.SetAttributes(ra);
                break;

            case TokenTypes.Event:
                // AttributeTargets.Event
                break;

            case TokenTypes.Field:
                // AttributeTargets.Field
                break;

            case TokenTypes.GenericParam:
                // AttributeTargets.GenericParameter
                break;

            case TokenTypes.Module:
                // AttributeTargets.Module
                break;

            case TokenTypes.Param:
                // AttributeTargets.Parameter
                // AttributeTargets.ReturnValue
                break;

            case TokenTypes.Property:
                // AttributeTargets.StackFrameIndex
                break;
            }
        }