0

メソッドに「assert」ステートメントを追加しようとしています。

しかし、私はこの例外を受け取ります:

原因: コンパイル エラー: javassist.compiler の javassist.compiler.TypeChecker.atMethodCallCore(TypeChecker.java:716) の mypackage.MyClassThatIsInstrumented に assert(boolean) が見つかりません.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:156) で javassist.compiler.ast.CallExpr.accept(CallExpr.java:45) で javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:241) で 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) javassist.compiler.CodeGen.atMethodBody(CodeGen.java:291) で javassist.compiler.Javac.compileBody(Javac.java:222) で javassist.CtBehavior.setBody(CtBehavior.java:360) ... 30以上

それを解決する方法はありますか?

4

1 に答える 1

0

回避策は、アサーションを条件として実装することです。

 if(Foo.class.desiredAssertionStatus() && expr) {
   throw new AssertionError();
 }

これは基本的に

 assert expr;

さて、それはあなたがそれをどのように注入したいかの問題です. メソッド パラメーターに対してアサートする必要がある場合は、method.insertBefore(); を使用できます。結果をアサートする場合は、method.insertAfter() を使用できます。

ステートメントをメソッド本体のステートメント間のどこかに挿入する必要がある場合は、ExprEditorを使用して、この新しいステートメントを挿入する必要なステートメントを一致させることができます。

于 2012-10-20T12:34:19.633 に答える