1. A method on an information processing system for automatic replacement of object classes, comprising: performing static analysis on a program containing a plurality of objects in order to determine constraints on transformations that can be applied and to detect unused functionality in one or more of the objects to be replaced; analyzing the plurality of objects to detect usage patterns of functionality in the one or more objects replaced; and generating customized classes based upon the static analysis and the usage patterns detected; wherein generating customized classes based upon the usage patterns detected includes: identifying a customizable container class C with superclass B; creating a class CustomC which contains methods and fields that are identical to those in class C, wherein if B is not customizable, then CustomC's superclass is B, otherwise CustomC's superclass is CustomB; introducing a type C T , and making both C and CustomC a subtype of C T and wherein type C T contains declarations of all methods in C that are not declared in any superclass of C; and introducing a type C ⊥ , and making C ⊥ a subclass of both C and CustomC, wherein type C ⊥ contains no methods, and wherein C T and C ⊥ are intermediate types not provided as output during the generating of custom classes; and determining at least one equivalence class E of declaration elements and expressions that must have a same type.