JDK 12 RFR of JDK-6304578: (reflect) toGenericString fails to print bounds of type variables on generic methods

joe darcy joe.darcy at oracle.com
Thu Oct 25 21:47:51 UTC 2018


Hi Peter,

Coming back to this review after my Code One activities this year have 
run their course...


On 10/17/2018 3:07 PM, Peter Levart wrote:
> Hi Joe,
>
> On 10/17/2018 09:16 PM, joe darcy wrote:
>> PS In response to some off-list feedback, an updated webrev uses a 
>> stream-ier implementation:
>>
>> http://cr.openjdk.java.net/~darcy/6304578.1/
>
> I suggest further niceing:
>
> - if you make typeVarBounds() static, you could use it in Stream.map() 
> as a method reference.
> - in Class.java line 285, you could also use Type::getTypeName method 
> reference
> - in Class.java line 269, wouldn't the output be nicer if the 
> delimiter in joining collector was ", " instead of "," (with a space 
> after comma)?
>
> The same for Executable.
>

Revised webrev generally taking those suggestions up at:

     http://cr.openjdk.java.net/~darcy/6304578.2/

Diff of relevant parts of prior version below (screening out unrelated 
changes to Class made in the interim).

The behavior with respect to using a comma as a separator is part of the 
spec of these methods and I don't want to alter that as part of this change.

Thanks,

-Joe

diff -r 6304578.1/raw_files/new/  6304578.2/raw_files/new/
diff -r 
6304578.1/raw_files/new/src/java.base/share/classes/java/lang/Class.java 
6304578.2/raw_files/new/src/java.base/share/classes/java/lang/Class.java
268c268
<         sb.append(Stream.of(typeparms).map(t -> typeVarBounds(t)).
---
 > sb.append(Stream.of(typeparms).map(Class::typeVarBounds).
279c279
<     String typeVarBounds(TypeVariable<?> typeVar) {
---
 >     static String typeVarBounds(TypeVariable<?> typeVar) {
285c285
<         Stream.of(bounds).map(e -> e.getTypeName()).
---
 >         Stream.of(bounds).map(Type::getTypeName).
3413c3413,3414
<         StringJoiner sj = new StringJoiner(", ", getName() + "." + 
name + "(", ")");
---
 >         StringBuilder sb = new StringBuilder();
 >     sb.append(getName() + "." + name + "(");
3415,3420c3416,3420
<             for (int i = 0; i < argTypes.length; i++) {
<                 Class<?> c = argTypes[i];
<                 sj.add((c == null) ? "null" : c.getName());
<             }
<         }
<         return sj.toString();
---
 >         Stream.of(argTypes).map(c -> {return (c == null) ? "null" : 
c.getName();}).
 >         collect(Collectors.joining(","));
 >     }
 >     sb.append(")");
 >         return sb.toString();
diff -r 
6304578.1/raw_files/new/src/java.base/share/classes/java/lang/reflect/Executable.java 
6304578.2/raw_files/new/src/java.base/share/classes/java/lang/reflect/Executable.java
116c116
<         sb.append(Stream.of(parameterTypes).map(p -> p.getTypeName()).
---
 > sb.append(Stream.of(parameterTypes).map(Type::getTypeName).
122c122
<         sb.append(Stream.of(exceptionTypes).map(e -> e.getTypeName()).
---
 > sb.append(Stream.of(exceptionTypes).map(Type::getTypeName).
137c137
<     String typeVarBounds(TypeVariable<?> typeVar) {
---
 >     static String typeVarBounds(TypeVariable<?> typeVar) {
143c143
<         Stream.of(bounds).map(e -> e.getTypeName()).
---
 >         Stream.of(bounds).map(Type::getTypeName).
156c156
<         sb.append(Stream.of(typeparms).map(t -> typeVarBounds(t)).
---
 > sb.append(Stream.of(typeparms).map(Executable::typeVarBounds).
176,180c176,177
<                 StringJoiner joiner = new StringJoiner(",", " throws 
", "");
<                 for (Type exceptionType : exceptionTypes) {
<                     joiner.add(exceptionType.getTypeName());
<                 }
<                 sb.append(joiner.toString());
---
 > sb.append(Stream.of(exceptionTypes).map(Type::getTypeName).
 >               collect(Collectors.joining(",", " throws ", "")));




More information about the core-libs-dev mailing list