JDK-8271903 : Add getOutermostTypeElement to javax.lang.model utility class
  • Type: CSR
  • Component: core-libs
  • Sub-Component: javax.lang.model
  • Priority: P4
  • Status: Draft
  • Resolution: Unresolved
  • Fix Versions: 18
  • Submitted: 2021-08-04
  • Updated: 2021-08-04
Related Reports
CSR :  
Description
Summary
-------
Add a `getOutermostTypeElement` convenience method to `javax.lang.model.util.Elements`.

Problem
-------

The `javax.lang.model` API does not have a convenient way to access the outermost class or interface that may contain an element.

Solution
--------

Add the method in question to the convenience interface intended to host such methods. A functional default implementation is included as part of the interface update.

Specification
-------------

    /**
     * {@return the outermost type element an element is contained in
     * if such a containing element exists; otherwise returns {@code
     * null}}
     *
     * {@linkplain ModuleElement Modules} and {@linkplain
     * PackageElement packages} do <em>not</em> have a containing type
     * element and therefore {@code null} is returned for those kinds
     * of elements.
     *
     * A {@link NestingKind#TOP_LEVEL top-level} class or
     * interface is its own outermost type element.
     *
     * @implSpec
     * The default implementation of this method first checks the kind
     * of the argument. For elements of kind {@code PACKAGE}, {@code
     * MODULE}, and {@code OTHER}, {@code null} is returned. For
     * elements of other kinds, the element is examined to see if it
     * is a top-level class or interface. If so, that element is
     * returned; otherwise, the {@linkplain
     * Element#getEnclosingElement enclosing element} chain is
     * followed until a top-level class or interface is found. The
     * element for the eventual top-level class or interface is
     * returned.
     *
     * @param e the element being examined
     * @see Element#getEnclosingElement
     * @since 18
     */
    default TypeElement getOutermostTypeElement(Element e)