Se a constante for de tipo primitivo (private static final int), então ela normalmente será substituída, pelo compilador, pelo seu valor. (Isso não costuma ocorrer no caso de constantes de tipo objeto, como Strings, mas não há nada que proíba o compilador de usar o valor e não a constante em si).
Isso é esperado, porque foi o próprio compilador que faz isso (não é o descompilador que fez isso).
E é isso que quebra as pernas de um monte de gente boa mas ingênua - acham que constantes são coisas que podem ser mudadas, como arquivos de configuração, e tentam trocar uma classe (arquivo .class) mudando só essas constantes. O problema é que o valor das constantes é que foi usado na compilação, então se você só mudar o .class, sem recompilar seu programa, pode acabar usando valores antigos.
A descompilação pode ter problemas com:
a) Blocos try/catch - os descompiladores costumam se confundir com esses blocos;
b) Generics - a informação de generics é quase toda perdida na compilação, exceto em alguns pontos;
c) Algumas estruturas de controle um pouco mais complicadas.
d) Código “sintético” - por exemplo, classes internas anônimas costumam gerar bastante código sintético para acessar variáveis privadas das classes mais externas.
Portanto, eu aconselho a você aprender um pouco sobre bytecodes e o “javap”.
Pode ser que você tenha alguns métodos que devam ser descompilados “manualmente” já que o descompilador se perdeu.