Google a publié J2ObjC, un traducteur qui convertit du code Java en Objective C pour iPhone et iPad par exemple. L'idée derrière J2ObjC est de permettre aux développeurs de partager du code non-UI plus facilement entre des périphériques Android ou des applications GWT qui utilisent Java avec des appareils iOS utilisant Objective C. Le traducteur peut traiter du code Java 6 qui est décrit comme "actuellement entre une phase alpha et bêta de qualité."
Le processus de traduction consiste actuellement en la conversion de :
- java.lang.Object à NSObject
- boolean à BOOL
- byte à char
- Les variables d'instance deviennent des propriétés
- Les classes inner et anonymous sont converties en classes spécialement nommées pour ces cas.
- Les interfaces deviennent des protocoles
- Les tests JUnit sont converties en une version assez spéciale
- Un fichier de mapping définit ensuite la conversion des méthodes Java en méthodes Foundation iOS.
Ce processus est documenté dans le Design Notes et permettrait par exemple de transformer ceci :
int getLength(Listlist, int index) { return list.get(index).length(); }
en ceci :
- (int)getLengthWIthJavaUtilList:(JavaUtilList *)list withInt:index { return [(NSString *) [list getWithInt:index] length]; }
Comme le code Java est garbage collected, le traducteur doit également gérer le mapping dans son ensemble. Les développeurs peuvent spécifier si celui-ci utilise le comptage de référence (valeur par défaut), le garbage collection avec libgc (en mettant --use-gc) ou bien l'Automatic Resource Counting (ARC en mettant --use-arc). Les développeurs espèrent mettre l'ARC par défaut dans les prochaines releases mais n'ont pas l'intention de développer une interface utilisateur multi-plateforme et préfèrent se concentrer sur la traduction de la logique applicative et d'autres éléments non-UI.
Le traducteur peut être intégré dans le workflow de développement de l'IDE Xcode 4 ou bien avec Maven et Make. J2ObjC est disponible sur Google Code avec la documentation et les guides.
MISES A JOUR DE L'ARTICLE |