【问题标题】:How to parse a method or any other valid expression using JavaParser如何使用 JavaParser 解析方法或任何其他有效表达式
【发布时间】:2015-09-04 04:22:33
【问题描述】:

JavaParser是一个java源码解析工具。我阅读了文档,但发现它只能解析完整 java 类的源代码,例如:

public class X {
    public void show(String id) {
        Question q = Quesiton.findById(id);
        aaa.BBB.render(q);
    }
}

但我只想解析其中的一部分,例如方法声明:

public void show(String id) {
    Question q = Quesiton.findById(id);
    aaa.BBB.render(q);
}

怎么做或者有可能吗?如果没有,有没有其他工具可以做到这一点?


更新

其实我想在java中解析任何有效的表达式,所以我可以用JavaParser轻松做到这一点:

CompilationUnit unit = JavaParser.parse(codeInputStream);

addField(unit, parseField("public String name"));  // not possible now

【问题讨论】:

标签: java parsing javaparser


【解决方案1】:

我看到你可以在一个虚拟类中包含该方法并像往常一样解析它。对于您提供的示例,请将其附在里面:

public class DUMMY_CLASS_FOO {

    // The string you're trying to parse (method or whatever)

}

然后你像往常一样解析它并在解析时忽略你的虚拟类。

更新:

对于您提供的更新,您可以尝试捕捉

如果之前的封装没有做到,那么就将其封装到:

public class DUMMY_CLASS_FOO {

    public void DUMMY_METHOD_FOO {

        // Anything here

    }
}

您还可以搜索访问级别修饰符(公共、私有、...等),如果找到,请执行第一个解决方案。如果找不到,请执行另一项。

【讨论】:

  • 这应该可以,但我还想将其他 java 源代码解析为 fields 或任何其他有效表达式。
  • 我更新了我的答案。如果有帮助,您可以接受这个答案,如果没有,请告诉我:)
  • 这两天查了javaparser的源码,发现你的解决方案可能是唯一可用的,除了重写解析器。
  • 相比单次检查和字符串拼接,重写解析器很头疼。
猜你喜欢
  • 2022-07-31
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
  • 2014-01-06
  • 1970-01-01
相关资源
最近更新 更多