< prev index next >

src/java.base/share/classes/sun/invoke/util/BytecodeDescriptor.java

Print this page
rev 49071 : 8198888: Reduce string allocation churn in InvokerBytecodeGenerator
Reviewed-by: psandoz, plevart


  90             i[0] = endc+1;
  91             String name = str.substring(begc, endc).replace('/', '.');
  92             try {
  93                 return (loader == null)
  94                     ? Class.forName(name, false, null)
  95                     : loader.loadClass(name);
  96             } catch (ClassNotFoundException ex) {
  97                 throw new TypeNotPresentException(name, ex);
  98             }
  99         } else if (c == '[') {
 100             Class<?> t = parseSig(str, i, end, loader);
 101             if (t != null)
 102                 t = java.lang.reflect.Array.newInstance(t, 0).getClass();
 103             return t;
 104         } else {
 105             return Wrapper.forBasicType(c).primitiveType();
 106         }
 107     }
 108 
 109     public static String unparse(Class<?> type) {





 110         StringBuilder sb = new StringBuilder();
 111         unparseSig(type, sb);
 112         return sb.toString();
 113     }
 114 
 115     public static String unparse(MethodType type) {
 116         return unparseMethod(type.returnType(), type.parameterArray());
 117     }
 118 
 119     public static String unparse(Object type) {
 120         if (type instanceof Class<?>)
 121             return unparse((Class<?>) type);
 122         if (type instanceof MethodType)
 123             return unparse((MethodType) type);
 124         return (String) type;
 125     }
 126 
 127     public static String unparseMethod(Class<?> rtype, List<Class<?>> ptypes) {
 128         StringBuilder sb = new StringBuilder();
 129         sb.append('(');


 131             unparseSig(pt, sb);
 132         sb.append(')');
 133         unparseSig(rtype, sb);
 134         return sb.toString();
 135     }
 136 
 137     public static String unparseMethod(Class<?> rtype, Class<?>[] ptypes) {
 138         StringBuilder sb = new StringBuilder();
 139         sb.append('(');
 140         for (Class<?> pt : ptypes)
 141             unparseSig(pt, sb);
 142         sb.append(')');
 143         unparseSig(rtype, sb);
 144         return sb.toString();
 145     }
 146 
 147     private static void unparseSig(Class<?> t, StringBuilder sb) {
 148         char c = Wrapper.forBasicType(t).basicTypeChar();
 149         if (c != 'L') {
 150             sb.append(c);


 151         } else {
 152             boolean lsemi = (!t.isArray());
 153             if (lsemi)  sb.append('L');
 154             sb.append(t.getName().replace('.', '/'));
 155             if (lsemi)  sb.append(';');
 156         }
 157     }
 158 
 159 }


  90             i[0] = endc+1;
  91             String name = str.substring(begc, endc).replace('/', '.');
  92             try {
  93                 return (loader == null)
  94                     ? Class.forName(name, false, null)
  95                     : loader.loadClass(name);
  96             } catch (ClassNotFoundException ex) {
  97                 throw new TypeNotPresentException(name, ex);
  98             }
  99         } else if (c == '[') {
 100             Class<?> t = parseSig(str, i, end, loader);
 101             if (t != null)
 102                 t = java.lang.reflect.Array.newInstance(t, 0).getClass();
 103             return t;
 104         } else {
 105             return Wrapper.forBasicType(c).primitiveType();
 106         }
 107     }
 108 
 109     public static String unparse(Class<?> type) {
 110         if (type == Object.class) {
 111             return "Ljava/lang/Object;";
 112         } else if (type == int.class) {
 113             return "I";
 114         }
 115         StringBuilder sb = new StringBuilder();
 116         unparseSig(type, sb);
 117         return sb.toString();
 118     }
 119 
 120     public static String unparse(MethodType type) {
 121         return unparseMethod(type.returnType(), type.parameterArray());
 122     }
 123 
 124     public static String unparse(Object type) {
 125         if (type instanceof Class<?>)
 126             return unparse((Class<?>) type);
 127         if (type instanceof MethodType)
 128             return unparse((MethodType) type);
 129         return (String) type;
 130     }
 131 
 132     public static String unparseMethod(Class<?> rtype, List<Class<?>> ptypes) {
 133         StringBuilder sb = new StringBuilder();
 134         sb.append('(');


 136             unparseSig(pt, sb);
 137         sb.append(')');
 138         unparseSig(rtype, sb);
 139         return sb.toString();
 140     }
 141 
 142     public static String unparseMethod(Class<?> rtype, Class<?>[] ptypes) {
 143         StringBuilder sb = new StringBuilder();
 144         sb.append('(');
 145         for (Class<?> pt : ptypes)
 146             unparseSig(pt, sb);
 147         sb.append(')');
 148         unparseSig(rtype, sb);
 149         return sb.toString();
 150     }
 151 
 152     private static void unparseSig(Class<?> t, StringBuilder sb) {
 153         char c = Wrapper.forBasicType(t).basicTypeChar();
 154         if (c != 'L') {
 155             sb.append(c);
 156         } else if (t == Object.class) {
 157             sb.append("Ljava/lang/Object;");
 158         } else {
 159             boolean lsemi = (!t.isArray());
 160             if (lsemi)  sb.append('L');
 161             sb.append(t.getName().replace('.', '/'));
 162             if (lsemi)  sb.append(';');
 163         }
 164     }
 165 
 166 }
< prev index next >