Exemplo n.º 1
0
        private readonly InternalFlags _flags; // TODO_Serialize: round trip and test

        #endregion                             // Member Variables

        #region Constructor

        internal ParameterData(MetadataItemKinds declaringMemberKind, string name, TypeData type, ParameterModifier modifer, InternalFlags flags, object defaultValue)
        {
            _flags = flags;

            this.DeclaringMemberKind = declaringMemberKind;
            this.DefaultValue        = defaultValue;
            this.Modifer             = modifer;
            this.Name = name;
            this.Type = type;
        }
Exemplo n.º 2
0
        /// <summary>
        /// Replaces all type parameters used by the member with their associated generic arguments specified in a constructed generic type.
        /// </summary>
        /// <param name="declaringMemberKind">The type of member owning the parameter collection.</param>
        /// <param name="genericParameters">The generic parameters being replaced.</param>
        /// <param name="genericArguments">The generic arguments replacing the parameters.</param>
        /// <returns>A new member with the replaced type parameters or the current instance if the member does not use any of the generic parameters.</returns>
#endif
        internal ParameterData ReplaceGenericTypeParameters(MetadataItemKinds declaringMemberKind, GenericTypeParameterCollection genericParameters, GenericTypeArgumentCollection genericArguments)
        {
            var replacedType = (TypeData)this.Type.ReplaceGenericTypeParameters(genericParameters, genericArguments);

            if (replacedType == this.Type)
            {
                return(this);
            }

            return(new ParameterData(declaringMemberKind, this.Name, replacedType, this.Modifer, _flags, this.DefaultValue));
        }
Exemplo n.º 3
0
        private ParameterCollection ReadParametersCollection(MetadataItemKinds declaringMemberKind)
        {
            var parametersCount = _reader.ReadUInt16();

            var parameters = new ParameterCollection();

            for (int i = 0; i < parametersCount; i++)
            {
                parameters.Add(ReadParameter(declaringMemberKind));
            }

            return(parameters);
        }
Exemplo n.º 4
0
        private ParameterData ReadParameter(MetadataItemKinds declaringMemberKind)
        {
            var name     = _reader.ReadString();
            var typeId   = _reader.ReadUInt32();
            var modifier = (MetadataItems.ParameterModifier)_reader.ReadByte();
            var flags    = (ParameterData.InternalFlags)_reader.ReadByte();

            object defaultValue = null;

            if ((flags & ParameterData.InternalFlags.IsOptional) != 0)
            {
                defaultValue = ReadDefaultValue();
            }

            return(new ParameterData(declaringMemberKind, name, _typeTable[typeId], modifier, flags, defaultValue));
        }
        /// <summary>
        /// Replaces all type parameters used by the member with their associated generic arguments specified in a constructed generic type.
        /// </summary>
        /// <param name="declaringMemberKind">The type of member owning the parameter collection.</param>
        /// <param name="genericParameters">The generic parameters being replaced.</param>
        /// <param name="genericArguments">The generic arguments replacing the parameters.</param>
        /// <returns>A new member with the replaced type parameters or the current instance if the member does not use any of the generic parameters.</returns>
#endif
        internal ParameterCollection ReplaceGenericTypeParameters(MetadataItemKinds declaringMemberKind, GenericTypeParameterCollection genericParameters, GenericTypeArgumentCollection genericArguments)
        {
            ParameterCollection replacedParameters = null;

            for (int i = 0; i < this.Count; i++)
            {
                var currentParameter  = this[i];
                var replacedParameter = currentParameter.ReplaceGenericTypeParameters(declaringMemberKind, genericParameters, genericArguments);
                if (replacedParameter == currentParameter)
                {
                    continue;
                }

                if (replacedParameters == null)
                {
                    replacedParameters = new ParameterCollection();
                    replacedParameters._parameters.AddRange(_parameters);
                }

                replacedParameters._parameters[i] = replacedParameter;
            }

            return(replacedParameters ?? this);
        }