我们需要编写一个 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(使用前将#替换为@)