Class ExprEditor

  • public class ExprEditor
    extends java.lang.Object
    A translator of method bodies.

    The users can define a subclass of this class to customize how to modify a method body. The overall architecture is similar to the strategy pattern.

    If instrument() is called in CtMethod, the method body is scanned from the beginning to the end. Whenever an expression, such as a method call and a new expression (object creation), is found, edit() is called in ExprEdit. edit() can inspect and modify the given expression. The modification is reflected on the original method body. If edit() does nothing, the original method body is not changed.

    The following code is an example:

     CtMethod cm = ...;
     cm.instrument(new ExprEditor() {
         public void edit(MethodCall m) throws CannotCompileException {
             if (m.getClassName().equals("Point")) {
                 System.out.println(m.getMethodName() + " line: "
                                    + m.getLineNumber());

    This code inspects all method calls appearing in the method represented by cm and it prints the names and the line numbers of the methods declared in class Point. This code does not modify the body of the method represented by cm. If the method body must be modified, call replace() in MethodCall.

    See Also:
    CtClass.instrument(ExprEditor), CtBehavior.instrument(ExprEditor), CtBehavior.instrument(ExprEditor), MethodCall, NewExpr, FieldAccess, CodeConverter
    • Constructor Summary

      Constructor Description
      Default constructor.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      boolean doit​(CtClass clazz, MethodInfo minfo)
      Undocumented method.
      void edit​(Cast c)
      Edits an expression for explicit type casting (overridable).
      void edit​(ConstructorCall c)
      Edits a constructor call (overridable).
      void edit​(FieldAccess f)
      Edits a field-access expression (overridable).
      void edit​(Handler h)
      Edits a catch clause (overridable).
      void edit​(Instanceof i)
      Edits an instanceof expression (overridable).
      void edit​(MethodCall m)
      Edits a method call (overridable).
      void edit​(NewArray a)
      Edits an expression for array creation (overridable).
      void edit​(NewExpr e)
      Edits a new expression (overridable).
      • Methods inherited from class java.lang.Object

        equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait