首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javassist:生成"assert“语句

Javassist:生成"assert“语句
EN

Stack Overflow用户
提问于 2012-08-25 05:05:04
回答 1查看 131关注 0票数 0

我尝试将"assert“语句添加到方法中。

但是我得到了一个例外:

原因:编译错误:在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)的mypackage.MyClassThatIsInstrumented中找不到assert(boolean)在javassist.compiler.ast.Stmnt.accept(Stmnt.java:49) at 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多

有什么办法解决这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2012-10-20 20:34:20

一种解决方法是将断言实现为条件:

代码语言:javascript
复制
 if(Foo.class.desiredAssertionStatus() && expr) {
   throw new AssertionError();
 }

这基本上等同于

代码语言:javascript
复制
 assert expr;

现在的问题是你想如何注入它。如果需要对方法参数进行断言,可以使用method.insertBefore();如果要对结果进行断言,可以使用method.insertAfter()。

如果需要将语句插入到方法的主体中,位于语句之间的某个位置,则可以使用ExprEditor来匹配要注入新语句的所需语句

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12116638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档