Как зарегистрировать несколько экземпляров пользовательских доклетов с различиями в конфигурации

Я пишу пользовательский доклет Javadoc для печати таблицы ограничений javax.validation для содержащего класса. Это в основном работает, но я считаю, что структура Doclet довольно ограничена и негибка.

Для фона очень возможно, что свойство в классе будет иметь более одного ограничения проверки. Когда я изначально писал Taglet, я отображал отдельные строки в таблице для каждого ограничения, даже если имя свойства было одинаковым.

Кто-то сказал, что хотел бы иметь возможность отображать все ограничения для одного свойства в одной строке через запятую. Лично я не думал, что захочу этого, но я не видел причин ограничивать это, так как это разумный вопрос.

Итак, я подумала, насколько сложно разрешить параметры конфигурации в Taglet? Довольно сложно, как я выяснил.

Во-первых, я предполагал, что можно будет определить теглеты, которые принимают параметры конфигурации. Затем я обнаружил, что нет никакого способа сделать это.

Хорошо, тогда я подумал, что буду использовать немного хитрости.

Вот блок кода из моего класса taglet:

public static void register(Map<String, Taglet> tagletMap)  {
    ValidationConstraintsTaglet taglet  = new ValidationConstraintsTaglet();
    registerInstance(tagletMap, taglet, taglet.getName());
    //ValidationConstraintsTaglet tagletCombined  = new ValidationConstraintsTaglet().combineConstraints(true);
    //registerInstance(tagletMap, tagletCombined, taglet.getName() + "Combined");
}

private static void registerInstance(Map<String, Taglet> tagletMap, Taglet taglet, String name) {
    if (tagletMap.get(name) != null) {
        tagletMap.remove(name);
    }
    tagletMap.put(name, taglet);
}

С таким кодом он прекрасно работает, отображая одну строку на ограничение.

Если я прокомментировал две закомментированные строки, это попытка зарегистрировать ВТОРОЙ экземпляр тега с другим именем, добавив "Комбинированный" в конец имени. В моем методе "toString(Tag)" я проверяю эту опцию "isCombinedConstraints", отображая все ограничения для одного свойства в одной строке. Я удостоверился, что эта функциональность работает, если по умолчанию установлен "mixedConstraints".

Итак, если я запустил это с этими двумя прокомментированными строками, я получу недоумение:

javadoc: error - com.sun.tools.doclets.internal.toolkit.util.DocletAbortException: java.lang.ClassCastException: com.att.det.taglet.ValidationConstraintsTaglet cannot be cast to com.sun.tools.doclets.internal.toolkit.taglets.Taglet

Это вся информация, которую я получаю. Нет стека трассировки, чтобы даже сказать мне, где это происходит.

Когда я впервые увидел это, я предположил, что я, должно быть, также изменил что-то еще в то же время, что могло бы вызвать это. Затем я закомментировал две новые строки и перепроверил, и ошибка исчезла.

1 ответ

Решение

Я отказался от этого подхода, так как не мог заставить его работать и не получил ответа.

То, что я вынужден сделать, это реализовать изменения конфигурации в подклассе, с собственным методом "register" и другим именем тега.

Другие вопросы по тегам