JDK 16 RFR of JDK-8248983: Add Name.isEmpty

Joe Darcy joe.darcy at oracle.com
Thu Jul 9 19:25:44 UTC 2020


On 7/8/2020 5:05 PM, Jonathan Gibbons wrote:
>
> On 7/8/20 3:31 PM, forax at univ-mlv.fr wrote:
>> ----- Mail original -----
>>>
[snip]


>> I can buy that the concept of empty name is important, following what 
>> you are saying, length() should be re-abstracted for the exact same 
>> reason.
>> I think i prefer to follow the current implementation of Name that 
>> explain the concept of empty name in the top level javadoc of Name, 
>> and fix the sentence "An empty Name has a length of zero." to mention 
>> isEmpty.
>
> The concept of 'empty name' could be explained in the class comment 
> for Name, as Rémi suggests, and enclosed or prefixed by some HTML that 
> defines an 'id' such as "empty-name" that can be referenced from other 
> locations, without having to introduce a new method for the concept. 
> (But, for me, I'm OK either way.)
>

Following the approach suggested by Jon, here is a version that defines 
and HTML anchor and does *not* introduce a method override:

     http://cr.openjdk.java.net/~darcy/8248983.1/

Patch below.

I think this is an improvement over the current API and a bit simpler. 
If others agree, I'll go forward with this change and withdraw the CSR.

Thanks for the reviews,

-Joe

--- 
old/src/java.compiler/share/classes/javax/lang/model/element/Element.java 
2020-07-09 10:40:04.677417445 -0700
+++ 
new/src/java.compiler/share/classes/javax/lang/model/element/Element.java 
2020-07-09 10:40:04.289417445 -0700
@@ -137,7 +137,7 @@
       *
       * If this element represents an unnamed {@linkplain
       * PackageElement#getSimpleName package} or unnamed {@linkplain
-     * ModuleElement#getSimpleName module}, an empty name is returned.
+     * ModuleElement#getSimpleName module}, an <a 
href=Name.html#empty_name>empty name</a> is returned.
       *
       * If it represents a {@linkplain ExecutableElement#getSimpleName
       * constructor}, the name "{@code <init>}" is returned.  If it
@@ -146,7 +146,7 @@
       *
       * If it represents an {@linkplain TypeElement#getSimpleName
       * anonymous class} or {@linkplain ExecutableElement#getSimpleName
-     * instance initializer}, an empty name is returned.
+     * instance initializer}, an <a href=Name.html#empty_name>empty 
name</a> is returned.
       *
       * @return the simple name of this element
       * @see PackageElement#getSimpleName
--- 
old/src/java.compiler/share/classes/javax/lang/model/element/ExecutableElement.java 
2020-07-09 10:40:05.517417445 -0700
+++ 
new/src/java.compiler/share/classes/javax/lang/model/element/ExecutableElement.java 
2020-07-09 10:40:05.089417445 -0700
@@ -146,7 +146,7 @@
       * initializer.  For a constructor, the name {@code "<init>"} is
       * returned, for a static initializer, the name {@code "<clinit>"}
       * is returned, and for an anonymous class or instance
-     * initializer, an empty name is returned.
+     * initializer, an <a href=Name.html#empty_name>empty name</a> is 
returned.
       *
       * @return the simple name of a constructor, method, or
       * initializer
--- 
old/src/java.compiler/share/classes/javax/lang/model/element/ModuleElement.java 
2020-07-09 10:40:06.349417445 -0700
+++ 
new/src/java.compiler/share/classes/javax/lang/model/element/ModuleElement.java 
2020-07-09 10:40:05.893417445 -0700
@@ -51,7 +51,7 @@

      /**
       * Returns the fully qualified name of this module.  For an
-     * {@linkplain #isUnnamed() unnamed module}, an empty name is returned.
+     * {@linkplain #isUnnamed() unnamed module}, an <a 
href=Name.html#empty_name>empty name</a> is returned.
       *
       * @apiNote If the module name consists of one identifier, then
       * this method returns that identifier, which is deemed to be
@@ -69,7 +69,7 @@

      /**
       * Returns the simple name of this module.  For an {@linkplain
-     * #isUnnamed() unnamed module}, an empty name is returned.
+     * #isUnnamed() unnamed module}, an <a 
href=Name.html#empty_name>empty name</a> is returned.
       *
       * @apiNote If the module name consists of one identifier, then
       * this method returns that identifier.  If the module name
--- 
old/src/java.compiler/share/classes/javax/lang/model/element/Name.java 
2020-07-09 10:40:07.253417445 -0700
+++ 
new/src/java.compiler/share/classes/javax/lang/model/element/Name.java 
2020-07-09 10:40:06.785417445 -0700
@@ -33,7 +33,7 @@
   * implementation are usable in collections while {@code Name}s from
   * different implementations may not work properly in collections.
   *
- * <p>An empty {@code Name} has a length of zero.
+ * <p><a id="empty_name">An {@linkplain CharSequence#isEmpty() empty} 
{@code Name} has a {@linkplain CharSequence#length() length} of zero.</a>
   *
   * <p>In the context of {@linkplain
   * javax.annotation.processing.ProcessingEnvironment annotation
--- 
old/src/java.compiler/share/classes/javax/lang/model/element/PackageElement.java 
2020-07-09 10:40:08.017417445 -0700
+++ 
new/src/java.compiler/share/classes/javax/lang/model/element/PackageElement.java 
2020-07-09 10:40:07.617417445 -0700
@@ -53,7 +53,7 @@
      /**
       * Returns the fully qualified name of this package.
       * This is also known as the package's <i>canonical</i> name.
-     * For an {@linkplain #isUnnamed() unnamed package}, an empty name 
is returned.
+     * For an {@linkplain #isUnnamed() unnamed package}, an <a 
href=Name.html#empty_name>empty name</a> is returned.
       *
       * @apiNote The fully qualified name of a named package that is
       * not a subpackage of a named package is its simple name. The
@@ -70,7 +70,7 @@

      /**
       * Returns the simple name of this package.  For an {@linkplain
-     * #isUnnamed() unnamed package}, an empty name is returned.
+     * #isUnnamed() unnamed package}, an <a 
href=Name.html#empty_name>empty name</a> is returned.
       *
       * @return the simple name of this package or an empty name if
       * this is an unnamed package
--- 
old/src/java.compiler/share/classes/javax/lang/model/element/TypeElement.java 
2020-07-09 10:40:08.761417445 -0700
+++ 
new/src/java.compiler/share/classes/javax/lang/model/element/TypeElement.java 
2020-07-09 10:40:08.361417445 -0700
@@ -121,7 +121,7 @@
       * Returns the fully qualified name of this type element.
       * More precisely, it returns the <i>canonical</i> name.
       * For local and anonymous classes, which do not have canonical names,
-     * an empty name is returned.
+     * an <a href=Name.html#empty_name>empty name</a> is returned.
       *
       * <p>The name of a generic type does not include any reference
       * to its formal type parameters.
@@ -141,7 +141,7 @@
      /**
       * Returns the simple name of this type element.
       *
-     * For an anonymous class, an empty name is returned.
+     * For an anonymous class, an <a href=Name.html#empty_name> empty 
name</a> is returned.
       *
       * @return the simple name of this class or interface,
       * an empty name for an anonymous class





More information about the compiler-dev mailing list