changeset 21963:bb3f0968303c

Fix MetaUtil.toInternalName
author Christian Wimmer <christian.wimmer@oracle.com>
date Fri, 12 Jun 2015 17:57:03 -0700
parents a286f49a92c9
children 6860c1078d92
files jvmci/com.oracle.jvmci.meta/src/com/oracle/jvmci/meta/MetaUtil.java jvmci/com.oracle.jvmci.runtime.test/src/com/oracle/jvmci/runtime/test/TestMetaAccessProvider.java jvmci/com.oracle.jvmci.runtime.test/src/com/oracle/jvmci/runtime/test/TypeUniverse.java
diffstat 3 files changed, 39 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/jvmci/com.oracle.jvmci.meta/src/com/oracle/jvmci/meta/MetaUtil.java	Fri Jun 12 17:01:15 2015 -0700
+++ b/jvmci/com.oracle.jvmci.meta/src/com/oracle/jvmci/meta/MetaUtil.java	Fri Jun 12 17:57:03 2015 -0700
@@ -281,35 +281,51 @@
      * @return the internal name form of the class name
      */
     public static String toInternalName(String className) {
-        String prefix = "";
+        if (className.startsWith("[")) {
+            /* Already in the correct array style. */
+            return className.replace('.', '/');
+        }
+
+        StringBuilder result = new StringBuilder();
         String base = className;
         while (base.endsWith("[]")) {
-            prefix += "[";
-            base = base.substring(base.length() - 2);
+            result.append("[");
+            base = base.substring(0, base.length() - 2);
         }
 
-        switch (className) {
+        switch (base) {
             case "boolean":
-                return prefix + "Z";
+                result.append("Z");
+                break;
             case "byte":
-                return prefix + "B";
+                result.append("B");
+                break;
             case "short":
-                return prefix + "S";
+                result.append("S");
+                break;
             case "char":
-                return prefix + "C";
+                result.append("C");
+                break;
             case "int":
-                return prefix + "I";
+                result.append("I");
+                break;
             case "float":
-                return prefix + "F";
+                result.append("F");
+                break;
             case "long":
-                return prefix + "J";
+                result.append("J");
+                break;
             case "double":
-                return prefix + "D";
+                result.append("D");
+                break;
             case "void":
-                return prefix + "V";
+                result.append("V");
+                break;
             default:
-                return prefix + "L" + className.replace('.', '/') + ";";
+                result.append("L").append(base.replace('.', '/')).append(";");
+                break;
         }
+        return result.toString();
     }
 
     /**
--- a/jvmci/com.oracle.jvmci.runtime.test/src/com/oracle/jvmci/runtime/test/TestMetaAccessProvider.java	Fri Jun 12 17:01:15 2015 -0700
+++ b/jvmci/com.oracle.jvmci.runtime.test/src/com/oracle/jvmci/runtime/test/TestMetaAccessProvider.java	Fri Jun 12 17:57:03 2015 -0700
@@ -42,9 +42,11 @@
             ResolvedJavaType type = metaAccess.lookupJavaType(c);
             assertNotNull(type);
             assertEquals(c.getModifiers(), type.getModifiers());
+            assertEquals(type.getName(), toInternalName(c.getName()));
+            assertEquals(type.getName(), toInternalName(type.toJavaName()));
+            assertEquals(c.getName(), type.toClassName());
             if (!type.isArray()) {
-                assertEquals(type.getName(), toInternalName(c.getName()));
-                assertEquals(type.toJavaName(), c.getName());
+                assertEquals(c.getName(), type.toJavaName());
             }
         }
     }
--- a/jvmci/com.oracle.jvmci.runtime.test/src/com/oracle/jvmci/runtime/test/TypeUniverse.java	Fri Jun 12 17:01:15 2015 -0700
+++ b/jvmci/com.oracle.jvmci.runtime.test/src/com/oracle/jvmci/runtime/test/TypeUniverse.java	Fri Jun 12 17:57:03 2015 -0700
@@ -70,9 +70,11 @@
         }
         unsafe = theUnsafe;
 
-        Class<?>[] initialClasses = {void.class, boolean.class, byte.class, short.class, char.class, int.class, float.class, long.class, double.class, Object.class, Class.class, ClassLoader.class,
-                        String.class, Serializable.class, Cloneable.class, Test.class, TestMetaAccessProvider.class, List.class, Collection.class, Map.class, Queue.class, HashMap.class,
-                        LinkedHashMap.class, IdentityHashMap.class, AbstractCollection.class, AbstractList.class, ArrayList.class, TrustedInterface.class};
+        Class<?>[] initialClasses = {void.class, boolean.class, byte.class, short.class, char.class, int.class, float.class, long.class, double.class, Object.class, Class.class, boolean[].class,
+                        byte[].class, short[].class, char[].class, int[].class, float[].class, long[].class, double[].class, Object[].class, Class[].class, boolean[][].class, byte[][].class,
+                        short[][].class, char[][].class, int[][].class, float[][].class, long[][].class, double[][].class, Object[][].class, Class[][].class, ClassLoader.class, String.class,
+                        Serializable.class, Cloneable.class, Test.class, TestMetaAccessProvider.class, List.class, Collection.class, Map.class, Queue.class, HashMap.class, LinkedHashMap.class,
+                        IdentityHashMap.class, AbstractCollection.class, AbstractList.class, ArrayList.class, TrustedInterface.class};
         for (Class<?> c : initialClasses) {
             addClass(c);
         }