Подтвердить что ты не робот

Java: parse java исходный код, методы извлечения

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

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

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

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

4b9b3361

Ответ 1

Загрузите парсер 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);

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

JavaCC является "компилятором-компилятором" (генератором синтаксического анализатора) для Java. Для него существует много файлов грамматики, в том числе для Java 1.5.