Java: исходный код Java синтаксического анализа, извлеките методы

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

Мне был бы нужен метод как это:

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

Существует ли простой способ достигнуть этого, библиотека, чтобы помочь мне создать свой метод, и т.д.?

48
задан glmxndr 5 February 2010 в 09:08
поделиться

5 ответов

Загрузите парсер java с https://javaparser.org/

Вам придется написать код. Этот код вызовет синтаксический анализатор ... он вернет вам 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);
57
ответ дан 26 November 2019 в 18:54
поделиться

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

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

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

3
ответ дан 26 November 2019 в 18:54
поделиться

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

  1. ANTLR
  2. JavaCC
  3. SableCC

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

4
ответ дан 26 November 2019 в 18:54
поделиться

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

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

2
ответ дан 26 November 2019 в 18:54
поделиться

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

2
ответ дан 26 November 2019 в 18:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: