4 using System.Collections.Generic;
8 namespace SiliconStudio.AssemblyProcessor
16 private Dictionary<TypeReference, TypeReference> genericTypeMapping;
20 this.genericTypeMapping = genericTypeMapping;
27 public static TypeReference
Process(TypeReference context, TypeReference type)
32 var genericInstanceTypeContext = context as GenericInstanceType;
33 if (genericInstanceTypeContext == null)
36 if (genericInstanceTypeContext.ContainsGenericParameter())
40 var resolvedType = context.Resolve();
41 var genericTypeMapping =
new Dictionary<TypeReference, TypeReference>();
42 for (
int i = 0; i < resolvedType.GenericParameters.Count; ++i)
44 var genericParameter = context.GetElementType().Resolve().GenericParameters[i];
45 genericTypeMapping.Add(genericParameter, genericInstanceTypeContext.GenericArguments[i]);
49 var result = visitor.VisitDynamic(type);
52 if (result.ContainsGenericParameter())
53 throw new InvalidOperationException(
"Unsupported generic resolution.");
58 public override TypeReference
Visit(GenericParameter type)
61 if (genericTypeMapping.TryGetValue(type, out result))
64 return base.Visit(type);
override TypeReference Visit(GenericParameter type)
static TypeReference Process(TypeReference context, TypeReference type)
Transform open generic types to closed instantiation using context information. As an example...
ResolveGenericsVisitor(Dictionary< TypeReference, TypeReference > genericTypeMapping)
Transform open generic types to closed instantiation using context information. See Process for more ...
Visit Cecil types recursively, and replace them if requested.