|Future versions of Java will include support for parametric polymorphism,
or generic classes. This will bring many benefits to Java programmers, not
least because current Java practise makes heavy use of pseudo-generic
classes. Such classes (for example, those in package java.util) have
logically generic specifications and documentation, but the type system
cannot prove their patterns of use to be safe.
This work aims to solve the problem of automatic translation of Java source
code into Generic Java (GJ) source code. We present two algorithms that
together can be used to translate automatically a Java source program into
a semantically-equivalent GJ program with generic types.
The first algorithm infers a candidate generalisation for any class, based
on the methods of that class in isolation. The second algorithm analyses
the whole program; it determines a precise parametric type for every value
in the program. Optionally, it also refines the generalisations produced
by the first analysis as required by the patterns of use of those classes
in client code.