Conversation
There was a problem hiding this comment.
Будто честнее было бы брать случайный
| ctor.setAccessible(true); | ||
| Class<?>[] ptypes = ctor.getParameterTypes(); | ||
| Object[] args = new Object[ptypes.length]; | ||
| for (int i = 0; i < ptypes.length; i++) { |
There was a problem hiding this comment.
Мб туплю, но не увидел ветви для создания Generatable класса. Как у вас работает создание дерева через конструктор?
There was a problem hiding this comment.
Логика такая:
resolveConcrete выбирает реализацию для интерфейсов/абстрактных классов на основе @Generatable(implementations=...)
instantiateShell создаёт объект через конструктор, но ссылочные параметры на этом этапе ставятся пустые
граф строится не конструктором, а на шаге populateFields рефлексией обходим поля и уже там генерируем/переиспользуем ссылки
| } else if (Optional.class.isAssignableFrom(p)) { | ||
| args[i] = Optional.empty(); | ||
| } else if (Collection.class.isAssignableFrom(p)) { | ||
| args[i] = instantiateCollectionClass(p); |
There was a problem hiding this comment.
На этапе оболочки — да, дальше в populateFields вызывается maybeFillCollection/maybeFillMap, где случайно добавляется 0-2 элемента
| return (T) generateGraphForClass(clazz, st); | ||
| } | ||
|
|
||
| private static final class State { |
There was a problem hiding this comment.
Расскажите пж вашу идею с пулом и как ограничивается глубина рекурсии
There was a problem hiding this comment.
Есть pool всех уже созданных экземпляров
Для каждого ссылочного поля случайный выбор: null (10%) / переиспользовать из пула (50%) / создать новый (40%).
No description provided.