OpenJDK / portola / portola
changeset 49004:64fafabcdb21
8198831: Lazy initialization of ValueConversions MethodHandles
Reviewed-by: shade
author | redestad |
---|---|
date | Wed, 28 Feb 2018 15:28:46 +0100 |
parents | 94e7f6601ff1 |
children | c153e9daadce |
files | src/java.base/share/classes/sun/invoke/util/ValueConversions.java |
diffstat | 1 files changed, 15 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/src/java.base/share/classes/sun/invoke/util/ValueConversions.java Wed Feb 28 19:16:51 2018 +0800 +++ b/src/java.base/share/classes/sun/invoke/util/ValueConversions.java Wed Feb 28 15:28:46 2018 +0100 @@ -377,7 +377,7 @@ MethodType type = MethodType.methodType(wrap.primitiveType()); switch (wrap) { case VOID: - mh = EMPTY; + mh = Handles.EMPTY; break; case OBJECT: case INT: case LONG: case FLOAT: case DOUBLE: @@ -400,26 +400,28 @@ throw new IllegalArgumentException("cannot find zero constant for " + wrap); } - private static final MethodHandle CAST_REFERENCE, IGNORE, EMPTY; - static { - try { - MethodType idType = MethodType.genericMethodType(1); - MethodType ignoreType = idType.changeReturnType(void.class); - CAST_REFERENCE = IMPL_LOOKUP.findVirtual(Class.class, "cast", idType); - IGNORE = IMPL_LOOKUP.findStatic(THIS_CLASS, "ignore", ignoreType); - EMPTY = IMPL_LOOKUP.findStatic(THIS_CLASS, "empty", ignoreType.dropParameterTypes(0, 1)); - } catch (NoSuchMethodException | IllegalAccessException ex) { - throw newInternalError("uncaught exception", ex); + private static class Handles { + static final MethodHandle CAST_REFERENCE, IGNORE, EMPTY; + static { + try { + MethodType idType = MethodType.genericMethodType(1); + MethodType ignoreType = idType.changeReturnType(void.class); + CAST_REFERENCE = IMPL_LOOKUP.findVirtual(Class.class, "cast", idType); + IGNORE = IMPL_LOOKUP.findStatic(THIS_CLASS, "ignore", ignoreType); + EMPTY = IMPL_LOOKUP.findStatic(THIS_CLASS, "empty", ignoreType.dropParameterTypes(0, 1)); + } catch (NoSuchMethodException | IllegalAccessException ex) { + throw newInternalError("uncaught exception", ex); + } } } 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). */ public static MethodHandle cast() { - return CAST_REFERENCE; + return Handles.CAST_REFERENCE; } /// Primitive conversions.