"needs to find all modules potentially involved" ? Module B needs to configure readability to solely the module containing the class that A's code (well, the code-that-used-to-be-A-but-is-now-part-of-B) wishes to access reflectively. Here it is: objFromC.getClass().getModule().

Alex

On 12/3/2015 11:43 AM, Rafael Winterhalter wrote:
But then library B needs to find all modules potentially involved. With
the classical example of a serialization library that traverses a full
object graph, this would require B to do the same for anytime an object
is handed to the shaded dependency. To me that appears impractical.

Am 03.12.2015 8:37 nachm. schrieb "Alex Buckley"
<alex.buck...@oracle.com <mailto:alex.buck...@oracle.com>>:

    Yes, A's reflective access to C's classes will fail, due to the
    action of B's author in grabbing and shading A.

    Module B is responsible for configuring its (B's) readability to the
    module containing C's classes (be that a named module if C has been
    modularized, or the unnamed module if C is still a JAR on the
    classpath).

    Module B can achieve this with a single call to j.l.r.Module::addReads.

    Alex

    On 12/3/2015 11:19 AM, Rafael Winterhalter wrote:

        Sorry, I realize that I was not precise.

        Assuming that pre-module library A is shaded by modularized
        library B. User
        code C is then using library B. Internally, library B passes
        objects to
        library A that is using reflection on C without being aware of
        the module
        boundary. Would this now fail as library A is now part of B's
        module?
        Am 03.12.2015 8:10 nachm. schrieb "Alan Bateman"
        <alan.bate...@oracle.com <mailto:alan.bate...@oracle.com>>:


            On 03/12/2015 18:30, Rafael Winterhalter wrote:

                As a follow-up question. What if I need to import a
                library into my
                namespace and therewith module? ("shaded dependencies")
                This is a quite
                common practice to avoid version conflicts.

                Would for example the reflection semantics for these
                classes change? Or
                would the byte code level serve as a fallback? (But then
                the mentioned
                "modularity for pre-9 libraries" would not work.)

                Can you expand the example a bit? I assume the uber JAR
                has the

            dependences (in renamed packages) but those packages are not
            exported. In
            that case then none of the types in the shaded dependences
            will be
            accessible outside of the module. Within the module, which
            includes the
            shaded dependences, then all public types are available to
            code in the
            module, doesn't matter if the reference is static or core
            reflection.

            -Alan

Reply via email to