--- old/src/java.base/share/classes/jdk/experimental/value/ValueType.java 2017-06-21 13:11:24.000000000 -0700 +++ new/src/java.base/share/classes/jdk/experimental/value/ValueType.java 2017-06-21 13:11:24.000000000 -0700 @@ -132,28 +132,30 @@ private static final ConcurrentHashMap, ValueType> BOX_TO_VT = new ConcurrentHashMap<>(); public static boolean classHasValueType(Class x) { - return MinimalValueTypes_1_0.classHasValueType(x); + if (!MinimalValueTypes_1_0.isValueCapable(x)) { + return false; + } + return MinimalValueTypes_1_0.getValueTypeClass(x) != null; } @SuppressWarnings("unchecked") public static ValueType forClass(Class x) { + if (!MinimalValueTypes_1_0.isValueCapable(x)) { + throw new IllegalArgumentException("Class " + x + " not a value capable class"); + } + ValueType vt = (ValueType) BOX_TO_VT.get(x); if (vt != null) { return vt; } - try { - Class valueClass = (Class) MinimalValueTypes_1_0.getValueTypeClass(x); - vt = new ValueType(x, valueClass); - ValueType old = (ValueType) BOX_TO_VT.putIfAbsent(x, vt); - if (old != null) { - vt = old; - } - return vt; - } - catch (ClassNotFoundException cne) { - throw new IllegalArgumentException("Class " + x + " not bound to ValueType", cne); + Class valueClass = (Class) MinimalValueTypes_1_0.getValueTypeClass(x); + vt = new ValueType(x, valueClass); + ValueType old = (ValueType) BOX_TO_VT.putIfAbsent(x, vt); + if (old != null) { + vt = old; } + return vt; } private Lookup boxLookup; @@ -183,15 +185,12 @@ } public Class arrayValueClass(int dims) { - try { - String dimsStr = "[[[[[[[[[[[[[[[["; - if (dims < 1 || dims > 16) { - throw new IllegalArgumentException("cannot create array class for dimension > 16"); - } - return Class.forName(dimsStr.substring(0, dims) + "Q" + valueClass().getName() + ";", false, boxLookup.lookupClass().getClassLoader()); - } catch (ClassNotFoundException ex) { - throw new IllegalStateException(ex); + String dimsStr = "[[[[[[[[[[[[[[[["; + if (dims < 1 || dims > 16) { + throw new IllegalArgumentException("cannot create array class for dimension > 16"); } + String cn = dimsStr.substring(0, dims) + "Q" + valueClass().getName() + ";"; + return MinimalValueTypes_1_0.loadValueTypeClass(boxLookup.lookupClass(), cn); } public String toString() {