On 03/12/2015 19:58, Rafael Winterhalter wrote:
:
Assuming A is a serialization library: If the object of C contains an
instance encapsulated by D, then B would need to make sure that it can read
C and D before handing the instance to A. For this it would of course be
necessary to understand the inner workings of A. This is trivial for a
serialization library but in the general case this involves more effort and
is difficult to accomplish without runtime errors.
Is that incorrect?
The B code doesn't need to do anything special here, it just passes
references to A code (in the same module). If the A code is doing
serialization then it's walking object graphs and might have to add some
transient read edges (via jlr.Module::addReads) as it goes. If the walk
leads to it trying to access types that aren't public or aren't in
packages exported to module B then it will get an
IllegalAccessException, that is to be expected. So I don't think there
is any specific to shading or uber JARs in this example.
-Alan.