Thank you Alex. Sounds like good advice. I'll raise it over there. Thanks
for chatting with me about it.

Cheers,
Paul

On Wed, Jul 20, 2016 at 6:37 PM, Alex Buckley <alex.buck...@oracle.com>
wrote:

> Since A does not require B, you are quite right that the compiler doesn't
> need B to compile A per se. It's solely the qualified export to B that
> drives the compiler to demand B when compiling A's module declaration. (I
> believe that javac should be disinterested in B when compiling A's type
> declarations.)
>
> By all means, raise an issue on jpms-spec-comments about how a qualified
> export induces a compile-time circularity, being sure to note that taking a
> more relaxed view means passing through garbage qualified exports.
>
> Alex
>
> On 7/20/2016 4:22 PM, Paul Benedict wrote:
>
>> Alex, I must respectfully disagree with your analogy. We both agree that
>> it is good for the compiler to check an "import" statement. I imagine we
>> would also both agree that checking "requires" is good too. I would
>> argue what makes this good is because the developer has the intention of
>> locating and consuming a resource -- package or module, respectively.
>> Even with a wildcard import statement, I am explicitly asking to consume
>> the contents of a package (whatever the contents); so if the package
>> isn't there, my intention cannot be met.
>>
>> However, in my scenario here, I have no need to consume. Module A is not
>> consuming anything from Module B. All I want to do is issue a directive
>> for Module B at runtime, if B is even available at runtime. So I don't
>> really think the analogy you gave me applies.
>>
>> Now, I could write a stub project for B and install it somewhere, but
>> that is kind of silly, don't you think? Why make me go through these
>> hoops? The compiler isn't providing any value here with this check. The
>> compiler doesn't need B to be statically accessible to prove anything
>> about exporting a package, does it? If it does, can you let me know why
>> it needs this proof?
>>
>> Cheers,
>> Paul
>>
>> On Wed, Jul 20, 2016 at 6:00 PM, Alex Buckley <alex.buck...@oracle.com
>> <mailto:alex.buck...@oracle.com>> wrote:
>>
>>     On 7/20/2016 3:07 PM, Paul Benedict wrote:
>>
>>         Currently I am writing a module that another team will consume.
>>         Let's just
>>         call these modules A and B. Module A must export its packages to
>>         Module B
>>         and B alone.
>>
>>         For reasons beyond my control, I do not have access to Module B.
>>         However, I
>>         don't need to consume any types from B or use B in anyway --
>>         just need to
>>         give package visibility to B. So the compiler is stopping me
>>         because it
>>         says "error: module not found". Yes, the compiler is right...
>>         but it's too
>>         right.
>>
>>         What do you think of loosening the compiler restriction here? I
>>         don't see a
>>         reason why the export target must be known at this point.
>>
>>
>>     We start by supposing that compile-time checking is good. Think of
>>     how the compiler checks your 'import' declarations in ordinary .java
>>     files. Even if you do a wildcard import because you're not sure
>>     which types you'll use, you still have the compiler checking that
>>     the package exists. For qualified exports, we assume that if you're
>>     friendly enough with the owner of B to add a qualified export to B,
>>     then you're friendly enough to have a copy of B available. As such,
>>     if you write 'exports ... to V' (yes, V, not B), then we aim to
>>     check that V exists. It doesn't, so you'll get an error, and you'll
>>     smack yourself for typing V rather than B.
>>
>>     A wrinkle in your scenario is that module B requires module A, so B
>>     must be compiled with A present. And, A must be compiled with B
>>     present, due to 'exports ... to B'. There's no circularity in the
>>     'requires' clauses, but there is effectively a circularity in the
>>     module declarations more broadly. A certain amount of incremental
>>     craftsmanship will be necessary to allow this pair of modules to
>> flower.
>>
>>
>>
>>
>>

Reply via email to