< prev index next >
src/java.base/share/classes/java/lang/constant/ClassDesc.java
Print this page
rev 54588 : 8212975: ClassDesc should have a full name method
Reviewed-by: vromero
@@ -25,14 +25,13 @@
package java.lang.constant;
import java.lang.invoke.TypeDescriptor;
import java.util.stream.Stream;
-import sun.invoke.util.Wrapper;
-
import static java.lang.constant.ConstantUtils.binaryToInternal;
import static java.lang.constant.ConstantUtils.dropLastChar;
+import static java.lang.constant.ConstantUtils.getClassDisplayName;
import static java.lang.constant.ConstantUtils.internalToBinary;
import static java.lang.constant.ConstantUtils.validateMemberName;
import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.joining;
@@ -289,25 +288,29 @@
* suffixed with the appropriate number of {@code []} pairs for array types.
*
* @return the human-readable name
*/
default String displayName() {
- if (isPrimitive())
- return Wrapper.forBasicType(descriptorString().charAt(0)).primitiveSimpleName();
- else if (isClassOrInterface()) {
- return descriptorString().substring(Math.max(1, descriptorString().lastIndexOf('/') + 1),
- descriptorString().length() - 1);
- }
- else if (isArray()) {
- int depth = ConstantUtils.arrayDepth(descriptorString());
- ClassDesc c = this;
- for (int i=0; i<depth; i++)
- c = c.componentType();
- return c.displayName() + "[]".repeat(depth);
+ return getClassDisplayName(this, false);
}
- else
- throw new IllegalStateException(descriptorString());
+
+ /**
+ * Returns a fully qualified human-readable name for the type described
+ * by this descriptor.
+ *
+ * @implSpec
+ * <p>The default implementation returns the name
+ * (e.g., {@code int}) for primitive types, the qualified class name
+ * for class or interface types (e.g., {@code java.lang.String}),
+ * or the name of the component type with the appropriate
+ * number of {@code []} pairs for array types
+ * (e.g., {@code java.lang.String[]}).
+ *
+ * @return the fully qualified human-readable name
+ */
+ default String displayFullName() {
+ return getClassDisplayName(this, true);
}
/**
* Returns a field type descriptor string for this type
*
< prev index next >