class TypeTypeConverter implements TypeConverter {

    @Override
    public Object fromString(Type ignored, String value) {
        if (value == null) {
            return Expression.Undefined.class;
        }
        Type result = stringToTypeCache.get(value);
        if (result == null) {
            result = convertString(value);
            Type prev = stringToTypeCache.putIfAbsent(value, result);
            result = prev != null ? prev : result;
        }
        return result;
    }

}