Компиляция - это процесс с потерями, поэтому декомпиляция всегда является попыткой "наилучшего усилия".Байт-код Java имеет необычайно высокий уровень, поэтому декомпиляция Java относительно проста по сравнению с другими языками, но она никогда не будет завершена на 100%.Поэтому вы не должны удивляться, увидев ошибки при повторной компиляции декомпилированного источника.
Если вы хотите работать напрямую с байт-кодом, я бы порекомендовал использовать дизассемблер и ассемблер Кракатау *1004*.Вместо декомпиляции в исходный код Java дизассемблер преобразует байт-код в читаемый человеком формат сборки, который специально разработан для преобразования в байт-код и из него без потерь.Однако для этого требуется хорошее понимание байт-кода Java низкого уровня.