javap use internal class name when printing bound of type variable

Remi Forax forax at univ-mlv.fr
Fri Nov 16 06:13:53 PST 2012


Hi guys,
I've noticed a small bug in javap, the declared type variables prints 
their bounds with '/' instead of '.'

By example:
public abstract <U extends java/lang/Object> U 
fold(java.util.functions.Factory<U>, java.util.functions.Combiner<U, T, 
U>, java.util.functions.BinaryOperator<U>);

Here is the patch to use the type printer instead of toString() when 
printing
the declaration of the type variable.
It creates one JavaTypePrinter by methods because I haven't wanted to 
change the code too much,
but maybe the same JavaTypePrinter should be used for all methods.

cheers,
Rémi

diff -r bdcef2ef52d2 src/share/classes/com/sun/tools/javap/ClassWriter.java
--- a/src/share/classes/com/sun/tools/javap/ClassWriter.java    Thu Nov 
15 23:07:24 2012 -0800
+++ b/src/share/classes/com/sun/tools/javap/ClassWriter.java    Fri Nov 
16 15:08:37 2012 +0100
@@ -329,7 +329,7 @@
                  sb.append(suffix);
              }

-            private void appendIfNotEmpty(StringBuilder sb, String 
prefix, List<? extends Type> list, String suffix) {
+            void appendIfNotEmpty(StringBuilder sb, String prefix, 
List<? extends Type> list, String suffix) {
                  if (!isEmpty(list))
                      append(sb, prefix, list, suffix);
              }
@@ -438,7 +438,10 @@

          writeModifiers(flags.getMethodModifiers());
          if (methodType != null) {
-            writeListIfNotEmpty("<", methodType.typeParamTypes, "> ");
+            JavaTypePrinter printer = new JavaTypePrinter(false);
+            StringBuilder builder = new StringBuilder();
+            printer.appendIfNotEmpty(builder, "<", 
methodType.typeParamTypes, "> ");
+            print(builder);
          }
          if (getName(m).equals("<init>")) {
              print(getJavaName(classFile));




More information about the compiler-dev mailing list