API evolution is the process of migrating an inter-library interface from one version to another. Such a migration requires checking that all libraries which interact through the interface be updated. Libraries can be updated one by one if there is a transition period during which both updated and non-updated libraries can communicate through some transitional version of the interface. Static type checking can verify that all libraries have been updated, and thus that a transition period may end and the interface be moved forward safely. A fine-grained checker can do so for individual changes to an interface, thus allowing interface changes to be interleaved. Anti-deprecation is a novel type-checking feature that allows static checking for more interface evolutions periods than deprecation alone. Anti-deprecation, along with the more familiar deprecation, is formally studied as an extension to Featherweight Java. This study finds weaknesses in current popular deprecation checkers.
[Full paper (pdf)]
Presented at FOOL/WOOD; Saturday, 20 January 2007; Nice, France