Meta gjorde om millioner av Java-kodelinjer til Kotlin – deler oppskrift og verktøy

En av verdens største Android-kodebaser er på god vei til å bli oversatt fra Java til Kotlin. Nå deler Meta hvordan de gjorde det, og opensourcer noen av verktøyene.

Da Facebook- og Instagram-eier Meta lagde sine første Android-apper, var det Java som ble brukt til å lage Android-apper. I 2019 annonserte imidlertid Google at de ikke bare ville støtte Kotlin for Android-apputvikling, men at Kotlin var det foretrukne språket.

For noen år siden bestemte Meta seg derfor for å begynne å skrive om all den gamle Java-koden – rundt 10 millioner kodelinjer – til Kotlin, skriver selskapet i et blogginnlegg.

– Hvorfor ville vi ta ti millioner helt fin Java-kode og skrive det om i et annet språk? Det korte svaret er at utviklere foretrekker Kotlin og er mer produktive i det, sier Eve Matthaey i Meta i en video du kan se nederst i artikkelen.

«Utviklere foretrekker Kotlin og er mer produktive i det.»

Meta er fortsatt bare halvveis i prosessen med å porte hele Java-kodebasen sin over til Kotlin, men deler nå innsikt i hvordan de har fått det til.

Utviklet Kotlinator

Meta skriver i blogginnlegget at de vurderte å bare skrive ny kode i Kotlin, eller eventuelt bare oversette de viktigste filene. Men de landet altså på en full omskrivning av hele kodebasen.

I tillegg til å skrive om selve Android-appene, er målet også å skrive om all kode i avhengigheter som brukes – blant annet for å unngå å blande inn kode som ikke er "null-sikker". Kotlin skiller på typer som kan være null eller ikke, noe som gjør at du ikke risikerer NullPointerException-feilmeldinger.

– All gjenværende Java-kode kan være en kilde til "nullability-kaos", skriver Meta.

For å automatisere omskrivningsjobben lagde Meta et verktøy de har kalt Kotlinator, som er bygget rundt IntelliJs oversetterverktøy J2K – som i seg selv ikke var egnet for en så stor kodebase som den Meta hadde.

Opensourcer verktøy

Det første steget var å gjøre om J2K til et "headless"-verktøy som kan kjøre på en annen maskin (en server), noe som ikke var enkelt siden J2K er veldig tett integrert med IntelliJ.

Du kan lese detaljer om hvordan Kotlinator er bygget opp i Meta-bloggen.

I tillegg måtte de lage verktøy som blant annet analyserer filer og gjør eventuelle manuelle oversettelser. Noen av disse verktøyene ("Kotlin AST Tools") er nå publisert som åpen kildekode her.

I denne videoen forteller Eve Matthaey i Meta hva de har gjort, og hvorfor: