Я хочу проанализировать файлы исходного кода Java и извлечь исходный код методов.
Мне был бы нужен метод как это:
/** Returns a map with key = method name ; value = method source code */
Map<String,String> getMethods(File javaFile);
Существует ли простой способ достигнуть этого, библиотека, чтобы помочь мне создать свой метод, и т.д.?
Загрузите парсер 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);
Думаю, вы можете использовать генератор парсеров ANTLR .
Он очень прост в использовании, и на сайте ANTLR есть много примеров, написанных на Java.
Также он поставляется с плагином для eclipse.
Вы можете создать свой парсер с помощью одного из генераторов парсеров:
Кроме того, вы можете использовать (или изучить, как это работает) что-то готовое. Существуют Java Tree Builder , который использует JavaCC, и RefactorIt , который использует ANTLR.
Не могли бы вы использовать собственный документ с JavaDoc?
Doclet.com может предоставить дополнительную информацию.
JavaCC - это "компилятор-компилятор" (генератор парсера) для Java. Для него есть много файлов грамматики, в том числе один для Java 1.5.