On 18.01.2018 10:58, Alan Bateman wrote:
> On 17/01/2018 18:53, Rony G. Flatscher wrote:
>>
>> :
>>
>> Would you have concrete suggestions for this use-case, i.e. a framework that 
>> is not part of a
>> module, but having a need to access public types from exported packages and 
>> get reflective access
>> to objects supertype's protected members?
> I think it would be better to start with public members as protected is 
> complicated (and hasn't
> changed with modules once you establish the class declaring the member is 
> accessible).
>
> For your example, you've got a reference to a java.awt.Graphics2D object, the 
> actual
> implementation type is sun.java2d.SunGraphics2D. The user is attempting to 
> invoke one of the
> public setRenderingHint methods that Graphics2D defines. You said in one of 
> your mails that the
> bridge "iterates over all its superclasses" which I take to mean that it 
> recursively looks at the
> superclass and interfaces to find a public class or interface that defines 
> the target
> setRenderingHint method. In the example, I expect it would skip 
> sun.java2d.SunGraphics2D if it
> were non public.
>
> Can you extend this check to test if the class is in a package exported by 
> its module. For the
> example, sun.java2d.SunGraphics2D is in the java.desktop module and this 
> module does not export
> sun.java2d to everyone. Here is a code fragment to test this:
>
> Class<?> clazz = graphicsObj.getClass();
> boolean isExportedToAll = 
> clazz.getModule().isExported(clazz.getPackageName());
>
> (I'm deliberately avoiding the 2-arg isExported to keep things simple for 
> this discussion).
>
> If you can incorporate this check into the bridge then I suspect you'll find 
> most of the examples
> will work.

Yes, I understand (not being able to use methods in an unexported type's 
instance, hence the need to
find an accessible member in a superclass, which means to have a need to also 
access protected
members in the superclass) and that is actually my current approach. However, I 
started out with
reflecting Fields first and see, whether I can reflectively get access.

The rewritten method resolution would follow next, which would allow me to 
tackle that warning and
see whether I can get rid of it. However, before going a wrong route I would 
like to learn what the
"official" Java 9 solution would be and try to implement that.

---rony


Reply via email to