2012-07-23 1 views
1

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

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

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

Спасибо заранее.

EDIT: Кто-нибудь знает, есть ли способ понять, когда заканчивается визит lombok.ast?

+1

OpenJDK, вероятно, содержит тестовые примеры для разбора Java. –

+0

Хорошая идея, спасибо – Alex

ответ

0

Вы должны посмотреть на sources of the openJDK (найти jdk7/test).

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

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

+0

Это то, что я пытаюсь сделать, проблема в том, что мой посетитель вызывается для каждого узла CompilationUnit (вкратце для каждого исходного файла Java), найденного инструментом Android Lint, и у них нет ссылку на родителей или братьев и сестер, поэтому я не могу найти способ понять, будет ли после этого узла CompilationUnit другим или нет. – Alex

+0

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