private Instance createDemoInstance()

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;
        }