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:
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 {

public interface BinaryContent extends ContentData {

    String getMimeType();

public interface FileContent extends BinaryContent {}

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

View raw message