package org.testory.plumbing.inject;
import static org.testory.plumbing.PlumbingException.check;
import java.lang.reflect.Array;
import org.testory.plumbing.Maker;
public class ArrayMaker implements Maker {
private final Maker maker;
private ArrayMaker(Maker maker) {
this.maker = maker;
}
public static Maker singletonArray(Maker maker) {
check(maker != null);
return new ArrayMaker(maker);
}
public <T> T make(Class<T> type, String name) {
check(type != null);
check(name != null);
return type.isArray()
? makeArray(type, name)
: maker.make(type, name);
}
private <T> T makeArray(Class<T> arrayType, String name) {
Class<?> componentType = arrayType.getComponentType();
Object array = Array.newInstance(componentType, 1);
Object element = make(componentType, name + "[0]");
Array.set(array, 0, element);
return (T) array;
}
}