Interprocedural Type Propagation for Object-Oriented Languages