diff options
Diffstat (limited to 'src/share/classes/java/lang/invoke/MethodHandles.java')
-rw-r--r-- | src/share/classes/java/lang/invoke/MethodHandles.java | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/share/classes/java/lang/invoke/MethodHandles.java b/src/share/classes/java/lang/invoke/MethodHandles.java index cdc764dee..09103d534 100644 --- a/src/share/classes/java/lang/invoke/MethodHandles.java +++ b/src/share/classes/java/lang/invoke/MethodHandles.java @@ -39,7 +39,9 @@ import sun.reflect.misc.ReflectUtil; import sun.security.util.SecurityConstants; import static java.lang.invoke.MethodHandleStatics.*; import static java.lang.invoke.MethodHandleNatives.Constants.*; + import java.util.concurrent.ConcurrentHashMap; + import sun.security.util.SecurityConstants; /** @@ -1504,6 +1506,10 @@ return mh1; // that is *not* the bytecode behavior. mods ^= Modifier.PROTECTED | Modifier.PUBLIC; } + if (Modifier.isProtected(mods) && refKind == REF_newInvokeSpecial) { + // cannot "new" a protected ctor in a different package + mods ^= Modifier.PROTECTED; + } if (Modifier.isFinal(mods) && MethodHandleNatives.refKindIsSetter(refKind)) throw m.makeAccessException("unexpected set of a final field", this); |