繁体   English   中英

如何找到扩展类X的类并检查在Java中它们内的任何地方是否使用了try / catch块

[英]How to find classes which extend class X and check if a try/catch block is used anywhere inside them in Java

我目前正在寻找编写执行以下操作的Java代码:

  1. 在包中找到扩展X类的特定类
  2. 检查是否在其内部的任何地方使用了try / catch块(或者更具体地说,是否从捕获的异常中调用.getStackTrace(),但是总体上来说,如果我发现使用“ try / catch”就足够了)
  3. 跟踪满足条件的类并返回其名称列表

任何帮助或建议,表示赞赏:-)

使用反射是不可能的,因为您正在尝试检查方法实现,而不仅仅是它们的签名。 您将需要执行以下操作:

  • 在文件系统上软件包的目录中找到源代码文件的列表。
  • 使用JavaParser之类的库解析源代码。
  • 对每个类声明使用抽象语法树来测试其是否扩展了X。
  • 对于那些确实扩展了X的代码,请遍历每种方法的抽象语法树,以查找它们是否包含任何try / catch块。

如果要严格,有很多非常棘手的细节需要正确处理。 可以在一个文件中声明多个类,可以将类嵌套在其他类中,方法中可以包含本地类声明,并且匿名类和lambda也可以扩展X。在最坏的情况下,lambda可以扩展X而不会出现X的名称Lambda中的任何地方; 检测到此问题的唯一方法是解析lambda的类型,而不仅仅是解析。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM