package st.gravel.support.jvm;
import java.lang.reflect.Array;
public class ArrayFactory {
public static <X> X[] with_(
X element1) {
X[] newInstance = (X[]) Array.newInstance(element1.getClass(), 1);
newInstance[0] = element1;
return newInstance;
}
public static <X> X[] with_with_(
X element1, X element2) {
final Class<? extends Object> class1 = element1.getClass();
final Class<? extends Object> class2 = element2.getClass();
X[] newInstance = (X[]) Array.newInstance(commonSuperclass(class1, class2), 2);
newInstance[0] = element1;
newInstance[1] = element2;
return newInstance;
}
public static <X> X[] with_with_with_(X element1,
X element2, X element3) {
final Class<? extends Object> class1 = element1.getClass();
final Class<? extends Object> class2 = element2.getClass();
final Class<? extends Object> class3 = element2.getClass();
X[] newInstance = (X[]) Array.newInstance(commonSuperclass(class1, commonSuperclass(class2, class3)), 3);
newInstance[0] = element1;
newInstance[1] = element2;
newInstance[2] = element3;
return newInstance;
}
public static Class<?> commonSuperclass(Class<? extends Object> class1,
Class<? extends Object> class2) {
if (class1 == class2) return class1;
Class<? extends Object> cl = class1;
while (cl != null) {
if(cl.isAssignableFrom(class2)) return cl;
cl = cl.getSuperclass();
}
return commonSuperclass(class1, class2.getSuperclass());
}
}