< prev index next >

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

Print this page

        

@@ -88,13 +88,14 @@
             int begc = i[0], endc = str.indexOf(';', begc);
             if (endc < 0)  return null;
             i[0] = endc+1;
             String name = str.substring(begc, endc).replace('/', '.');
             try {
-                return (loader == null)
+                Class<?> clz = (loader == null)
                     ? Class.forName(name, false, null)
                     : loader.loadClass(name);
+                return c == 'Q' ? clz.asValueType() : clz.asBoxType();
             } catch (ClassNotFoundException ex) {
                 throw new TypeNotPresentException(name, ex);
             }
         } else if (c == '[') {
             Class<?> t = parseSig(str, i, end, loader);

@@ -149,16 +150,18 @@
         return sb.toString();
     }
 
     private static void unparseSig(Class<?> t, StringBuilder sb) {
         char c = Wrapper.forBasicType(t).basicTypeChar();
-        if (c != 'L' && c != 'Q') {
+        if (c != 'L') {
             sb.append(c);
         } else if (t == Object.class) {
             sb.append("Ljava/lang/Object;");
         } else {
             boolean lsemi = (!t.isArray());
+            if (t == t.asValueType())
+                c = 'Q';
             if (lsemi)  sb.append(c);
             sb.append(t.getName().replace('.', '/'));
             if (lsemi)  sb.append(';');
         }
     }
< prev index next >