< prev index next >

src/java.base/share/classes/jdk/experimental/value/ValueType.java

Print this page
rev 17246 : [mq]: findWither-access

*** 277,291 **** result = MethodHandleBuilder.loadCode(valueLookup, mhName("wither$" + name), MethodType.methodType(valueClass(), valueClass(), type), C -> C.vload(0).load(1).vwithfield(valueClass(), name, fieldType).vreturn()); handleMap.put(key, result); } ! // @@@ special access check for read/write access ! //force access-check ! lookup.findGetter(boxClass(), name, type); return result; } public MethodHandle unbox() { ValueHandleKey key = ValueHandleKind.UNBOX.key(); MethodHandle result = handleMap.get(key); if (result == null) { --- 277,296 ---- result = MethodHandleBuilder.loadCode(valueLookup, mhName("wither$" + name), MethodType.methodType(valueClass(), valueClass(), type), C -> C.vload(0).load(1).vwithfield(valueClass(), name, fieldType).vreturn()); handleMap.put(key, result); } ! ! // Allow access if the lookup class is the VCC or DVT and the lookup ! // has private access ! Class<?> lc = lookup.lookupClass(); ! if (lookup.hasPrivateAccess() && (valueClass() == lc || boxClass() == lc)) { return result; } + throw new IllegalAccessException(String.format("Class %s does not have vwithfield access to field %s.%s", + lc.getName(), boxClass().getName(), name)); + } public MethodHandle unbox() { ValueHandleKey key = ValueHandleKind.UNBOX.key(); MethodHandle result = handleMap.get(key); if (result == null) {
< prev index next >