You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by "Howard M. Lewis Ship (JIRA)" <ji...@apache.org> on 2011/04/01 21:17:05 UTC

[jira] [Commented] (TAP5-1493) Property expressions on properties that are covariant on a base class use the type of the base class property, not the covariant subclass

    [ https://issues.apache.org/jira/browse/TAP5-1493?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13014797#comment-13014797 ] 

Howard M. Lewis Ship commented on TAP5-1493:
--------------------------------------------

Well, ASM doesn't think so:

// access flags 0x1
public getBar()Lmypackage/Bar;
 L0
  LINENUMBER 25 L0
  ALOAD 0
  GETFIELD mypackage/EditFoo.creation : Lmypackage/Foo;
  INVOKEVIRTUAL mypackage/Foo.getBar()Lmypackage/Bar;
  ARETURN
  MAXSTACK = 1
  MAXLOCALS = 1

That looks like a real getBar() method on class Foo that returns type Bar (not AbstractBar).

> Property expressions on properties that are covariant on a base class use the type of the base class property, not the covariant subclass
> -----------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: TAP5-1493
>                 URL: https://issues.apache.org/jira/browse/TAP5-1493
>             Project: Tapestry 5
>          Issue Type: Bug
>          Components: tapestry-core, tapestry-ioc
>    Affects Versions: 5.3.0, 5.2.5
>            Reporter: Howard M. Lewis Ship
>            Priority: Critical
>
> public abstract class AbstractFoo
> {
>  public abstract AbstractBar getBar();
> }
> public class Foo extends AbstractFoo
> {
>  public Bar getBar();
> }
> Here property bar is covariant; the subclass (Foo) changes the type of the return value (from AbstractBar to just Bar). Assuming that Bar is a subclass of AbstractBar, that's fine.
> The bug is that in this circumstance, the PropertyConduitSource sees the type of
> property "bar" of class Foo as AbstractBar, not Bar.
> Interestingly, a little debugging showed that the getter method for property bar was "public AbstractBar Foo.getBar()" ... in other words, much like with Generics, covariant return types may be largely
> a fiction of the compiler inserting the necessary casts in place.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira