Mercurial > hg > graal-jvmci-8
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); }