Исходный код Java для тестирования посетителя AST

В настоящее время я разрабатываю посетитель абстрактного синтаксического дерева для дерева lombok.ast, который должен печатать в виде обычного текста в заданном объекте OutputStream структуру моего AST.

Чтобы ускорить фазу отладки, есть ли какой-либо тестовый исходный код, который уже содержит большинство (если не все) конструкций Java? Существует так много частных случаев и странных, необычных (но все же возможных) вещей, что многие из них даже слишком легко забыть.

Его не обязательно рассматривать как тестовый пример, достаточно любого исходного кода с большой сложностью и разнообразием.

Заранее спасибо всем.

РЕДАКТИРОВАТЬ: Кто-нибудь знает, есть ли способ понять, когда заканчивается посещение lombok.ast?


person Alex    schedule 23.07.2012    source источник
comment
OpenJDK, вероятно, содержит тестовые примеры для синтаксического анализа Java.   -  person Aaron Digulla    schedule 23.07.2012


Ответы (1)


Вам следует просмотреть исходники openJDK (ищите jdk7/test).

При использовании шаблона посетителя всегда трудно понять, когда заканчивается посещение. Вы получаете вызов, когда родительский узел найден в первый раз, но не снова после посещения всех дочерних узлов.

Обычное решение состоит в том, чтобы собирать информацию во время посещения узлов, а затем, после посещения всех узлов, просматривать собранную информацию и выполнять фактическую обработку.

person Aaron Digulla    schedule 26.07.2012
comment
Это то, что я пытаюсь сделать, проблема в том, что мой посетитель вызывается для каждого узла CompilationUnit (короче говоря, для каждого исходного файла Java), найденного инструментом Android Lint, и у них нет никакой ссылки на родителей или братьев и сестер. , поэтому не могу понять, будет ли после этого узла CompilationUnit еще один или нет - person Alex; 27.07.2012
comment
Вы можете установить глобальную переменную в своем посетителе и проверить, не является ли она нулевой. Если да, то он был до этого визита. Это решает проблему для всех, кроме последнего визита. Или вы можете получить исходники для инструмента lint и исправить их. - person Aaron Digulla; 27.07.2012