所以我们要检查一个特定的方法,比如某些java类中的findOne(),如果它抛出一个特定的异常。如果它没有抛出异常,那么就要在方法级别报告一个问题。
我们可以使用
public void visitThrowStatement(ThrowStatementTree tree)
但只有当有一个抛出异常的语句时才调用它,我们如何检查它是否被抛出?
答案 0 :(得分:1)
您需要在访问者中保留一个上下文,以了解您当前正在访问throw语句的方法。
基本上,如果你在findOne
方法内,那么你将访问该方法的代码,如果它有正确的抛出语句,那么不要提出问题,但如果没有那么提出一个问题。
某些事情(这是伪代码,当然应该进行调整,但这将解释这个概念):
LinkedList<MethodTree> stack;
int throwCount = 0;
void visitMethod(MethodTree methodTree) {
stack.push(methodTree);
throwCount = 0;
super.visitMethod(methodTree);
if(throwCount == 0) {
//raise Issue
}
}
void visit throwStatement(ThrowStatementTree tree) {
if(isCorrectExceptionThrown(tree)) {
throwCount++;
}
}