We present a new approach to inferring types in untyped object-oriented programs with inheritance, assignments, and late binding. It guarantees that all messages are understood, annotates the program with type information, allows polymorphic methods, and can be used as the basis of an optimizing compiler.
Types are finite sets of classes and subtyping is set inclusion.
Using a trace graph, our algorithm constructs a set of conditional type constraints and computes the least solution by least fixed-point derivation.