2010-03-28 3 views
7

У меня есть набор исходных файлов Java 5 со старыми тегами Doclet, комментариями и комментариями. И на основании этого я хотел бы написать генератор для другого набора классов Java.Основы генерации исходного кода Java

Каков наилучший способ сделать это? И есть ли хорошие автономные библиотеки для анализа/генерации кода в Java? Приветствуется любой общий опыт в этой области.

Итак, пока я нашел это:

  • JaxME's Java Source Reflection - кажется, хорошо, но это, кажется, не поддерживает аннотации. Также он не выпускался с 2006 года.

  • Annogen - использует генератор Doclet JDK, который имеет некоторые ошибки под 1,5 JDK. Также у него не было выпусков в течение длительного времени.

  • Javaparser - кажется хорошим и довольно недавним, но поддерживает только шаблон посетителя для одного класса, т. Е. Нет механизма запроса, как в 2 вышеуказанных пакетах.

ответ

1

И проекты IDE NetBeans, и Eclipse JDT имеют значительную логику анализа/генерации кода Java. Я не знаю, каковы их зависимости (т. Е. Вы можете использовать их как автономные библиотеки), но, кроме этого, я бы неплохо посмотрел на эти два: маловероятно, что библиотека анализа java-кода находится в более интенсивной разработке и более своевременно.

Update:

PMD может представлять интерес, а также:

PMD сканирует исходный код Java и ищет потенциальные проблемы, как:

* Possible bugs - empty try/catch/finally/switch statements 
* Dead code - unused local variables, parameters and private methods 
* Suboptimal code - wasteful String/StringBuffer usage 
* Overcomplicated expressions - unnecessary if statements, for loops that could be while loops 
* Duplicate code - copied/pasted code means copied/pasted bugs 

Кроме того, этот blog запись обсуждает различные инструменты анализа статического кода.

+0

Затмение JET (Java Emmiter Templates), но он не работает вне Eclipse (http://wiki.eclipse.org/JET_FAQ_How_do_I_run_a_JET_transformation_from_Java%3F). –

+0

Я обновил свой ответ с помощью нескольких новых элементов. –

+0

Я попытался немного поиграть с PMD, но это API слишком сложно. Я продолжу экспериментировать и опубликовать ваши результаты. –

4

Если вам нужно только создать синтаксически правильный Java-код, проверьте Codemodel.

+0

Codemodel - это всего лишь генератор кода, и у него нет инструмента для разбора кода Java. Хотя +1 для ссылки :). –

+0

Да, это _only_ генератор кода, я хотел бы еще раз подчеркнуть это.Очень хороший API на мой вкус. – lexicore

+0

Точно то, что я хочу. – Mike

3

В итоге я использовал PMD. Пример кода можно увидеть ниже:

final Java15Parser parser = new Java15Parser(); 
    final FileInputStream stream = new FileInputStream("VehicleServiceType.java"); 

    final Object c = parser.parse(new InputStreamReader(stream)); 

    final XPath xpath = new BaseXPath("//TypeDeclaration/Annotation/NormalAnnotation[Name/@Image = 'WebService']", 
     new DocumentNavigator()); 

    for (final Iterator iter = xpath.selectNodes(c).iterator(); iter.hasNext();) { 
     final Object obj = iter.next(); 
     // Do code generation based on annotations... 
    } 
+0

Спасибо за отзыв, приятно знать, что вы можете пройти определение класса с помощью XPath! –

Смежные вопросы