public MetadataParameterInfoAdapter(MetadataTypeInfoAdapter2 typeInfo, MetadataMethodInfoAdapter2 methodInfo, IMetadataParameter parameter) { this.typeInfo = typeInfo; this.methodInfo = methodInfo; this.parameter = parameter; }
GetParameters(MetadataReader reader, TypeReferenceTypeProvider typeProvider, GenericContext genericContext, MethodSignature <MetadataTypeReference> signature, ParameterHandleCollection handles) { var parameters = new IMetadataParameter[handles.Count]; var returnValueAttributes = (IReadOnlyList <IMetadataAttribute>)null; var maxSequenceNumber = 0; foreach (var handle in handles) { var parameter = reader.GetParameter(handle); if (parameter.SequenceNumber == 0) { returnValueAttributes = GetAttributes(reader, typeProvider, parameter.GetCustomAttributes(), genericContext); continue; } if (maxSequenceNumber < parameter.SequenceNumber) { maxSequenceNumber = parameter.SequenceNumber; } var parameterIndex = parameter.SequenceNumber - 1; parameters[parameterIndex] = new ReaderParameter(reader, typeProvider, parameter, genericContext, signature.ParameterTypes[parameterIndex]); } if (maxSequenceNumber == parameters.Length) { return(parameters, Array.Empty <IMetadataAttribute>()); } // Account for skipping the return parameter var correctedLength = new IMetadataParameter[maxSequenceNumber]; Array.Copy(parameters, correctedLength, correctedLength.Length); return(correctedLength, returnValueAttributes); }