如何编写涉及间接继承的Checkstyle自定义检查?

2023-12-24

我们需要编写一个 checkstyle 自定义检查来验证直接或间接继承自某个类 A 的类的特定条件。是否可以使用 checkstyle API 来识别间接继承? 例如,假设我们有:

  • C类---扩展--->B类
  • B类---扩展--->A类

在这种情况下,通过查找“extends”标记很容易检查 C 是否是 B 的子类(TokenTypes.EXTENDS_CLAUSE) 并在扩展子句 AST 中查找 B。但是我们怎么知道C也是A的子类呢?

Java反射加上instanceof是唯一的出路吗? (不理想 https://stackoverflow.com/questions/435553/java-reflection-performance在我们的例子中,因为我们必须对数千个文件进行检查。)

PMD 或其他静态分析工具是否允许我使用该(间接继承)条件编写自定义检查?


这是可以做到的,但并不容易,因为 checkstyle 没有 Java 编译器。所以它只能看源文本并分析其语法树,但无法“理解”它。

所以,你必须load检查样式检查中的类。

为此,您很可能需要定义自己的类加载器,以便可以从您的 Eclipse 工作区(或者您的源所在的任何其他位置)加载该类。

现在您只需致电instanceof A瞧!

我不会担心性能。您可以将类文件的 LRU 缓存添加到自定义类加载器中,这将解决该问题。另外,如果检查在您的 IDE 中运行,它只需要加载很少的类(直接继承树中的类),如果它在整个源上运行,它将在晚上运行,不是吗?

由于这个问题已经很老了,如果您需要代码示例,请告诉我。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何编写涉及间接继承的Checkstyle自定义检查? 的相关文章

随机推荐