188 * @param defaultPackage 189 * true if unqualified class names belong to the default package, 190 * or false if they correspond to java.lang classes. For instance 191 * "Object" means "Object" if this option is true, or 192 * "java.lang.Object" otherwise. 193 * @return a {@link Method} corresponding to the given Java method 194 * declaration. 195 * @throws IllegalArgumentException 196 * if <code>method</code> could not get parsed. 197 */ 198 public static Method getMethod(final String method, 199 final boolean defaultPackage) throws IllegalArgumentException { 200 int space = method.indexOf(' '); 201 int start = method.indexOf('(', space) + 1; 202 int end = method.indexOf(')', start); 203 if (space == -1 || start == -1 || end == -1) { 204 throw new IllegalArgumentException(); 205 } 206 String returnType = method.substring(0, space); 207 String methodName = method.substring(space + 1, start - 1).trim(); 208 StringBuffer sb = new StringBuffer(); 209 sb.append('('); 210 int p; 211 do { 212 String s; 213 p = method.indexOf(',', start); 214 if (p == -1) { 215 s = map(method.substring(start, end).trim(), defaultPackage); 216 } else { 217 s = map(method.substring(start, p).trim(), defaultPackage); 218 start = p + 1; 219 } 220 sb.append(s); 221 } while (p != -1); 222 sb.append(')'); 223 sb.append(map(returnType, defaultPackage)); 224 return new Method(methodName, sb.toString()); 225 } 226 227 private static String map(final String type, final boolean defaultPackage) { 228 if ("".equals(type)) { 229 return type; 230 } 231 232 StringBuffer sb = new StringBuffer(); 233 int index = 0; 234 while ((index = type.indexOf("[]", index) + 1) > 0) { 235 sb.append('['); 236 } 237 238 String t = type.substring(0, type.length() - sb.length() * 2); 239 String desc = DESCRIPTORS.get(t); 240 if (desc != null) { 241 sb.append(desc); 242 } else { 243 sb.append('L'); 244 if (t.indexOf('.') < 0) { 245 if (!defaultPackage) { 246 sb.append("java/lang/"); 247 } 248 sb.append(t); 249 } else { 250 sb.append(t.replace('.', '/')); 251 } 252 sb.append(';'); | 188 * @param defaultPackage 189 * true if unqualified class names belong to the default package, 190 * or false if they correspond to java.lang classes. For instance 191 * "Object" means "Object" if this option is true, or 192 * "java.lang.Object" otherwise. 193 * @return a {@link Method} corresponding to the given Java method 194 * declaration. 195 * @throws IllegalArgumentException 196 * if <code>method</code> could not get parsed. 197 */ 198 public static Method getMethod(final String method, 199 final boolean defaultPackage) throws IllegalArgumentException { 200 int space = method.indexOf(' '); 201 int start = method.indexOf('(', space) + 1; 202 int end = method.indexOf(')', start); 203 if (space == -1 || start == -1 || end == -1) { 204 throw new IllegalArgumentException(); 205 } 206 String returnType = method.substring(0, space); 207 String methodName = method.substring(space + 1, start - 1).trim(); 208 StringBuilder sb = new StringBuilder(); 209 sb.append('('); 210 int p; 211 do { 212 String s; 213 p = method.indexOf(',', start); 214 if (p == -1) { 215 s = map(method.substring(start, end).trim(), defaultPackage); 216 } else { 217 s = map(method.substring(start, p).trim(), defaultPackage); 218 start = p + 1; 219 } 220 sb.append(s); 221 } while (p != -1); 222 sb.append(')'); 223 sb.append(map(returnType, defaultPackage)); 224 return new Method(methodName, sb.toString()); 225 } 226 227 private static String map(final String type, final boolean defaultPackage) { 228 if ("".equals(type)) { 229 return type; 230 } 231 232 StringBuilder sb = new StringBuilder(); 233 int index = 0; 234 while ((index = type.indexOf("[]", index) + 1) > 0) { 235 sb.append('['); 236 } 237 238 String t = type.substring(0, type.length() - sb.length() * 2); 239 String desc = DESCRIPTORS.get(t); 240 if (desc != null) { 241 sb.append(desc); 242 } else { 243 sb.append('L'); 244 if (t.indexOf('.') < 0) { 245 if (!defaultPackage) { 246 sb.append("java/lang/"); 247 } 248 sb.append(t); 249 } else { 250 sb.append(t.replace('.', '/')); 251 } 252 sb.append(';'); |