< 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 >