Package javassist.expr

# Class ExprEditor

java.lang.Object
javassist.expr.ExprEditor

public class ExprEditor extends 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

Constructors
Constructor
Description
`ExprEditor()`
Default constructor.

## Method Summary

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`

## Constructor Details

### ExprEditor

public ExprEditor()
Default constructor. It does nothing.

## Method Details

### doit

public boolean doit(CtClass clazz, MethodInfo minfo) throws CannotCompileException
Undocumented method. Do not use; internal-use only.

Throws:
  `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.
Throws:
  `CannotCompileException`

### edit

public void edit(NewArray a) throws CannotCompileException
Edits an expression for array creation (overridable). The default implementation performs nothing.

Parameters:
  `a` - the `new` expression for creating an array.
Throws:
  `CannotCompileException`

### edit

public void edit(MethodCall m) throws CannotCompileException
Edits a method call (overridable). The default implementation performs nothing.

Throws:
  `CannotCompileException`

### edit

public void edit(ConstructorCall c) throws CannotCompileException
Edits a constructor call (overridable). The constructor call is either `super()` or `this()` included in a constructor body. The default implementation performs nothing.

Throws:
  `CannotCompileException`
See Also:
  - `edit(NewExpr)`

### 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.

Throws:
  `CannotCompileException`

### edit

public void edit(Instanceof i) throws CannotCompileException
Edits an instanceof expression (overridable). The default implementation performs nothing.

Throws:
  `CannotCompileException`

### edit

public void edit(Cast c) throws CannotCompileException
Edits an expression for explicit type casting (overridable). The default implementation performs nothing.

Throws:
  `CannotCompileException`

### edit

public void edit(Handler h) throws CannotCompileException
Edits a catch clause (overridable). The default implementation performs nothing.

Throws:
  `CannotCompileException`