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