8198831: Lazy initialization of ValueConversions MethodHandles

Reviewed-by: shade
This commit is contained in:
Claes Redestad 2018-02-28 15:28:46 +01:00
parent 9093953813
commit 16a61139e2

View file

@ -377,7 +377,7 @@ public class ValueConversions {
MethodType type = MethodType.methodType(wrap.primitiveType()); MethodType type = MethodType.methodType(wrap.primitiveType());
switch (wrap) { switch (wrap) {
case VOID: case VOID:
mh = EMPTY; mh = Handles.EMPTY;
break; break;
case OBJECT: case OBJECT:
case INT: case LONG: case FLOAT: case DOUBLE: case INT: case LONG: case FLOAT: case DOUBLE:
@ -400,7 +400,8 @@ public class ValueConversions {
throw new IllegalArgumentException("cannot find zero constant for " + wrap); throw new IllegalArgumentException("cannot find zero constant for " + wrap);
} }
private static final MethodHandle CAST_REFERENCE, IGNORE, EMPTY; private static class Handles {
static final MethodHandle CAST_REFERENCE, IGNORE, EMPTY;
static { static {
try { try {
MethodType idType = MethodType.genericMethodType(1); MethodType idType = MethodType.genericMethodType(1);
@ -412,14 +413,15 @@ public class ValueConversions {
throw newInternalError("uncaught exception", ex); throw newInternalError("uncaught exception", ex);
} }
} }
}
public static MethodHandle ignore() { public static MethodHandle ignore() {
return IGNORE; return Handles.IGNORE;
} }
/** Return a method that casts its second argument (an Object) to the given type (a Class). */ /** Return a method that casts its second argument (an Object) to the given type (a Class). */
public static MethodHandle cast() { public static MethodHandle cast() {
return CAST_REFERENCE; return Handles.CAST_REFERENCE;
} }
/// Primitive conversions. /// Primitive conversions.