private static void recurseOnModel(DescribableModel<?> model) throws Exception { for (DescribableParameter param : model.getParameters()) { recurseOnTypes(model, param.getType()); } }
private static void recurseOnTypes(DescribableModel<?> model, ParameterType type) throws Exception { if (type instanceof ErrorType) { throw new Exception("could not describe " + model, ((ErrorType) type).getError()); } if (type instanceof ArrayType) { recurseOnTypes(model, ((ArrayType)type).getElementType()); } else if (type instanceof HomogeneousObjectType) { recurseOnModel(((HomogeneousObjectType) type).getSchemaType()); } else if (type instanceof HeterogeneousObjectType) { if (((HeterogeneousObjectType) type).getActualType() == Object.class) { // See html.groovy#describeType. For example, JENKINS-53917 ChoiceParameterDefinition.choices. System.err.println("Ignoring " + model.getType().getName() + " since a parameter is not enumerable"); return; } for (Map.Entry<String, DescribableModel<?>> entry : ((HeterogeneousObjectType) type).getTypes().entrySet()) { recurseOnModel(entry.getValue()); } } }