public static IGenericContext CreateCustomMap(IMethod methodDefinition, IMethod methodSpecialization, IMethod additionalMethodDefinition = null)
        {
            var context = new MetadataGenericContext();
            var customTypeSubstitution = new MutableTypeMap();

            var methodSpecAdapter = methodSpecialization as MetadataMethodAdapter;

            if (methodSpecAdapter != null)
            {
                var methodSymbolSpec = methodSpecAdapter.MethodDef;
                AppendMapping(customTypeSubstitution, methodSymbolSpec);
            }

            var methodDefAdapter = methodDefinition as MetadataMethodAdapter;

            if (methodDefAdapter != null)
            {
                var methodSymbolDef = methodDefAdapter.MethodDef;
                AppendMapping(customTypeSubstitution, methodSymbolDef, true);
            }

            if (additionalMethodDefinition != null)
            {
                var metadataMethodAdapter = additionalMethodDefinition as MetadataMethodAdapter;
                if (metadataMethodAdapter != null && methodSpecAdapter != null)
                {
                    var additionalMethodSymbolDef = metadataMethodAdapter.MethodDef;
                    AppendMethodDirectMapping(customTypeSubstitution, methodSpecAdapter.MethodDef, additionalMethodSymbolDef);
                }
            }

            context.CustomTypeSubstitution = customTypeSubstitution;
            return(context);
        }
        public static IGenericContext Create(IMethod methodDefinition, IMethod methodSpecialization)
        {
            var context = new MetadataGenericContext(methodDefinition);

            context.MethodSpecialization = methodSpecialization;
            return(context);
        }
        public static IGenericContext Create(IType typeDefinition, IType typeSpecialization)
        {
            var context = new MetadataGenericContext(typeDefinition);

            context.TypeSpecialization = typeSpecialization;
            return(context);
        }
示例#4
0
        /// <summary>
        /// </summary>
        /// <param name="definitionMethod">
        /// </param>
        /// <param name="specializationMethod">
        /// </param>
        /// <returns>
        /// </returns>
        public static IGenericContext CreateMap(IMethod definitionMethod, IMethod specializationMethod)
        {
            var context = new MetadataGenericContext();

            context.Map.GenericMap(definitionMethod.GetGenericParameters(), specializationMethod.GetGenericArguments());
            context.Map.GenericMap(definitionMethod.DeclaringType.GenericTypeParameters, specializationMethod.DeclaringType.GenericTypeArguments);
            return(context);
        }
 /// <summary>
 /// </summary>
 /// <param name="definitionMethod">
 /// </param>
 /// <param name="specializationMethod">
 /// </param>
 /// <returns>
 /// </returns>
 public static IGenericContext CreateMap(IMethod definitionMethod, IMethod specializationMethod)
 {
     var context = new MetadataGenericContext();
     context.Map.GenericMap(definitionMethod.GetGenericParameters(), specializationMethod.GetGenericArguments());
     context.Map.GenericMap(definitionMethod.DeclaringType.GenericTypeParameters, specializationMethod.DeclaringType.GenericTypeArguments);
     return context;
 }
        public static IGenericContext CreateCustomMap(IMethod methodDefinition, IMethod methodSpecialization, IMethod additionalMethodDefinition = null)
        {
            var context = new MetadataGenericContext();
            var customTypeSubstitution = new MutableTypeMap();

            var methodSpecAdapter = methodSpecialization as MetadataMethodAdapter;
            if (methodSpecAdapter != null)
            {
                var methodSymbolSpec = methodSpecAdapter.MethodDef;
                AppendMapping(customTypeSubstitution, methodSymbolSpec);
            }

            var methodDefAdapter = methodDefinition as MetadataMethodAdapter;
            if (methodDefAdapter != null)
            {
                var methodSymbolDef = methodDefAdapter.MethodDef;
                AppendMapping(customTypeSubstitution, methodSymbolDef, true);
            }

            if (additionalMethodDefinition != null)
            {
                var metadataMethodAdapter = additionalMethodDefinition as MetadataMethodAdapter;
                if (metadataMethodAdapter != null && methodSpecAdapter != null)
                {
                    var additionalMethodSymbolDef = metadataMethodAdapter.MethodDef;
                    AppendMethodDirectMapping(customTypeSubstitution, methodSpecAdapter.MethodDef, additionalMethodSymbolDef);
                }
            }

            context.CustomTypeSubstitution = customTypeSubstitution;
            return context;
        }
 public static IGenericContext Create(IMethod methodDefinition, IMethod methodSpecialization)
 {
     var context = new MetadataGenericContext(methodDefinition);
     context.MethodSpecialization = methodSpecialization;
     return context;
 }
 public static IGenericContext Create(IType typeDefinition, IType typeSpecialization)
 {
     var context = new MetadataGenericContext(typeDefinition);
     context.TypeSpecialization = typeSpecialization;
     return context;
 }