Program objects are built atop the BCEL byte code engineering library and provide wrappers for BCEL methods. Finer-level components such as instruction lists are manipulated by calling BCEL methods directly. Code that makes direct BCEL calls must also call the {@link sandmark.program.Object#mark() mark()} method of the enclosing program object to inform it of the change.
Program objects support caching by associating a version counter with each object. The counter is incremented automatically by the methods in this package or manually by calling the {@link sandmark.program.Object#mark() mark()} method. The caching system is used to improve performance by this package and by external packages such as {@link sandmark.metric metrics}.
The methods in this package act locally: For example, renaming a method does not alter any references to the method. Some heavyweight methods with global effect are provided in the {@link sandmark.program.util sandmark.program.util} package.