(Связанный вопрос: компиляторы Java или языки JVM та поддержка goto?)
Я декомпилировал банку (По закону, для отладки целей) и хочу перекомпилировать ее.
Я использовал и JAD и JD, и оба не компилируют из-за goto инструкций
Например.
goto _L1
...
L1:
return true;
Существует ли простой способ (или какой-либо путь) для перекомпиляции его? (Кроме вручную осуществить рефакторинг и удалить goto
)
Нет, нет. В вашем случае ни JD, ни Jad не смогли разделить файлы классов правильно. Заявления «GOTO» - это намек на фактический поток программы.
Вы можете напрямую связаться с командой Decompiler Java напрямую, отправьте в файл классов, где декомпиляция приводит к тому, что декомпиляция приводит к незаконному исходному коду и спросить, является ли ошибка в текущей версии или функции, которая еще не была реализована.
Все декомпиляторы ищут паттерны кода, соответствующие исходным конструкциям Java, и выбирают тот исходный код, который подходит лучше всего.
Очевидно, что имеющийся у вас код не соответствует ни одному шаблону, хранящемуся ни в JAD, ни в JD, поэтому вы получаете некомпилируемый исходный код Java. Скорее всего, это связано с тем, что JAD не развивался активно в течение нескольких лет.
Я бы посоветовал вам взглянуть на проект Soot, в котором есть гораздо более агрессивный декомпилятор.
JAD - действительно потрясающий декомпилятор, JD ... есть некоторые проблемы с операторами "try-catch-finally".
Вы пробовали декомпилятор Stiver ( http://www.reversed-java.com/fernflower )?
Эммануэль, автор JD.