From 33ccc261e0c35a967b61579b03d83466cb97eda2 Mon Sep 17 00:00:00 2001 From: Christian Thalinger Date: Mon, 14 Jul 2014 13:57:44 +0400 Subject: [PATCH] 8035788: Provide more consistency for lookups Reviewed-by: jrose, vlivanov, ahgross --- jdk/src/share/classes/java/lang/invoke/MethodHandles.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/jdk/src/share/classes/java/lang/invoke/MethodHandles.java b/jdk/src/share/classes/java/lang/invoke/MethodHandles.java index 0c5931d23be..ee282752032 100644 --- a/jdk/src/share/classes/java/lang/invoke/MethodHandles.java +++ b/jdk/src/share/classes/java/lang/invoke/MethodHandles.java @@ -1505,6 +1505,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);