io.imqa.injector.MappingDecoder Maven / Gradle / Ivy
package io.imqa.injector;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import io.imqa.injector.util.Logger;
public class MappingDecoder {
MappingTable mappingTable = new MappingTable();
private boolean isDecoded = false;
private MappingDecoder() {
}
private static MappingDecoder decoder = new MappingDecoder();
public static MappingDecoder getInstance() {
return decoder;
}
public void init(File mappingFile) {
StringBuilder result = new StringBuilder("");
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(mappingFile)));
String s = null;
while ((s = reader.readLine()) != null) {
result.append(s);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mappingTable.parse(result.toString());
isDecoded = true;
}
public boolean isDecoded() {
return isDecoded;
}
public String decodeDesc(String methodDesc) {
if (!isDecoded) return methodDesc;
methodDesc = methodDesc.replace("/", ".");
String paramString = getParamterString(methodDesc);
String[] params = getParameters(paramString);
ClassDesc[] paramsDesc = new ClassDesc[params.length];
ClassDesc returnDesc = new ClassDesc(getReturnString(methodDesc));
for (int i=0; i 0) {
this.type = desc.substring(0, 1);
if (desc.lastIndexOf(";") > 0)
this.desc = desc.substring(1, desc.lastIndexOf(";"));
else
this.desc = desc.substring(1);
}
}
}
}