2016-09-15 386 views
1

读取CheckStyle文档的检查JavadocMethod我不明白属性logLoadErrors了解CheckStyle检查“JavadocMethod”属性“logLoadErrors”

在那里,我们被告知

该检查可能需要加载在@throws标签提到的异常类,以检查它们是否RuntimeExceptions。如果加载类失败,该属性允许控制checkstyle的错误处理。如果设置为false,则假定类路径配置问题,并且TreeWalker完全停止对类的操作。如果设置为true(缺省值),checkstyle假定javadoc中存在拼写错误或重构问题,并将问题记录在正常的checkstyle报告中(可能会掩盖配置错误)。

当logLoadErrors被设置为true时,TreeWalker全部处理的一类,并且显示与装入异常如CheckStyle的侵犯任何问题:

此外如下属性suppressLoadErrors进行说明。当此属性设置为true时,logLoadErrors设置为true时生成的违规行为将被抑制为在检查样式报告中被报告为违规行为。

我首先想到的是,在标准配置logLoadErrors = true, suppressLoadErrors = false的CheckStyle给出了一个警告,如果在@throws标签中提到的异常类是找不到的。我试过了这个例子:

/** 
    * Returns if the first of two given numbers is smaller than the other one. 
    * @param a Description param a 
    * @param b Description param b 
    * @throws Exception bla 
    * @throws MyException foo 
    */ 
public boolean javadocMethod(int a, int b) throws Exception, MyException { 
    return a < b; 
} 

我想我会得到上运行的CheckStyle因为该类MyException不存在的警告。但我没有得到任何警告。有些人能提供另一个例子吗

回答

0

这是一个非常好的问题,它涉及Checkstyle工具的一个更加陡峭的区域。事实上,在JavadocMethodCheck的父类,AbstractTypeAwareCheck的源代码,它说:

的Checkstyle不知道类型的工具,从这个类派生的所有检查都是潜在的不稳定。

在我看来,这有点悲观,因为如果配置正确,其逻辑应该工作得很好,但当然这取决于运行时的实际类路径配置。

Checkstyle code,选择你问这样的作品(这里简化为伪代码):

protected void logLoadErrorImpl(int lineNo, int columnNo, ...) { 
    if (!logLoadErrors) { 
     // throw an exception 
    } 
    if (!suppressLoadErrors) { 
     // report a Checkstyle violation 
    } 
} 

所以,每当Checkstyle的尝试加载类(在你的情况,MyException),这失败,它将评估这些标志以确定要执行的操作。

如果您信任您的类路径(我们通常会这样做),您想突出显示Javadoc中的错误,因此您应该将suppressLoadErrors设置为false。如果你不相信你的类路径,你可以将suppressLoadErrors设置为true。您绝不会将logLoadErrors更改为默认值true以外的值,因为这会阻止Checkstyle执行其他有意义的操作。

你的榜样其实对我产生警告,如果我从throws条款删除不存在异常:

不编译往往不会被发送到代码质量工具
/** 
* Returns if the first of two given numbers is smaller than the other one. 
* @param a Description param a 
* @param b Description param b 
* @throws Exception bla 
* @throws MyException foo 
*/ 
public boolean javadocMethod(int a, int b) throws Exception { 
    return a < b; 
} 

代码(或仅在以前的本地版本),所以这可能是您的IDE的特殊性。

此答案基于Checkstyle 7.1.1。希望它散发出一些光芒!