2013-05-29 60 views
3

我正在编写一个自定义检查来查看某些类是否符合我们的体系结构,其中一个规则指出,如果一个类对它的名称有某个前缀,它必须继承某种类型的servlet直接或间接。检查一个类是否间接继承了另一个类的类


可用的检查不包括这种情况下,与间接继承被证明是一个challange测试,因为我无法找到一种方式来获得第一继承类的助攻树所以这样的模式。 :

  • dummyClass1延伸dumDummy
  • dumDummy延伸realyImportantClass

会听之任之。问题是:

  1. 我该如何访问继承类的Ast树?
  2. 第一个想法是将.class转换为第一个继承类,并检查它是否可以完成?
  3. Checkstyle可以从.class文件中获取Ast树吗?

在此先感谢,请提醒我,如果这个问题不清楚,我会很乐意提供尽可能多的信息可能

+0

'[如何编写涉及间接继承的Checkstyle自定义检查?](http://stackoverflow.com/q/7773022/1005481)'的副本。 –

回答

2

你可以做以下检查:

Class<?> dummyClass = DummyClass1.class; 
Class<?> reallyImportantClass = ReallyImportantClass.class; 
if(reallyImportantClass.isAssignableFrom(dummyClass)){ 
    return true; 
}else{ 
    return false; 
} 

请参阅: http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#isAssignableFrom(java.lang.Class)

+0

这是一个拥塞的方法,但是这个检查通过预先提交钩子运行在Svn服务器机器上,所以机器没有相同的环境(类路径等),所以使用它不会是一个选项,支票必须通过checkstyle完成 –

+0

为什么不将它作为单元测试添加失败? – jsurls

+0

时间,如果单元测试失败,构建我们的持续集成工具(Jenkins)将在下一个版本中发送电子邮件给参与项目的所有团队,这对于可能发生在一个或两个文件中的架构违规而言太多了。在每次提交的时候,预提交钩让我们有机会及时向开发人员发出警告,以便他可以在本地进行更改。我也想看看checkstyle有多好:) –

相关问题