[ 
https://issues.apache.org/jira/browse/TOMAHAWK-1235?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12602771#action_12602771
 ] 

Simon Kitching commented on TOMAHAWK-1235:
------------------------------------------

I agree that splitting out the inner classes here makes things a little more 
readable.

I'm not so convinced that moving all the static methods out is useful. How is a 
bunch of static methods on a utility class easier than a bunch of static 
methods within the HtmlCalendarRenderer better?

So my personal feeling is about -0.1 on applying this patch (if all of the more 
specific points below are fixed first). Not completely opposed, but not 
convinced it is worth doing - and in particular, the risk of introducing new 
bugs for no great benefit.

Specific feedback regarding this specific patch:

(1)
There is significant binary incompatibility. Methods that were previously 
public on the HtmlCalendarRenderer class are now on util classes instead.

I don't see this as too serious here; it should have been reasonably clear to 
users that the HtmlCalendarRenderer class is not one that would provide a 
stable API. Of course we *should* try to avoid breaking compatibility, but this 
case seems ok to me. Best to send an email to the dev list, though, seeing if 
anyone objects to changing the API on this class just for the purposes of 
"tidiness".

(2)
There are a lot more public methods and classes than there used to be. 
Previously almost all these helper methods were private; this patch makes them 
all public. But every time we publish a public method, it is another binary 
compatibility issue for the future. 

I would like at a *minimum* to see comments on all of the new util classes 
stating that this is NOT a public API and nothing in these classes can be 
depended on to remain stable between releases.

Alternately, it would be possible to reduce this by leaving these new utils 
classes in the parent dir, and making them package scoped. But it appears that 
a few util methods are used by the HtmlDateRenderer class which is in another 
package. Are they really used by both renderer classes? If so, then maybe a 
public utils class could be created to hold just those shared methods?

(3)
In encodeEnd before RendererUtile.checkParamValidity is invoked you've:
(1) inserted a cast of the component param, and
(2) dereferenced the facesContext param.
But checkParamValidity is specifically designed to check those two params for 
sanity *before* they are used.

This occurs in other methods too

(4)
Previously private constants have been made public, eg
   RESOURCE_NONE
   JAVASCRIPT_ENCODED

And a comment (that I added) on RESOURCE_NONE was removed.

(5)
Your patch includes tabs. Please use spaces only.

(6)
It is considered good Java style for variables to be declared where they are 
first assigned. But your patch changes some code that does this, and instead 
the variables are now mostly declared at the top of the function, and 
initialised to null.

Please put this back as it was, eg in encodeEnd:

In current code:
  Calendar timeKeeper = Calendar.getInstance(currentLocale);

In proposed patch:
  Calendar timeKeeper = null;
  ....
  timeKeeper = Calendar.getInstance(currentLocale);

And in general, initialising variables to null should be avoided. The java 
compiler has a nice feature that tracks whether a variable has been initialised 
before it is used, and reports an error if not. But if variables are 
initialised to null at the top of the function, this nice feature is completely 
ineffective.


> Refactoring Calendar component
> ------------------------------
>
>                 Key: TOMAHAWK-1235
>                 URL: https://issues.apache.org/jira/browse/TOMAHAWK-1235
>             Project: MyFaces Tomahawk
>          Issue Type: Improvement
>          Components: Calendar
>    Affects Versions: 1.1.7-SNAPSHOT
>            Reporter: Hazem Saleh
>             Fix For: 1.1.7-SNAPSHOT
>
>         Attachments: calendar_refactored.patch
>
>   Original Estimate: 336h
>  Remaining Estimate: 336h
>
> Refactoring Calendar component.

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