deobber: improve dump mappings

This commit is contained in:
ThatGamerBlue
2020-04-03 20:41:44 +01:00
parent f0b762c5f2
commit e3de91ae8b

View File

@@ -24,13 +24,13 @@
*/ */
package net.runelite.deob.deobfuscators.mapping; package net.runelite.deob.deobfuscators.mapping;
import java.io.File;
import java.io.IOException;
import java.time.Instant;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray; import com.google.gson.JsonArray;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import java.io.File;
import java.io.IOException;
import java.time.Instant;
import net.runelite.asm.ClassFile; import net.runelite.asm.ClassFile;
import net.runelite.asm.ClassGroup; import net.runelite.asm.ClassGroup;
import net.runelite.asm.Field; import net.runelite.asm.Field;
@@ -106,6 +106,44 @@ public class MappingDumper
Number getter = DeobAnnotations.getObfuscatedGetter(f); Number getter = DeobAnnotations.getObfuscatedGetter(f);
String fieldType = typeToString(type); String fieldType = typeToString(type);
String var0 = fieldType.replace("[", "").replace("]", "");
if (var0.length() == 1 && !Character.isLowerCase(var0.codePointAt(0)))
{
// primitive array
String realType;
int arrayCount = (int) fieldType.codePoints().filter((i) -> i == '[').count();
switch (var0)
{
case "B":
realType = Byte.TYPE.getName();
break;
case "I":
realType = Integer.TYPE.getName();
break;
case "S":
realType = Short.TYPE.getName();
break;
case "J":
realType = Long.TYPE.getName();
break;
case "Z":
realType = Boolean.TYPE.getName();
break;
case "F":
realType = Float.TYPE.getName();
break;
case "D":
realType = Double.TYPE.getName();
break;
case "C":
realType = Character.TYPE.getName();
break;
default:
realType = Void.TYPE.getName();
break;
}
fieldType = realType + "[]".repeat(arrayCount);
}
if (f.isStatic()) if (f.isStatic())
{ {
@@ -117,14 +155,14 @@ public class MappingDumper
tmp = mBuilder; tmp = mBuilder;
} }
tmp.append("\t").append(String.format(GAP, fieldType)).append(String.format(GAP, exportName)) tmp.append("\t").append(String.format("%s ", fieldType))
.append(className).append(".").append(fieldName); .append(String.format("%s.%s=", implName, exportName))
.append(className).append(".").append(fieldName);
if (getter != null) if (getter != null)
{ {
tmp.append(" * ").append(getter).append("\n"); tmp.append(" * ").append(getter).append("\n");
} }
else else
{ {
tmp.append("\n"); tmp.append("\n");
@@ -152,6 +190,44 @@ public class MappingDumper
} }
String returnType = typeToString(m.getDescriptor().getReturnValue()); String returnType = typeToString(m.getDescriptor().getReturnValue());
String var0 = returnType.replace("[", "").replace("]", "");
if (var0.length() == 1 && !Character.isLowerCase(var0.codePointAt(0)))
{
// primitive array
String realType;
int arrayCount = (int) returnType.codePoints().filter((i) -> i == '[').count();
switch (var0)
{
case "B":
realType = Byte.TYPE.getName();
break;
case "I":
realType = Integer.TYPE.getName();
break;
case "S":
realType = Short.TYPE.getName();
break;
case "J":
realType = Long.TYPE.getName();
break;
case "Z":
realType = Boolean.TYPE.getName();
break;
case "F":
realType = Float.TYPE.getName();
break;
case "D":
realType = Double.TYPE.getName();
break;
case "C":
realType = Character.TYPE.getName();
break;
default:
realType = Void.TYPE.getName();
break;
}
returnType = realType + "[]".repeat(arrayCount);
}
String[] paramTypes = new String[signature.size()]; String[] paramTypes = new String[signature.size()];
for (int i = 0; i < paramTypes.length; i++) for (int i = 0; i < paramTypes.length; i++)
{ {
@@ -168,12 +244,51 @@ public class MappingDumper
tmp = mBuilder; tmp = mBuilder;
} }
tmp.append("\t").append(String.format(GAP, returnType)).append(String.format(GAP, exportName)) tmp.append("\t").append(String.format("%s ", returnType))
.append(className).append(".").append(methodName); .append(String.format("%s#%s=", implName, exportName))
.append(className).append(".").append(methodName);
tmp.append("("); tmp.append("(");
for (int i = 0; i < paramTypes.length; i++) for (int i = 0; i < paramTypes.length; i++)
{ {
String var1 = paramTypes[i].replace("[", "").replace("]", "");
if (var1.length() == 1 && !Character.isLowerCase(var1.codePointAt(0)))
{
// primitive array
String realType;
int arrayCount = (int) paramTypes[i].codePoints().filter((i2) -> i2 == '[').count();
switch (var1)
{
case "B":
realType = Byte.TYPE.getName();
break;
case "I":
realType = Integer.TYPE.getName();
break;
case "S":
realType = Short.TYPE.getName();
break;
case "J":
realType = Long.TYPE.getName();
break;
case "Z":
realType = Boolean.TYPE.getName();
break;
case "F":
realType = Float.TYPE.getName();
break;
case "D":
realType = Double.TYPE.getName();
break;
case "C":
realType = Character.TYPE.getName();
break;
default:
realType = Void.TYPE.getName();
break;
}
paramTypes[i] = realType + "[]".repeat(arrayCount);
}
tmp.append(paramTypes[i]); tmp.append(paramTypes[i]);
if (i == paramTypes.length - 1) if (i == paramTypes.length - 1)
@@ -183,7 +298,6 @@ public class MappingDumper
tmp.append(" = ").append(garbageValue); tmp.append(" = ").append(garbageValue);
} }
} }
else else
{ {
tmp.append(", "); tmp.append(", ");