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; }
/// <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)); }
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); }
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); }