我想通过其检查以下案例的Web界面向SonarQube引入新的自定义XPath规则
try{
doStuff();
} catch (SomeException e) {
handleException(e);
}
应突出显示。而
try{
doStuff();
} catch (SomeException e) {
LOG.info(e.getMessage() + " other stuff");
handleException(e);
}
应该是理想的形式。知道如何通过XPath表达它吗?
答案 0 :(得分:2)
我猜你正在撰写有关PMD规则的文章。这是XPath,它匹配所有catch
语句,这些语句没有在任何地方调用的方法LOG.info
:
//CatchStatement[not(descendant::PrimaryPrefix/Name[@Image='LOG.info'])]
例如,对于该代码:
import java.util.logging.Logger;
public class Test {
private Logger LOG = Logger.getLogger("");
public void main(String[] args) {
try {
doStuff();
} catch (SomeException e) { // HERE VIOLATION
handleException(e);
}
try {
doStuff();
} catch (SomeException e) {
LOG.info(e.getMessage() + " other stuff");
handleException(e);
}
}
}
它会在第9行(} catch (SomeException e) { // HERE VIOLATION
)发现规则违规,因为该行是不包含LOG.info
的catch语句。
我建议您使用PMD设计器应用程序编写更复杂的PMD。它生成java代码的抽象语法树,并提供编写和检查XPath规则的可能性。你可以找到它here