2012-08-24 2 views
0

Я пытаюсь добавить оператор «assert» к методу.Javassist: Сгенерируйте оператор «assert»

Но я получаю это исключение:

вызвано следующими причинами: Ошибка компиляции: Assert (логическое) не найден в mypackage.MyClassThatIsInstrumented в javassist.compiler.TypeChecker.atMethodCallCore (TypeChecker.java:716) в Javassist. compiler.TypeChecker.atCallExpr (TypeChecker.java:681) на javassist.compiler.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) на javassist.comp iler.ast.Stmnt.accept (Stmnt.java:49) на javassist.compiler.CodeGen.atStmnt (CodeGen.java:350) на javassist.compiler.ast.Stmnt.accept (Stmnt.java:49) at javassist.compiler.CodeGen.atMethodBody (CodeGen.java:291) на javassist.compiler.Javac.compileBody (Javac.java:222) на javassist.CtBehavior.setBody (CtBehavior.java:360) ... еще 30

Любые идеи, как это решить?

ответ

0

Обойти это можно реализовать утверждение как условное:

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

Это в основном эквивалентно

assert expr; 

Теперь это вопрос о том, как вы хотели бы, чтобы ввести его. Если вам нужно утверждать против параметров метода, вы можете использовать метод.inertBefore(); если вы утверждаете результат, вы можете использовать method.insertAfter().

Если необходимо заявление для вставки в тело метода, где-то между заявлениями, то вы можете использовать ExprEditor, чтобы соответствовать требуемой заявление, в котором вы хотите это новое заявление будет введен

Смежные вопросы