in johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/generator/SchemaProcessor.java [591:631]
private Instance createDemoInstance(final Object rootInstance, final Field field) {
if (rootInstance != null && field != null) {
try {
if (!field.isAccessible()) {
field.setAccessible(true);
}
final Object value = field.get(rootInstance);
if (value != null) {
return new Instance(value, false);
}
} catch (final IllegalAccessException e) {
throw new IllegalStateException(e);
}
}
final Type javaType = field.getGenericType();
if (Class.class.isInstance(javaType)) {
return new Instance(tryCreatingObjectInstance(javaType), true);
} else if (ParameterizedType.class.isInstance(javaType)) {
final ParameterizedType pt = ParameterizedType.class.cast(javaType);
final Type rawType = pt.getRawType();
if (Class.class.isInstance(rawType) && Collection.class.isAssignableFrom(Class.class.cast(rawType))
&& pt.getActualTypeArguments().length == 1
&& Class.class.isInstance(pt.getActualTypeArguments()[0])) {
final Object instance = tryCreatingObjectInstance(pt.getActualTypeArguments()[0]);
final Class<?> collectionType = Class.class.cast(rawType);
if (Set.class == collectionType) {
return new Instance(singleton(instance), true);
}
if (SortedSet.class == collectionType) {
return new Instance(new TreeSet<>(singletonList(instance)), true);
}
if (List.class == collectionType || Collection.class == collectionType) {
return new Instance(singletonList(instance), true);
}
// todo?
return null;
}
}
return null;
}