# HG changeset patch # User twisti # Date 1395251323 25200 # Node ID 4b3d9fc2558cf87650e81ab08750401bcb6947fb # Parent 26994c39fd70852f66cf872b1a450f1fcafa1b93 8035788: Provide more consistency for lookups Reviewed-by: jrose, vlivanov, ahgross diff -r 26994c39fd70 -r 4b3d9fc2558c src/share/classes/java/lang/invoke/MethodHandles.java --- a/src/share/classes/java/lang/invoke/MethodHandles.java Thu Mar 13 14:58:55 2014 +0400 +++ b/src/share/classes/java/lang/invoke/MethodHandles.java Wed Mar 19 10:48:43 2014 -0700 @@ -26,12 +26,15 @@ package java.lang.invoke; import java.lang.reflect.*; + import sun.invoke.util.ValueConversions; import sun.invoke.util.VerifyAccess; import sun.invoke.util.Wrapper; + import java.util.List; import java.util.ArrayList; import java.util.Arrays; + import sun.reflect.CallerSensitive; import sun.reflect.Reflection; import sun.reflect.misc.ReflectUtil; @@ -1155,6 +1158,10 @@ int allowedModes = this.allowedModes; if (allowedModes == TRUSTED) return; int mods = m.getModifiers(); + 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);