Procyon mistranslates StringConcatFactory (Java 9+) string concatenation, silently producing wrong output. The decompiled code compiles, so the defect is only visible at runtime.
Minimal reproduction (compiled with javac --release 11):
public class T {
public static void main(String[] a) {
char c = 'Z';
System.out.println("c=" + c + "x");
}
}
Procyon 0.6.0 decompiles the body to:
System.out.println("c=" + 90);
i.e. it constant-folds the char to its integer value 90 and drops the trailing + "x" operand.
- Expected output:
c=Zx
- Actual output (after recompiling Procyon's source):
c=90
CFR and Vineflower decompile the same class correctly. Found by round-trip testing (compile → decompile → recompile → compare output).
Procyon mistranslates
StringConcatFactory(Java 9+) string concatenation, silently producing wrong output. The decompiled code compiles, so the defect is only visible at runtime.Minimal reproduction (compiled with
javac --release 11):Procyon 0.6.0 decompiles the body to:
i.e. it constant-folds the
charto its integer value90and drops the trailing+ "x"operand.c=Zxc=90CFR and Vineflower decompile the same class correctly. Found by round-trip testing (compile → decompile → recompile → compare output).