docs: @Pure
  	public static Object unwrapArray(Object value, Class<?> componentType) {
  		// This is the generic object array check.
  		if (value instanceof WrappedArray<?>) {
  			Object result = ((WrappedArray<?>) value).internalToArray();
  			return checkComponentType(result, componentType);
  		}
  		// And now for the primitive arrays.
  		if (value instanceof WrappedIntegerArray) {
  			Object result = ((WrappedIntegerArray) value).internalToArray();
  			return checkComponentType(result, componentType);
  		}
  
  		if (value instanceof WrappedLongArray) {
  			Object result = ((WrappedLongArray) value).internalToArray();
  			return checkComponentType(result, componentType);
  		}
  
  		if (value instanceof WrappedFloatArray) {
  			Object result = ((WrappedFloatArray) value).internalToArray();
  			return checkComponentType(result, componentType);
  		}
  
  		if (value instanceof WrappedDoubleArray) {
  			Object result = ((WrappedDoubleArray) value).internalToArray();
  			return checkComponentType(result, componentType);
  		}
  
  		if (value instanceof WrappedByteArray) {
  			Object result = ((WrappedByteArray) value).internalToArray();
  			return checkComponentType(result, componentType);
  		}
  
  		if (value instanceof WrappedShortArray) {
  			Object result = ((WrappedShortArray) value).internalToArray();
  			return checkComponentType(result, componentType);
  		}
  
  		if (value instanceof WrappedBooleanArray) {
  			Object result = ((WrappedBooleanArray) value).internalToArray();
  			return checkComponentType(result, componentType);
  		}
  
  		if (value instanceof WrappedCharacterArray) {
  			Object result = ((WrappedCharacterArray) value).internalToArray();
  			return checkComponentType(result, componentType);
  		}
  
  		if (!(value instanceof Iterable<?>)) {
  			// Nothing to unwrap.
  			return value;
  		}
  
  		if (!componentType.isPrimitive()) {
  			@SuppressWarnings({ "unchecked", "rawtypes" })
  			Object result = Iterables.toArray((Iterable) value, componentType);
  			return result;
  		}
  
  		try {
  			List<?> list = IterableExtensions.toList((Iterable<?>) value);
  			Object result = Array.newInstance(componentType, list.size());
  			for (int i = 0; i < list.size(); i++) {
  				Object element = list.get(i);
  				if (element == null) {
  					throw new ArrayStoreException("Cannot store <null> in primitive arrays.");
  				}
  				Array.set(result, i, element);
  			}
  			return result;
  		} catch (IllegalArgumentException iae) {
  			throw new ArrayStoreException("Primitive conversion failed: " + iae.getMessage());
  		}
  	}