Overview | Package | Class | Use | Tree | Deprecated | Index
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## javassist.expr
Class ExprEditor

    java.lang.Object
      |
      +--javassist.expr.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)`, `CtMethod.instrument(ExprEditor)`, `CtConstructor.instrument(ExprEditor)`, `MethodCall`, `NewExpr`, `FieldAccess`, `CodeConverter`

Constructor Summary
`ExprEditor()` Default constructor.

Method Summary
`boolean` | `doit(CtClass clazz, MethodInfo minfo)` Undocumented method.
`void` | `edit(Cast c)` Edits an expression for explicit type casting (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(NewExpr e)` Edits a `new` expression (overridable).

Methods inherited from class java.lang.Object
`equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### ExprEditor

    public ExprEditor()

  Default constructor. It does nothing.

Method Detail

### doit

    public boolean doit(CtClass clazz,
                        MethodInfo minfo)
                 throws CannotCompileException

  Undocumented method. Do not use; internal-use only.

    `CannotCompileException`

### edit

    public void edit(NewExpr e)
              throws CannotCompileException

  Edits a `new` expression (overridable). The default implementation performs nothing.

  Parameters:
    `e` - the `new` expression creating an object.
    `CannotCompileException`

### edit

    public void edit(MethodCall m)
              throws CannotCompileException

  Edits a method call (overridable). The default implementation performs nothing.

    `CannotCompileException`

### edit

    public void edit(FieldAccess f)
              throws CannotCompileException

  Edits a field-access expression (overridable). Field access means both read and write. The default implementation performs nothing.

    `CannotCompileException`

### edit

    public void edit(Instanceof i)
              throws CannotCompileException

  Edits an instanceof expression (overridable). The default implementation performs nothing.

    `CannotCompileException`

### edit

    public void edit(Cast c)
              throws CannotCompileException

  Edits an expression for explicit type casting (overridable). The default implementation performs nothing.

    `CannotCompileException`

### edit

    public void edit(Handler h)
              throws CannotCompileException

  Edits a catch clause (overridable). The default implementation performs nothing.

    `CannotCompileException`

Overview | Package | Class | Use | Tree | Deprecated | Index
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Javassist, a Java-bytecode translator toolkit. Copyright (C) 1999-2003 Shigeru Chiba. All Rights Reserved.