阅读检查JavadocMethod的CheckStyle文档我不理解属性logLoadErrors
。
我们被告知
此检查可能需要加载@throws标记中提到的异常类,以检查它们是否为RuntimeExceptions。如果加载类失败,则此属性允许控制checkstyle的错误处理。如果设置为false,则假定类路径配置问题,并且TreeWalker完全停止对类进行操作。如果设置为true(默认值),checkstyle会在javadoc中假定拼写错误或重构问题,并将问题记录在正常的checkstyle报告中(可能会掩盖配置错误)。
此外,属性suppressLoadErrors
描述如下:
当logLoadErrors设置为true时,TreeWalker会完全处理一个类,并显示加载异常作为checkstyle违规的任何问题。当此属性设置为true时,将禁止在logLoadErrors设置为true时生成的违规在checkstyle报告中报告为违规。
我首先想到的是标准配置logLoadErrors = true, suppressLoadErrors = false
如果找不到@throws
标记中提到的Exception类,CheckStyle会发出警告。我试过这个例子:
/**
* 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 :(得分:0)
这是一个非常好的问题,它与Checkstyle工具的一个较为阴影的区域有关。事实上,在JavadocMethodCheck
的父类AbstractTypeAwareCheck
的源代码中,它说:
Checkstyle不是类型感知工具,所有从此类派生的Checks都可能不稳定。
在我看来,这有点悲观,因为如果配置正确,它的逻辑应该工作得很好,但当然它取决于运行时的实际类路径配置。
在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。希望它有所启发!
答案 1 :(得分:0)
此属性已删除,因此从v8.28起不可用。
您可以找到更多信息here。