我尝试在方法中添加“assert”语句。
但我得到了这个例外:
引起:编译错误:在mypackage.MyClassThatIsInstrumented中找不到assert(boolean) 在javassist.compiler.TypeChecker.atMethodCallCore(TypeChecker.java:716) at javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:681) at javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:156) at javassist.compiler.ast.CallExpr.accept(CallExpr.java:45) at javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:241) at javassist.compiler.CodeGen.atStmnt(CodeGen.java:329) at javassist.compiler.ast.Stmnt.accept(Stmnt.java:49) 在javassist.compiler.CodeGen.atStmnt(CodeGen.java:350) at javassist.compiler.ast.Stmnt.accept(Stmnt.java:49) at javassist.compiler.CodeGen.atMethodBody(CodeGen.java:291) at javassist.compiler.Javac.compileBody(Javac.java:222) at javassist.CtBehavior.setBody(CtBehavior.java:360) ......还有30多个
任何想法如何解决?
答案 0 :(得分:0)
解决方法是将断言实现为条件:
if(Foo.class.desiredAssertionStatus() && expr) {
throw new AssertionError();
}
这基本上等同于
assert expr;
现在问题就是如何注入它。如果需要断言方法参数,可以使用method.insertBefore();如果你断言结果,你可以使用method.insertAfter()。
如果语句需要插入到方法的主体中,在语句之间的某个位置,则可以使用ExprEditor来匹配您希望注入此新语句的所需语句