protected void AddConstraintsToGenericParameters(AnalysisNet.Types.IGenericDefinition genericDefinition, Cecil.IGenericParameterProvider genericParameterProvider) { foreach (AnalysisNet.Types.GenericParameter analysisNetParameter in genericDefinition.GenericParameters) { IEnumerable <Cecil.GenericParameterConstraint> constraints = analysisNetParameter.Constraints.Select(c => new Cecil.GenericParameterConstraint(ReferenceGenerator.TypeReference(c))); genericParameterProvider.GenericParameters.ElementAt(analysisNetParameter.Index).Constraints.AddRange(constraints); } }
private void ExtractGenericTypeParameters(AnalysisNet.Types.IGenericDefinition definingType, Cecil.TypeDefinition typedef) { for (int i = 0; i < typedef.GenericParameters.Count; ++i) { Cecil.GenericParameter parameterdef = typedef.GenericParameters[i]; ushort index = (ushort)i; string name = parameterdef.Name; AnalysisNet.Types.TypeKind typeKind = GetGenericParameterTypeKind(parameterdef); AnalysisNet.Types.GenericParameter parameter = new AnalysisNet.Types.GenericParameter(AnalysisNet.Types.GenericParameterKind.Type, index, name, typeKind); ExtractCustomAttributes(parameter.Attributes, parameterdef.CustomAttributes); parameter.GenericContainer = definingType; definingType.GenericParameters.Add(parameter); parameter.Constraints.AddRange(parameterdef.Constraints.Select(c => ExtractType(c.ConstraintType))); } }