Основная проблема заключается в том, что байт-код Java не имеет никакого представления о логических значениях, байтах, символах или шортах (за исключением сигнатур типов).Все локальные переменные с этими типами вместо этого скомпилированы в int.Логические значения true и false компилируются в 1
и 0
соответственно.
Это означает, что декомпилятор должен угадать, должна ли данная локальная переменная быть логической или целочисленным типом.В этом случае значение 20
сохраняется в переменной, которая никогда не будет храниться в переменной логического типа в коде Java, поэтому декомпилятору должно быть легко угадать, что это целочисленный тип, основанный на контексте,Но похоже, что булев гадатель Fernflower не так уж и искушен.
Для чего бы это ни стоило, это сложная проблема по своей сути.Особенно, если учесть, что байт-код не-Java не должен следовать тем же шаблонам, что и Java.Для байт-кода вполне допустимо использовать одну и ту же переменную как в целочисленном, так и в логическом контекстах. Декомпилятор Кракатау имеет довольно сложный шаг вывода для предположения, должны ли переменные быть логическими, или нет, но в подобных ситуациях все равно будет неправильно.