private static Object copySlice()

in dekaf-jdbc/src/impl/JdbcValueGetters.java [548:583]


    private static Object copySlice(Class<?> sliceClass, Object sliceSource) {
      Class<?> componentType = sliceClass.getComponentType();
      int n = java.lang.reflect.Array.getLength(sliceSource);
      Object result = java.lang.reflect.Array.newInstance(sliceClass.getComponentType(), n);
      if (n == 0) return result;

      for (int i = 0; i < n; i++) {
        final Object x = java.lang.reflect.Array.get(sliceSource, i);
        if (x == null) continue;

        final Class<?> xClass =  x.getClass();
        final Object component;
        if (componentType.isAssignableFrom(xClass)) {
          component = x;
        }
        else if (componentType == String.class) {
          component = x.toString();
        }
        else if (componentType.isArray()) {
          component = copySlice(componentType, x);
        }
        else if ((componentType.isPrimitive() || Number.class.isAssignableFrom(componentType)) &&
                                                            Number.class.isAssignableFrom(xClass)) {
          //noinspection unchecked
          component = Numbers.convertNumber((Class<Number>) componentType, (Number) x);
        }
        else {
          String message =
              String.format("Array value fetching problem: unknown how to convert value (%s) of type %s to %s.",
                            x.toString(), xClass.getCanonicalName(), componentType.getCanonicalName());
          throw new IllegalStateException(message);
        }
        java.lang.reflect.Array.set(result, i, component);
      }
      return result;
    }