src/share/classes/jdk/internal/org/objectweb/asm/commons/Method.java

Print this page




 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(';');