Section 13.1 of the Java Language Specification suggests ways in which method and field references should be compiled to maximize binary compatibility, and as of version 1.4, javac produces code following these suggestions. As of version 2.2.0, Soot also follows these suggestions, both in its internal Jimple representation, and in the bytecode that it produces as output.

A major consequence of these suggestions, and therefore a major difference from javac 1.3 and earlier versions of Soot, is that method/field references can now refer to methods/fields in classes in which those methods/fields do not actually exist. Earlier versions of Soot used the SootMethod/SootField directly as a method/field reference. In the case of references to methods/fields that do not exist, there is no SootMethod/SootField to refer to. Therefore, as of Soot version 2.2.0, all method/field references have been changed to a newly-introduced type, SootMethodRef/SootFieldRef, which describes only the reference without being tied to an actual method/field. These new types have a resolve() method which returns the actual SootMethod/SootField to which the VM will bind the reference at link time.