Java: разобрать исходный код Java, извлечь методы - PullRequest
47 голосов
/ 05 февраля 2010

Я хочу проанализировать файлы исходного кода Java и извлечь исходный код методов.

Мне нужен такой метод:

/** Returns a map with key = method name ; value = method source code */
Map<String,String> getMethods(File javaFile);

Есть ли простой способ добиться этого, библиотека, которая поможет мне построить мой метод и т. Д.?

Ответы [ 6 ]

55 голосов
/ 05 февраля 2010

Загрузите анализатор Java с http://javaparser.github.io/javaparser/

Вам придется написать код. Этот код вызовет синтаксический анализатор ... он вернет вам CompilationUnit:

            InputStream in = null;
            CompilationUnit cu = null;
            try
            {
                    in = new SEDInputStream(filename);
                    cu = JavaParser.parse(in);
            }
            catch(ParseException x)
            {
                 // handle parse exceptions here.
            }
            finally
            {
                  in.close();
            }
            return cu;

Примечание: SEDInputStream является подклассом входного потока. Вы можете использовать FileInputStream, если хотите.


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

  public class MethodVisitor extends VoidVisitorAdapter
  {
        public void visit(MethodDeclaration n, Object arg)
        {
             // extract method information here.
             // put in to hashmap
        }
  }

Чтобы вызвать посетителя, сделайте следующее:

  MethodVisitor visitor = new MethodVisitor();
  visitor.visit(cu, null);
6 голосов
/ 30 ноября 2010

QDOX - это более легкий анализатор, который анализирует только до уровня метода, т. Е. Тело метода не разбирается в операторы.Он дает вам более или менее то, о чем вы просите, даже если вам придется перемещаться по модели, чтобы найти правильное имя, поскольку он не индексирует классы и методы по имени.

3 голосов
/ 05 февраля 2010

Вы можете создать свой парсер с одним из генераторов парсеров:

  1. ANTLR
  2. JavaCC
  3. SableCC

Кроме того, вы можете использовать (или изучить, как это работает) что-то готовое. Есть Java Tree Builder , который использует JavaCC и RefactorIt , который использует ANTLR.

3 голосов
/ 05 февраля 2010

Я думаю, вы можете использовать ANTLR генератор парсера.

Он очень прост в использовании и на сайте ANTLR есть много примеров, написанных на Java.

Также поставляется с плагином для затмения.

2 голосов
/ 05 февраля 2010

JavaCC - это «компилятор-компилятор» (генератор синтаксического анализатора) для Java. Для него есть много файлов грамматики, включая один для Java 1.5.

2 голосов
/ 05 февраля 2010

Не могли бы вы использовать пользовательский доклет с JavaDoc?

Doclet.com может предоставить больше информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...