javap use internal class name when printing bound of type variable
Remi Forax
forax at univ-mlv.fr
Fri Nov 16 08:44:07 PST 2012
On 11/16/2012 04:55 PM, Jonathan Gibbons wrote:
> Rémi,
>
> Thank you. I have filed JDK-8003537 for this. I'll post a webrev
> for review in due course.
Ok,
thank you.
>
> -- Jon
Rémi
>
> On 11/16/2012 06:13 AM, Remi Forax wrote:
>> 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