JDK 14 RFR of JDK-8230337: Clarify intention of Elements.{getPackageOf, getModuleOf}

Joe Darcy joe.darcy at oracle.com
Thu Aug 29 23:45:59 UTC 2019


Hi Jon,

For getModuleOf, how about:

     /**
      * Returns the module of an element.  The module of a module is
      * itself.
      *
      * If a package has a module as its {@linkplain
      * PackageElement#getEnclosingElement enclosing element}, that
      * module is the module of the package. If the enclosing element
      * of a package is {@code null}, {@code null} is returned for the
      * package's module.
      *
      * (One situation where a package may have a {@code null} module
      * is if the environment does not include modules, such as an
      * annotation processing environment configured for a {@linkplain
      * javax.annotation.processing.ProcessingEnvironment#getSourceVersion
      * source version} without modules.)
      *
      * Otherwise, the module of an element is equal to the module
      * {@linkplain #getPackageOf(Element) of the package} of the
      * element.
      *
      * @implSpec The default implementation of this method returns
      * {@code null}.
      *
      * @param e the element being examined
      * @return the module of an element
      * @since 9
      * @spec JPMS
      */
     default ModuleElement getModuleOf(Element e)

-Joe

On 8/29/2019 2:05 PM, Jonathan Gibbons wrote:
> Joe,
>
> The if-otherwise doesn't work here as you might have intended.
>
> If the package doesn't have a module for its enclosing element you
> fall into infinitely recursive "otherwise".
>
> -- Jon
>
> On 8/29/19 11:30 AM, Joe Darcy wrote:
>>
>> +     * If a package has a module as its {@linkplain
>> +     * PackageElement#getEnclosingElement enclosing element}, that
>> +     * module is the module of the package. Otherwise, the module of
>> +     * an element is equal to the module {@linkplain
>> +     * #getPackageOf(Element) of the package} of the element.
>> +     * 


More information about the compiler-dev mailing list