| 1 package sli.kim.classfile; 2 3 7 public class Signature { 8 private Signature() {} 10 11 24 public static String signatureToTypeDecl(String sig, String name) { 25 String [] sigOut = new String [1]; 26 sigOut[0] = sig; 27 return _sigToType(sigOut, name); 28 } 29 30 private static String _sigToType(String [] sigOut, String name) { 31 if (sigOut[0] == null || sigOut[0].length() == 0) 32 return ""; 33 34 String sig = sigOut[0]; 35 String result = ""; 36 37 switch (sig.charAt(0)) { 38 case 'V': 39 result = "void"; 40 sig = sig.substring(1); 41 break; 42 case 'B': 43 result = "byte"; 44 sig = sig.substring(1); 45 break; 46 case 'S': 47 result = "short"; 48 sig = sig.substring(1); 49 break; 50 case 'I': 51 result = "int"; 52 sig = sig.substring(1); 53 break; 54 case 'J': 55 result = "long"; 56 sig = sig.substring(1); 57 break; 58 case 'F': 59 result = "float"; 60 sig = sig.substring(1); 61 break; 62 case 'D': 63 result = "double"; 64 sig = sig.substring(1); 65 break; 66 case 'Z': 67 result = "boolean"; 68 sig = sig.substring(1); 69 break; 70 case 'L': 71 { 72 int semi = sig.indexOf(';'); 73 result = sig.substring(1, semi).replace('/', '.'); 74 if (result.startsWith("java.lang.")) 75 result = result.substring(10); 76 sig = sig.substring(semi+1); 77 } 78 break; 79 case '[': 80 { 81 sig = sig.substring(1); 82 sigOut[0] = sig; 83 result = _sigToType(sigOut, null) + "[]"; 84 sig = sigOut[0]; 85 } 86 break; 87 case '(': 88 { 89 int closeParen = sig.indexOf(')'); 90 String [] paramOut = new String [1]; 91 paramOut[0] = sig.substring(1, closeParen); 92 String paramStr = ""; 93 while (paramOut[0] != null && paramOut[0].length() > 0) { 94 paramStr += _sigToType(paramOut, null); 95 if (paramOut[0] != null && paramOut[0].length() > 0) 96 paramStr += ", "; 97 } 98 String [] returnOut = new String [1]; 99 returnOut[0] = sig.substring(closeParen+1); 100 String returnStr = _sigToType(returnOut, name); 101 result = returnStr + " (" + paramStr + ')'; 102 name = null; 103 } 104 break; 105 } 106 107 sigOut[0] = sig; 108 return result + (name != null ? " " + name : ""); 109 } 110 111 115 public static void main(String [] args) { 116 if (args.length == 2) 117 System.out.println(signatureToTypeDecl(args[0], args[1])); 118 else 119 System.out.println(signatureToTypeDecl(args[0], null)); 120 } 121 } 122 | Popular Tags |