Towards Automated Library Migrations with Error Prone and Refaster

Rick Ossendrijver, Stephan Schroevers, Clemens Grelck
2021 Zenodo  
Software projects use a significant number of external libraries to speed up development and deliver high-quality software in a cost-effective way. Requirements placed on external libraries can change over time and libraries may cease to be maintained or evolve in incompatible ways. Consequently, a library may no longer be fit for purpose and require replacement. Such a library migration is generally performed manually and may be complex, error-prone, and time-consuming, especially for large
more » ... ebases. It follows that an automated approach to library migrations is preferred. We consider the suitability of Error Prone and Refaster, two Google tools capable of refactoring Java programs, for automated library migration. The former is a compiler plugin capable of emitting diagnostics and suggested code fixes, while the latter exposes a Java templating domain-specific language (DSL) with before-and-after rewrite semantics. We propose extensions that improve the accuracy with which Refaster templates are matched, as well as the correctness of their replacement operations. We additionally propose a set of Error Prone extensions which facilitate rewriting method return types. Lastly, several generalizations and improvements of existing Error Prone plugins are discussed. Together these improvements enable a new class of rewrite operations, especially relevant to library migrations. As a case study, the reactive programming library RxJava 2 is migrated to Project Reactor. We consider a private industrial codebase as well as an actively developed open source codebase. We show that using out-of-the-box Error Prone and Refaster full migration of RxJava 2-referencing files is possible in only 35% and 0% of such files, respectively. Using the proposed extensions, we manage to fully migrate an additional 35% of the RxJava 2-referencing files in the former codebase, and an initial 39% of such files in the latter codebase.
doi:10.5281/zenodo.5801921 fatcat:ijd4fueohrh73hwtp2doqzpp5e