Инструмент декомпиляции Java / Kotlin и библиотека AST.
Основной целью этой библиотеки было построить полное абстрактное дерево источника (AST) для файла класса Java, включая узлы для всех инструкций. Он построен из вершины ASM, который имеет элементы AST для методов, но останавливается там и предоставляет простой список OpCode.
Хотя это не так полезно для изменения источника и реконструкции файла класса Java, это заполнение AST очень полезно для декомпилирования и для анализа кода, где вы хотели бы искать шаблоны на операторе, а не на уровне OPCODE.
Для поддержки и обсуждения см. В нашем чате разработки/поддержки на irc.esper.net в канале #Decompiler.
В настоящее время поддержка Kotlin довольно новая, и все функции не поддержаны, а ошибки в выводе следует ожидать.
java -jar Despector.jar <--config=[path]> <--lang=[java|kotlin]> [sources...] [destination]
--config= позволяет определить файл конфигурации для определенных настроек декомпиляции.--lang= вынуждает выход на определенном языке. Нормальное поведение состоит в том, чтобы попытаться определить исходный язык файлов класса из его содержимого.Этот декомпилятор все еще находится под тяжелым развитием, и проблемы произойдут. Если вы столкнетесь с каким -либо неверным выводом, откройте проблему в The Tracker. Как минимум включать ожидаемый и встречающийся выход. Скомпилированный класс, демонстрирующий проблему, также будет очень полезным.
Запросы на функции всегда приветствуются и могут быть сделаны в The The Tracker с максимально возможной информацией.
Вот пример файла конфигурации. Это необязательно, но позволяет управлять настройками декомпиляции, такими как форматирование. Если вы хотите, чтобы больше настройки откройте запрос функции в The Change Tracker. Файл конфигурации использует формат конфигурации Hocon.
# Despector decompiler configuration:
# Cleanup configuration
cleanup {
# Cleanup operations to apply before emitting
operations=[]
}
# Targeted cleanup operations
"cleanup_sections"=[]
# Emitter configuration
emitter {
# Whether to emit synthetic members
emit-synthetics=false
# The path of the formatter configuration
formatting-path="run/eclipse_formatter.xml"
# One of: eclipse,intellij
formatting-type=eclipse
# The path of the import order configuration
import-order-path="run/eclipse.importorder"
}
# Kotlin specific configuration
kotlin {
# Whether to replace strings containing new lines with raw strings
replace-multiline-strings=true
}
# Prints out opcodes of a method when it fails to decompile.
print-opcodes-on-error=true