[forge-issues] [JBoss JIRA] (ROASTER-135) Types.toResolvedType does not resolve types with wildcard correctly

George Gastaldi (Jira) issues at jboss.org
Fri May 8 07:03:00 EDT 2020


     [ https://issues.redhat.com/browse/ROASTER-135?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

George Gastaldi updated ROASTER-135:
------------------------------------
    Fix Version/s: 2.21.2.Final


> Types.toResolvedType does not resolve types with wildcard correctly
> -------------------------------------------------------------------
>
>                 Key: ROASTER-135
>                 URL: https://issues.redhat.com/browse/ROASTER-135
>             Project: Roaster
>          Issue Type: Bug
>          Components: API
>    Affects Versions: 2.21.1.Final
>            Reporter: Viktor Micsko
>            Priority: Major
>             Fix For: 2.21.2.Final
>
>
> (2.21.2.Final and 2.21.3-SNAPSHOT are also affected)
> https://github.com/forge/roaster/blob/master/api/src/main/java/org/jboss/forge/roaster/model/util/Types.java
> Types.toResolvedType joins the generic parts using comma as follows:
> {code:java}
> if (Types.isGeneric(type))
> {
>    StringJoiner genericJoiner = new StringJoiner(",");
>       for (String genericPart : Types.splitGenerics(type))
>       {
>          genericJoiner.add(toResolvedType(genericPart, importer));
>       }
>       builder.append("<").append(genericJoiner.toString()).append(">");
> }
> {code}
> This behaviour is incorrect for types like List<? extends Number>.
> It also leads to the following being incorrectly generated as void return type for such types:
> {code:java}
> Type<JavaInterfaceSource> returnType = ...
> MethodSource<JavaClassSource> method = ...
> destinationMethod.setReturnType(returnType);
> {code}
> A simple fix would be:
> {code:java}
> if (Types.isGeneric(type))
> {
>    StringJoiner genericJoiner = new StringJoiner(",");
>    for (String genericPart : Types.splitGenerics(type))
>    {
>       genericJoiner.add(toResolvedType(genericPart, importer));
>    }
>    String genericParts = genericJoiner.toString();
>    genericParts = genericParts.replace("?extends", "? extends ");
>    genericParts = genericParts.replace("?super", "? super ");
>    builder.append("<").append(genericParts).append(">");
> }
> {code}



--
This message was sent by Atlassian Jira
(v7.13.8#713008)


More information about the forge-issues mailing list