tapestry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Chris Poulsen (JIRA)" <j...@apache.org>
Subject [jira] [Created] (TAP5-2560) Error in GenericsUtils affecting property access
Date Mon, 22 Aug 2016 07:12:21 GMT
Chris Poulsen created TAP5-2560:
-----------------------------------

             Summary: Error in GenericsUtils affecting property access
                 Key: TAP5-2560
                 URL: https://issues.apache.org/jira/browse/TAP5-2560
             Project: Tapestry 5
          Issue Type: Bug
    Affects Versions: 5.4.1
            Reporter: Chris Poulsen


There is an error somewhere in the GenericsUtils.resolve( TypeVariable typeVariable, Type
containingType ) method.

It resolves some type variables to their lower bound instead of the correct version.

We have model classes that uses lots of generics and in some cases tapestry reports that a
given property expression is invalid because some lower bound interface does not contain the
property in the expression.

I tried to see if I could find an easy fix, but ended up running out of time and simply replaced
the bodies of the 5 resolution methods in the GenericsUtils with guava reflect code and then
things started working as expected.

The interface setup that gives the error looks like this:
{code}
public interface NonTranslatableContentUnit<T extends ContentData> {
    T getContent();
}

public interface BinaryContentUnit<T extends BinaryContent> extends NonTranslatableContentUnit<T>
{}

public interface FileContentUnit extends BinaryContentUnit<FileContent> {}

public interface ContentData {
    isEmpty();
    ...
}

public interface BinaryContent extends ContentData {

    String getMimeType();
    ...
}   

public interface FileContent extends BinaryContent {}
{code}

Then we have a property expression on a FileContentUnit like: "content.mimeType" and that
fails with an error that says something like ContentData does not have a property MimeType.

As far as I can tell the resolve(TypeVariable, ..) method fails to do anything sensible if
the Type of the "containing class" is not an instance of ParameterizedType



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message