tterrag1098

Untitled

Aug 18th, 2018
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.46 KB | None | 0 0
  1. private static class MemberInfoParam extends MemberInfo {
  2.  
  3. private final int paramID;
  4. private final String type;
  5.  
  6. public MemberInfoParam(ISrgMapping srg, IMCPMapping mcp, int paramID) {
  7. this(srg, mcp, paramID, findType(srg, paramID));
  8. }
  9.  
  10. public static String findType(ISrgMapping method, int param) {
  11. int i = 1;
  12. String desc = method.getDesc();
  13. Matcher paramMatcher = DESC_PARAM.matcher(desc.substring(1, desc.lastIndexOf(')')));
  14. while (paramMatcher.find()) {
  15. if (i == param) {
  16. return paramMatcher.group();
  17. }
  18. i++;
  19. }
  20. throw new IllegalArgumentException("Could not find type name. Method: " + method + " param: " + param);
  21. }
  22.  
  23. public MemberInfoParam(ISrgMapping srg, IMCPMapping mcp, int paramID, String type) {
  24. super(srg, mcp);
  25. this.paramID = paramID;
  26. this.type = getReadableName(type);
  27. }
  28.  
  29. private static String getReadableName(String className) {
  30. String ret = className;
  31.  
  32. int arrayDimensions = 0;
  33. while (ret.startsWith("[")) {
  34. ret = ret.substring(1);
  35. arrayDimensions++;
  36. }
  37.  
  38. if (className.startsWith("L")) {
  39. ret = className.replaceAll("^L", "").replaceAll(";$", "").replaceAll("\\/", ".");
  40. } else {
  41. if (ret.length() != 1) {
  42. throw new IllegalArgumentException("Invalid descriptor \"" + className + "");
  43. }
  44. ret = getPrimitiveName(ret.charAt(0));
  45. }
  46. for (int i = 0; i < arrayDimensions; i++) {
  47. ret += "[]";
  48. }
  49. return ret;
  50. }
  51.  
  52. private static String getPrimitiveName(char desc) {
  53. switch(desc) {
  54. case 'B': return "byte";
  55. case 'C': return "char";
  56. case 'D': return "double";
  57. case 'F': return "float";
  58. case 'I': return "int";
  59. case 'J': return "long";
  60. case 'S': return "short";
  61. case 'Z': return "boolean";
  62. default: throw new IllegalArgumentException("Invalid primitive descriptor '" + desc + "'");
  63. }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment