aboutsummaryrefslogtreecommitdiff
path: root/src/jdk.dynalink/share/classes/jdk
diff options
context:
space:
mode:
authorPriya Lakshmi Muthuswamy <priya.lakshmi.muthuswamy@oracle.com>2018-01-12 10:33:06 +0100
committerHannes Wallnöfer <hannesw@openjdk.org>2018-01-12 10:33:06 +0100
commitf815c509cf88283d86c30f74302fc4cc3d2b8bca (patch)
tree0c960e8da2dbfa71cb32bd4579329e1415a3e15c /src/jdk.dynalink/share/classes/jdk
parenta34fdd18097bde34e00674f2415381676b92b760 (diff)
downloadJetBrainsRuntime-f815c509cf88283d86c30f74302fc4cc3d2b8bca.tar.gz
8157251: BeanLinker relinks array length operations for array types
Reviewed-by: hannesw, jlaskey, attila
Diffstat (limited to 'src/jdk.dynalink/share/classes/jdk')
-rw-r--r--src/jdk.dynalink/share/classes/jdk/dynalink/beans/BeanLinker.java5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/jdk.dynalink/share/classes/jdk/dynalink/beans/BeanLinker.java b/src/jdk.dynalink/share/classes/jdk/dynalink/beans/BeanLinker.java
index d46bd105b67..9800e25150d 100644
--- a/src/jdk.dynalink/share/classes/jdk/dynalink/beans/BeanLinker.java
+++ b/src/jdk.dynalink/share/classes/jdk/dynalink/beans/BeanLinker.java
@@ -116,7 +116,7 @@ class BeanLinker extends AbstractJavaLinker implements TypeBasedGuardingDynamicL
if(clazz.isArray()) {
// Some languages won't have a notion of manipulating collections. Exposing "length" on arrays as an
// explicit property is beneficial for them.
- setPropertyGetter("length", MethodHandles.arrayLength(clazz), ValidationType.EXACT_CLASS);
+ setPropertyGetter("length", GET_ARRAY_LENGTH, ValidationType.IS_ARRAY);
} else if(Collection.class.isAssignableFrom(clazz)) {
setPropertyGetter("length", GET_COLLECTION_LENGTH, ValidationType.INSTANCE_OF);
} else if(Map.class.isAssignableFrom(clazz)) {
@@ -546,6 +546,9 @@ class BeanLinker extends AbstractJavaLinker implements TypeBasedGuardingDynamicL
private static final MethodHandle GET_MAP_LENGTH = Lookup.PUBLIC.findVirtual(Map.class, "size",
MethodType.methodType(int.class));
+ private static final MethodHandle GET_ARRAY_LENGTH = Lookup.PUBLIC.findStatic(Array.class, "getLength",
+ MethodType.methodType(int.class, Object.class));
+
private static void assertParameterCount(final CallSiteDescriptor descriptor, final int paramCount) {
if(descriptor.getMethodType().parameterCount() != paramCount) {
throw new BootstrapMethodError(descriptor.getOperation() + " must have exactly " + paramCount + " parameters.");