Java:解析java源代码,提取方法

新手上路,请多包涵

我想解析 java 源代码文件,并提取方法源代码。

我需要这样的方法:

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

有没有一种简单的方法可以实现这一点,一个库可以帮助我构建我的方法等?

原文由 glmxndr 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 466
2 个回答

https://javaparser.org/ 下载 java 解析器

您将不得不编写一些代码。此代码将调用解析器…它将返回一个 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);

原文由 arcticfox 发布,翻译遵循 CC BY-SA 4.0 许可协议

QDOX 是一个更轻量级的解析器,它只解析到方法级别,即方法体不被解析为语句。它或多或少地为您提供了您所要求的内容,即使您会导航模型以找到正确的名称,因为它不会按名称对类和方法进行索引。

原文由 Felix Leipold 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏