< prev index next >
src/java.base/share/classes/jdk/experimental/value/ValueType.java
Print this page
*** 130,162 ****
}
private static final ConcurrentHashMap<Class<?>, ValueType<?>> BOX_TO_VT = new ConcurrentHashMap<>();
public static boolean classHasValueType(Class<?> x) {
! return MinimalValueTypes_1_0.classHasValueType(x);
}
@SuppressWarnings("unchecked")
public static <T> ValueType<T> forClass(Class<T> x) {
ValueType<T> vt = (ValueType<T>) BOX_TO_VT.get(x);
if (vt != null) {
return vt;
}
- try {
Class<T> valueClass = (Class<T>) MinimalValueTypes_1_0.getValueTypeClass(x);
vt = new ValueType<T>(x, valueClass);
ValueType<T> old = (ValueType<T>) 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);
- }
- }
private Lookup boxLookup;
private Lookup valueLookup;
private Map<ValueHandleKind.ValueHandleKey, MethodHandle> handleMap = new ConcurrentHashMap<>();
--- 130,164 ----
}
private static final ConcurrentHashMap<Class<?>, ValueType<?>> BOX_TO_VT = new ConcurrentHashMap<>();
public static boolean classHasValueType(Class<?> x) {
! if (!MinimalValueTypes_1_0.isValueCapable(x)) {
! return false;
! }
! return MinimalValueTypes_1_0.getValueTypeClass(x) != null;
}
@SuppressWarnings("unchecked")
public static <T> ValueType<T> forClass(Class<T> x) {
+ if (!MinimalValueTypes_1_0.isValueCapable(x)) {
+ throw new IllegalArgumentException("Class " + x + " not a value capable class");
+ }
+
ValueType<T> vt = (ValueType<T>) BOX_TO_VT.get(x);
if (vt != null) {
return vt;
}
Class<T> valueClass = (Class<T>) MinimalValueTypes_1_0.getValueTypeClass(x);
vt = new ValueType<T>(x, valueClass);
ValueType<T> old = (ValueType<T>) BOX_TO_VT.putIfAbsent(x, vt);
if (old != null) {
vt = old;
}
return vt;
}
private Lookup boxLookup;
private Lookup valueLookup;
private Map<ValueHandleKind.ValueHandleKey, MethodHandle> handleMap = new ConcurrentHashMap<>();
*** 181,199 ****
public Class<?> arrayValueClass() {
return arrayValueClass(1);
}
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);
! }
}
public String toString() {
return "ValueType boxClass=" + boxClass() + " valueClass=" + valueClass();
}
--- 183,198 ----
public Class<?> arrayValueClass() {
return arrayValueClass(1);
}
public Class<?> arrayValueClass(int dims) {
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() {
return "ValueType boxClass=" + boxClass() + " valueClass=" + valueClass();
}
< prev index next >