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

Christophe Cordenier commented on TAP5-1263:
--------------------------------------------

@Paul, Just for information, if you set public visibility on init() in your 
sub-class then it works.

Since visibility cannot be reduced in Java and case above works as expected : 
parent before child and execution of the two methods (private and public)

@Committers I suggest to modify TransformMethodImpl.isOverride() and return 
false by default when visibility of method is private ? I have made some tests, 
it seems to work well. What's your opinion ?

> private methods in class heirarchy override each other with @SetupRender 
> annotation
> -----------------------------------------------------------------------------------
>
>                 Key: TAP5-1263
>                 URL: https://issues.apache.org/jira/browse/TAP5-1263
>             Project: Tapestry 5
>          Issue Type: Bug
>          Components: tapestry-core
>    Affects Versions: 5.1.0.5
>            Reporter: Paul Stanton
>            Assignee: Christophe Cordenier
>
> I've found a strange issue with the @SetupRender annotation when used in a 
> class hierarchy.
> Typically, in java 2 classes within a hierarchy can have the same signature 
> for a private method and not effect each other, so I would expect this to be 
> the case when both of these private methods are annotated with @SetupRender. 
> Therefore the output for case 1 and case 2 (below) should be the same and 
> print both messages "setupRender2", "setupRender1".
> However case 1 only prints "setupRender2" meaning it somehow overwrites the 
> method in it's implementing class.
> This is concerning because
> 1. there should never be a requirement that a sub-class knows of it's 
> super-classes implementation
> 2. if hierarchy does come into play, the subclass should override the super 
> class.
> CASE 1:
> ------------------
> public abstract class StartBase {
>    @SetupRender
>    private void init() {
>        log.debug("setupRender2");
>    }
> }
> public class Start extends StartBase {
>    @SetupRender
>    private void init() {
>        log.debug("setupRender1");
>    }
> }
> CASE 2:
> ------------------
> public abstract class StartBase {
>    @SetupRender
>    private void init2() {
>        log.debug("setupRender2");
>    }
> }
> public class Start extends StartBase {
>    @SetupRender
>    private void init1() {
>        log.debug("setupRender1");
>    }
> } 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to