no error when module exports non-existing package
Jonathan Gibbons
jonathan.gibbons at oracle.com
Wed Dec 2 22:29:15 UTC 2015
On 12/02/2015 02:20 PM, Victor Rudometov wrote:
> On 02.12.2015 21:09, Jonathan Gibbons wrote:
>> Adding Victor back into the recipients.
>>
>> -- Jon
>>
>> On 12/02/2015 10:08 AM, Jonathan Gibbons wrote:
>>>
>>>
>>> On 12/02/2015 09:41 AM, Victor Rudometov wrote:
>>>> Hi,
>>>> Javac does not complain if user exports a package that does not
>>>> exist. If it was not done intentionally, it would be good to report
>>>> an error, or at least a warning.
>>>> Today was the third time I saw the code with a typo or just
>>>> incorrect package name in module-info's exports statement.
>>>>
>>>> Thanks.
>>>> Victor.
>>>>
>>>
>>> I agree we should improve javac in this area. We probably need some
>>> spec clarification from Alex on the intent here. See JLS 8, 7.4.3
>>> Observability of a package. In particular, that says that a package
>>> is observable if a subpackage is observable. javac tries to honor
>>> that specification, but there are well known hard-to-fix bugs in
>>> this area.
>>>
>>> As for module declarations, if p.q.Class exists in a module and
>>> no other classes anywhere in p or its subpackages, is it OK to
>>> export p from the module? From the point of view of the module, the
>>> package is observable, but it seems intuitively wrong to allow an
>>> export of a package that contains no types. In other words, if we
>>> are going to catch typos in exported package names, I think we ought
>>> to consider "empty" packages as well as mistyped packages.
>>>
>>> -- Jon
>>
>
> I agree with you, it is worth to consider disallowing "empty" packages
> together with mistyped ones.
> While I do not see the use for mistyped non-existing packages there
> are cases when "empty" might be useful. F.e., is the case of p.q.Class
> and p.r.OtherClass it would be easier to export just p, rather than
> both p.q and p.r. However I'd prefer to write explicit p.q and p.r.
>
> Victor
>
>
exports should never include subpackages, so "exports p;" could only
ever mean "exports public types in package p" which raises the
additional question, what if package p is not empty, but has no public
types to be exported.
-- Jon
More information about the jigsaw-dev
mailing list