(question connexe: compilateurs Java ou JVM Langues qui supportent GOTO? )
J'ai décompilé un pot (légalement, à des fins de débogage) et je veux le recompiler. P>
J'ai utilisé à la fois Jad et JD et les deux Ne compilez pas en raison d'instructions Goto p>
par exemple p> y a-t-il un moyen facile (ou de quelque manière que ce soit) de le recompiler? (Sauf refacteur manuellement et retirez le goto code> 's) p>
p>
4 Réponses :
Non, il n'y a pas. Dans votre cas, ni JD ni Jad n'ont pu décompiler correctement les fichiers de classe. Les déclarations «goto» sont un indice sur le flux de programme actuel. P>
Vous pouvez contacter directement l'équipe Java Decompiler, envoyer dans un fichier de classe où la décompilation entraîne un code source illégal et demander s'il s'agit d'un bogue dans la version actuelle ou une fonctionnalité qui n'a pas encore été mise en œuvre. P>
Tous les décompileurs recherchent des modèles de code correspondant aux constructions source Java et choisissent la source qui correspond au mieux. P>
Apparemment, le code que vous avez n'est pas conforme à aucun motif stocké dans JAD ou JD, de sorte que vous obtenez une source java inabiletable. Ceci est probablement parce que Jad n'a pas été activement développé depuis plusieurs années. P>
Je vous suggérerais de regarder le projet SOOT qui a un décompiler beaucoup plus agressif. P>
Jad est un décompiler vraiment incroyable, JD ... avoir des problèmes avec les déclarations "try-attraper-enfin". P>
Avez-vous essayez le décompiler de Stiver ( http://www.reversed-java.com/fernflower )? P>
Emmanuel, auteur de JD. P>
Je recommanderais un décompiler moderne - comme CFR ou Fernflower! P>
J'ai mis en ligne 6 décompileurs JAVA: JADX, FAST et avec support Android, CFR (Soutien Java 8), JDCore (très rapide), Procyon, Fernflower et Jad (très rapide, mais obsolètes). P>
On peut les utiliser sans installation ici: http://www.javadecompilers.com/ P >
Il est possible de mettre en œuvre
goto code> en utilisant des exceptions, mais ce ne serait pas joli. Certaines autres astuces sont collectées ici: Stackoverflow.com / Questions / 2430782 / ...
Que diriez-vous de remplacer simplement
goto l1 code> avec
retourne vrai; code>? :)