public Converter getNeededConverter()

in velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/TypeConversionHandlerImpl.java [658:691]


    public Converter<?> getNeededConverter(Type formal, Class<?> actual)
    {
        if (actual == null)
        {
            return null;
        }
        Pair<String, String> key = Pair.of(formal.getTypeName(), actual.getTypeName());

        /* first check for a standard conversion */
        Converter<?> converter = standardConverterMap.get(key);
        if (converter == null)
        {
            /* then the converters cache map */
            converter = converterCacheMap.get(key);
            if (converter == null)
            {
                Class<?> formalClass = IntrospectionUtils.getTypeClass(formal);
                /* check for conversion towards string */
                if (formal == String.class)
                {
                    converter = toString;
                }
                /* check for String -> Enum constant conversion */
                else if (formalClass != null && formalClass.isEnum() && actual == String.class)
                {
                    final Class<Enum> enumClass = (Class<Enum>)formalClass;
                    converter = o -> Enum.valueOf(enumClass, (String)o);
                }

                converterCacheMap.put(key, converter == null ? cacheMiss : converter);
            }
        }
        return converter == cacheMiss ? null : converter;
    }