< prev index next >
src/java.base/share/classes/java/lang/invoke/MethodHandles.java
Print this page
*** 1393,1409 ****
public MethodHandle findSpecial(Class<?> refc, String name, MethodType type,
Class<?> specialCaller) throws NoSuchMethodException, IllegalAccessException {
checkSpecialCaller(specialCaller, refc);
Lookup specialLookup = this.in(specialCaller);
MemberName method = specialLookup.resolveOrFail(REF_invokeSpecial, refc, name, type);
! Class<?> callerCls = findBoundCallerClass(method);
! boolean restrict = !(method.isPrivate() && Reflection.areNestMates(specialCaller, refc));
!
! if (restrict)
! return specialLookup.getDirectMethod(REF_invokeSpecial, refc, method, callerCls);
! else
! return specialLookup.getDirectMethodNoRestrictInvokeSpecial(refc, method, callerCls);
}
/**
* Produces a method handle giving read access to a non-static field.
* The type of the method handle will have a return type of the field's
--- 1393,1403 ----
public MethodHandle findSpecial(Class<?> refc, String name, MethodType type,
Class<?> specialCaller) throws NoSuchMethodException, IllegalAccessException {
checkSpecialCaller(specialCaller, refc);
Lookup specialLookup = this.in(specialCaller);
MemberName method = specialLookup.resolveOrFail(REF_invokeSpecial, refc, name, type);
! return specialLookup.getDirectMethod(REF_invokeSpecial, refc, method, findBoundCallerClass(method));
}
/**
* Produces a method handle giving read access to a non-static field.
* The type of the method handle will have a return type of the field's
< prev index next >