public List<C> instantiateClasses(Parameterization config) {
if (instances == null) {
// instantiateClasses will descend itself.
instances = new ArrayList<C>(super.instantiateClasses(config));
} else {
Parameterization cfg = null;
for (int i = 0; i < instances.size(); i++) {
if (instances.get(i) == null) {
Class<? extends C> cls = getValue().get(i);
try {
// Descend at most once, and only when needed