Introduction
Si vous avez déjà essayé de migrer une classe depuis Java vers Kotlin, vous savez que l’outil fourni par Android Studio n’est pas suffisant. Même si votre nouveau fichier semble correctement converti, l’outil ne sera pas capable de vous éviter certains crashs et tout votre historique GIT aura disparu. Cet article va vous aider à effectuer cette migration sereinement et à conserver votre précieux historique GIT. Il ne sera cependant pas discuté ici des avantages ou inconvénients d’une telle migration par rapport à Java, il existe déjà sur internet de nombreux articles traitant de ce sujet.
Buts de la migration
Si nous voulons considérer notre migration comme étant un succès, nous pouvons fixer comme objectifs :
- Aucune différence notable dans l’application en terme de fonctionnalités et de taux de crash
- La conservation des tests unitaires existants et le même pourcentage de coverage
- La conservation de l’historique git des fichiers convertis
Avant de migrer
Migrer un projet depuis Java vers Kotlin d’un seul coup peut représenter une tâche très longue dans un contexte Agile, mais la méthode présentée vous permettra de le faire à votre propre rythme en découpant en autant de tâches que vous le souhaitez. Cependant, gardez en tête que migrer un fichier quand bon vous semble n’est pas possible car chaque étape de migration nécessitant une étape d’initialisation et de conclusion.
Procédure recommandée
Il y a plusieurs manières de faire une telle migration correctement, en voici un exemple pour ne rien oublier:
Convertir un fichier Java en Kotlin
Pour convertir un fichier Java en Kotlin, vous pouvez utiliser l’outil fourni par Android Studio, sélectionnez votre fichier Java puis dans Android Studio Menu -> Code -> Convert Java File to Kotlin File. Mais ce n’est pas tout. Android Studio a maintenant converti automatiquement votre fichier en Kotlin, mais il n’utilisera pas la syntaxe propre à Kotlin lorsque cela est possible, pour cela vous devez manuellement :
- Remplacez
par
- Remplacez !! par ?. Ce n’est pas obligatoire, mais cela permet d’éviter beaucoup de crashs.
- Remplacez
par
ou si l’instruction en cas de null ne fait qu’une seule ligne
- Remplacez
par
Pour résumer : il est mieux d’utiliser les fonctions de Kotlin autant que vous le pourrez.
Conserver l'historique Git
Simplement convertir un fichier Kotlin vous fera perdre les changements effectués sur celui-ci depuis sa création, parce que GIT considère que vous avez supprimé l’ancien fichier Java et recréé un nouveau en Kotlin, il n’est pas capable de faire le lien entre les deux. Pour l’aider, vous devrez faire les deux premières étapes de la partie Procédure recommandée.
Après cela, vous devriez vous retrouver avec ces commits :
Copiez le SHA-1 du premier commit. Ensuite dans le terminal d’Android Studio tapez :
Le terminal devrait vous présenter un fichier avec cette structure :
Maintenant vous pouvez squashez vos commits sur le premier, pour cela, pour chaque ligne sauf la première, remplacez “pick” par “s” (pour squash) :
GIT devrait essayer de rebase et squash vos commits. Si vous avez des conflits à cette étape, résolvez-les et continuez le rebase.
GIT affiche maintenant :
Ce sera le nom du commit squashé. Répétez l’étape précédente jusqu’à voir le message de succès.Maintenant si vous essayez de regarder l’historique GIT de votre fichier, il se peut que vous ne voyez pas tous les commits… Pourquoi ? Parce que le squash des commits semble perturber le cache du GIT d’Android Studio, pour voir ces précieux commits et vérifier que tout s’est bien passé, il est recommandé d’invalider ce cache en faisant : Android Studio Menu -> File -> Invalidate Caches / Restart.
Tips
Compile compile compile
Essayez de compiler aussi souvent que vous pouvez lorsque vous convertissez les Modules et Components, cela vous aidera à identifier les fichiers qui provoquent des erreurs de compilation.
Les binds des Dagger Modules
Si vous utilisez des binds dans vos Modules Java :
Vous devez alors rendre votre module abstrait, créer une classe interne ProvideModule Module comme ceci :
Les injections nommées avec Dagger
En Java il est possible de faire :
Mais pour l’utiliser en Kotlin il faudra faire :
Ne renommez pas avant de squasher
Faites attention à ne pas renommer le dossier src avant de squasher, GIT risque de perdre l’historique de vos fichiers !
Git panic
Si vous vous trompez dans vos commits pendant la conversion et que vous souhaitez revenir en arrière, pensez à faire :
puis
x étant le numéro du commit affiché avec reflog
Conclusion
Si vous avez tout fait correctement vous devriez vous retrouver avec un code Kotlin propre, une application fonctionnelle, un historique GIT complet et des des tests unitaires avec le même coverage. Souvenez-vous de faire ça à votre propre rythme et de ne pas sous-estimer la complexité d’une telle migration, qui peut être difficile à effectuer au début. Mais rassurez-vous, le jeu en vaut la chandelle et pouvoir utiliser la puissance de Kotlin en vaut la peine !
Vous avez un projet de migration de votre application Android de Java vers Kotlin ? Contactez-nous afin de réaliser cette migration de la meilleure manière avec nos experts via notre formulaire de contact.