mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-26 22:34:27 +02:00
Merge
This commit is contained in:
commit
9bfdee7c5a
451 changed files with 11174 additions and 5810 deletions
|
@ -1047,7 +1047,8 @@ import static java.lang.invoke.MethodHandleStatics.newInternalError;
|
|||
* If lookup fails or access is not permitted, null is returned.
|
||||
* Otherwise a fresh copy of the given member is returned, with modifier bits filled in.
|
||||
*/
|
||||
private MemberName resolve(byte refKind, MemberName ref, Class<?> lookupClass) {
|
||||
private MemberName resolve(byte refKind, MemberName ref, Class<?> lookupClass,
|
||||
boolean speculativeResolve) {
|
||||
MemberName m = ref.clone(); // JVM will side-effect the ref
|
||||
assert(refKind == m.getReferenceKind());
|
||||
try {
|
||||
|
@ -1066,7 +1067,10 @@ import static java.lang.invoke.MethodHandleStatics.newInternalError;
|
|||
//
|
||||
// REFC view on PTYPES doesn't matter, since it is used only as a starting point for resolution and doesn't
|
||||
// participate in method selection.
|
||||
m = MethodHandleNatives.resolve(m, lookupClass);
|
||||
m = MethodHandleNatives.resolve(m, lookupClass, speculativeResolve);
|
||||
if (m == null && speculativeResolve) {
|
||||
return null;
|
||||
}
|
||||
m.checkForTypeAlias(m.getDeclaringClass());
|
||||
m.resolution = null;
|
||||
} catch (ClassNotFoundException | LinkageError ex) {
|
||||
|
@ -1091,7 +1095,7 @@ import static java.lang.invoke.MethodHandleStatics.newInternalError;
|
|||
MemberName resolveOrFail(byte refKind, MemberName m, Class<?> lookupClass,
|
||||
Class<NoSuchMemberException> nsmClass)
|
||||
throws IllegalAccessException, NoSuchMemberException {
|
||||
MemberName result = resolve(refKind, m, lookupClass);
|
||||
MemberName result = resolve(refKind, m, lookupClass, false);
|
||||
if (result.isResolved())
|
||||
return result;
|
||||
ReflectiveOperationException ex = result.makeAccessException();
|
||||
|
@ -1106,8 +1110,8 @@ import static java.lang.invoke.MethodHandleStatics.newInternalError;
|
|||
*/
|
||||
public
|
||||
MemberName resolveOrNull(byte refKind, MemberName m, Class<?> lookupClass) {
|
||||
MemberName result = resolve(refKind, m, lookupClass);
|
||||
if (result.isResolved())
|
||||
MemberName result = resolve(refKind, m, lookupClass, true);
|
||||
if (result != null && result.isResolved())
|
||||
return result;
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -49,7 +49,8 @@ class MethodHandleNatives {
|
|||
|
||||
static native void init(MemberName self, Object ref);
|
||||
static native void expand(MemberName self);
|
||||
static native MemberName resolve(MemberName self, Class<?> caller) throws LinkageError, ClassNotFoundException;
|
||||
static native MemberName resolve(MemberName self, Class<?> caller,
|
||||
boolean speculativeResolve) throws LinkageError, ClassNotFoundException;
|
||||
static native int getMembers(Class<?> defc, String matchName, String matchSig,
|
||||
int matchFlags, Class<?> caller, int skip, MemberName[] results);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue