[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-openjfx-dev
Subject:    Re: [9] Code Review Request For 8157350: Encapsulate impl_ methods in Shapes related classes
From:       Jim Graham <james.graham () oracle ! com>
Date:       2016-05-20 23:23:42
Message-ID: 1a8c4ab3-e41e-5e5f-57b3-ac8ab7da2617 () oracle ! com
[Download RAW message or body]

Sounds good...

			...jim

On 5/20/16 3:56 PM, Kevin Rushforth wrote:
> 
> 
> Jim Graham wrote:
> > 
> > 
> > On 5/20/16 3:33 PM, Kevin Rushforth wrote:
> > > This is needed for those cases where we need to encapsulate a method in the \
> > > base Shape class that used to be public and overridden in the subclasses, not \
> > > all of which are in the same package. It may seem like overkill, but we need a \
> > > way to associate the the Shape instance of a particular subtype with the helper \
> > > instance of the correct subtype. Each class in the hierarchy calls the specific \
> > > XxxxxHelper.initHelper(this) method so that it can store back an instance of \
> > > the right helper in the base class. A package-private method wouldn't work \
> > > given that some shapes (e.g., Text) are in different packages.
> > 
> > Right, but (taking Arc as an example) Arc makes a specific reference to ArcHelper \
> > which turns around and hands a specific instance to its own instance field to a \
> > method that stores the value in the shapeHelper field.  How is that any different \
> > from just putting shapeHelper = ArcHelper.instance without 2 method calls and an \
> > accessor in the way?
> 
> But the shapeHelper field is in the base Shape class not in the Arc class. If we \
> wanted a different pattern for classes in the same package as the base class from \
> classes in a different package then I guess I can see how this is solvable by \
> making the ArcHelper.getInstance() method public and having the Arc() constructors \
> call the package-scope setHelper(ShapeHelper) method in Shape, but as soon as Chien \
> move the stored helper instance up to Node (which is the next step) it would stop \
> working. 
> > Also, what if someone creates a custom sub-class of Shape?  (Not sure if that is \
> > supported or possible, but it is a public class with a public constructor so I \
> > don't think it is impossible.)
> 
> Since we don't have public API for many of the things they would need even today, \
> an application isn't able to do that. They couldn't really do it anyway before this \
> change, since impl_getPeer() and several other methods aren't implementable by an \
> application (NGNode is not publicly exported for example). 
> 
> > > Good reminder about the implicit "public Shape()" constructor. Chien already \
> > > had to add an explicit public no-arg constructor in two classes. We really \
> > > shouldn't rely on the implicit constructor in our public classes, since it \
> > > makes it easy to make such a mistake.
> > 
> > It would be good to have a tool and/or automated test that warns about this.  \
> > Another reason is that the implicit constructor has no javadocs associated with \
> > it...
> 
> Indeed. I wonder if doclint will help (we are in the process of making our docs \
> doclint clean). 
> -- Kevin
> 
> 
> > 
> > ...jim


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic