unimined / JvmDowngrader

Downgrades modern java bytecode to older versions. at either compile or runtime.
https://jvmdowngrader.wagyourtail.xyz
Other
48 stars 5 forks source link

String concatenation failing with bytes #1

Closed Ran-Mewo closed 3 months ago

Ran-Mewo commented 3 months ago

Info: It's attempting to downgrade Java 21 into Java 8

String concatenating bytes turns something like

public static String toString(byte level, int x, int z) { 
    return level + "*" + x + "," + z;
}

into

public static String toString(byte level, int x, int z) {
    return jvmdowngrader$concat(level, x, z);
}

private static String jvmdowngrader$concat(byte var0, int var1, int var2) {
    return new StringBuilder().append(var0).append("*").append(var1).append(",").append(var2).toString();
}

This looks fine until you look at the bytecode

INVOKEVIRTUAL java/lang/StringBuilder.append (B)Ljava/lang/StringBuilder;

StringBuilder.append(byte) doesn't exist... and so it gives an error of java.lang.NoSuchMethodError: 'java.lang.StringBuilder java.lang.StringBuilder.append(byte)'

wagyourtail commented 3 months ago

:sunglasses: image