Cartographer.Compiler.ConversionPatternGenericCloser.Close C# (CSharp) Method

Close() public method

public Close ( Type conversionPatternType, Type sourceType, Type targetType ) : Type
conversionPatternType System.Type
sourceType System.Type
targetType System.Type
return System.Type
        public Type Close(Type conversionPatternType, Type sourceType, Type targetType)
        {
            var @interface = conversionPatternType.GetInterface(typeof (IConversionPattern<,>));
            if (@interface == null)
            {
                throw new ArgumentException(string.Format("Type {0} doesn't implement {1} and therefore is invalid for this operation.", conversionPatternType, typeof (IConversionPattern<,>)));
            }
            var arguments = @interface.GetGenericArguments();
            var interfaceSourceType = arguments[0];
            var interfaceTargetType = arguments[1];
            if (conversionPatternType.IsGenericType == false)
            {
                if (sourceType.Is(interfaceSourceType) && targetType.Is(interfaceTargetType))
                {
                    return conversionPatternType;
                }
                return null;
            }
            var openClassArguments = conversionPatternType.GetGenericArguments();
            var parameters = new Type[openClassArguments.Length];
            if (TryAddParameters(sourceType, interfaceSourceType, parameters, openClassArguments) == false)
            {
                return null;
            }
            if (TryAddParameters(targetType, interfaceTargetType, parameters, openClassArguments) == false)
            {
                return null;
            }
            if (parameters.Any(p => p == null))
            {
                return null;
            }
            return conversionPatternType.MakeGenericType(parameters);
        }