Java Instrumentation Enginev1.01

Note: this project is no longer maintained. You may wish to check Xerox's AspectJ, which basically performs a similar task, namely Java sourcecode instrumentation according to syntactic rules.


The Java Instrumentation Engine (JIE) is a generic Java source code processor which inserts instrumentation code at specified locations in a given sourcecode. In its basic mode of operation, JIE receives a Java source file and instrumentation instructions, and emits appropriately transformed Java sourcecode.

Sourcecode instrumentation is automated global modification of the sourcecode to include additional operations, usually for testing and analysis purposes. Uses include:

The Java Instrumentation Engine is intended to provide a flexible and extendible tool for performing many instrumentation tasks. It is specific to the Java language, and is written in pure Java code.

JIE was written by Eran Tromer as a joint project of the Technion, Israel Institue of Science and IBM Haifa Research Lab, under the initiative and guidance of Dr. Shmuel Ur. Thanks to Tal Cohen for his assistance in design and peer-review.

JIE may be freely used for academic and non-commercial purposes. JIE is provided on "as is" basis and all warranties are disclaimed. For further information, including commercial use, contact me.

Documentation and downloads

Design document [DOC] 270K
[PostScript.gz] 505K
Implementation and Usage Notes [DOC] 74K
[PostScript.gz] 125K
Executable JAR file 
Requires XML Parser for Java.
[JAR] 288K
JavaDoc sourcecode documentation [ZIP] 836K
[.tgz] 344K
Complete package
Requires XML Parser for Java for execution.
Requires JavaCC and JTB for machine-generated sourcecode.
[ZIP] 1519K
[.tgz] 878K

External tools

JIE relies on several external tools. For legal reasons, they are not included with the JIE package and must be downloaded separately. You will need to extract the files specified below and place them at their proper locations in the directory structure.

I would like to express my gratitude to the authors of these tools. Each of these tools has been extensively evaluated for the purposes of this project, and performed exceptionally well.
Name: XML Parser for Java
Version: 2.0.15 (1999/26/8)
Later versions may not work due to changed API. Contact me if you encounter this problem.
Source: IBM
Use: Reading instrumentation configuration from XML files, during run-time.
Home page:
Used file(s): xml4j.jar
Placement in the JIE directory structure: lib/
Name: Java Compiler Compiler (JavaCC)
Version: 1.1 (1999/08/10)
Source: Sun Microsystems and Metamata
Use: Parser generator, used for machine-generated portions of the JIE sourcecode.
Home page:
Used file(s):
Placement in the JIE directory structure: autogen/bin/
Name: Java Tree Builder (JTB)
Version: 1.1 (1999/01/10)
Source: Kevin Tao <>
Wanjun Wang <>
Dr. Jens Palsberg <>
(Purdue University)
Use: Tree builder and processor for JavaCC, used for machine-generated portions of the JIE sourcecode.
Home page:
Used file(s): jtb.jar
Placement in the JIE directory structure: autogen/bin/
Name: Java 1.2 grammar file for JavaCC
Source: David Williams <>
Use: Input to JavaCC.
Home page:

(C) 1999  Eran Tromer.    Feedback to