On 8/8/05, Martin Cooper <[EMAIL PROTECTED]> wrote:
> On 8/8/05, Frank W. Zammetti <[EMAIL PROTECTED]> wrote:
> > Hello all,
> >
> > As per Ted's suggestion, this thread is meant to discuss updating the
> > Struts CheckStyle rules file as brought up in Bugzilla ticket #35956.
> >
> > My motivation for this suggestion is because I wanted to do what I could
> > to help towards the 1.3 release, and most of the true issues seem to
> > have been resolved or are being dealt with.  Resolving as many of the
> > CheckStyle complaints as possible is something I can do, so I am giving
> > it a go.
> >
> > I am a big believer in static code analysis and in releasing things that
> > have as close to a perfectly clean report as possible.  I usually run
> > CheckStyle, PMD and JLint against my own stuff, but one thing at a time :)
> 
> You forgot FindBugs. It really does find bugs. ;-)
> 

Yep ... as well as questionable usage idioms like iterating over the
keys of a Map and calling map.get() for each one, versus iterating
over the entrySet() return.  :-)

> > I'm suggesting two things really... one is to begin using CheckStyle 3.5
> > (which would have to be added to iBiblio) and to add some additional
> > rules to the rules file.
> 
> Checkstyle is run from Maven, so whether or not we move to Checkstyle
> 3.5 right now depends on whether or not the Maven Checkstyle plugin
> supports it. If it does, I'm fine with upgrading, assuming you can get
> the new Checkstyle jar added to ibiblio.
> 
> As for adding more checks - given how many errors/warnings we have
> now, I would be -1 on changes that generate more, until we seriously
> reduce the current count. Once we're clean, or nearly so, I'd be OK
> with selectively enabling more checks.
> 
> > 3.5 adds some checks that could be nice to enable down the road and also
> > includes some bug fixes, which of course you always want to see in a
> > code analysis tools to avoid false alerts.
> >
> > As for the new rules I'd like to enable...
> >
> > * StrictDuplicateCode
> >    Duplicate code is just plain bad... not in terms of something not
> >    working, although that is certainly possible in some situations, but
> >    it's just a sign of carelessness.  If nothing else, I'm sure no one
> >    wants the Struts code base to show any carelessness that could easily
> >    be avoided.
> 
> Per Craig's comment, I think we'd want to see how much this finds that
> we'd want to clean up, versus what we want to keep the way it is, and
> if this can be fine-tuned. I'm very much opposed to having warnings
> show up that we declare to be "OK", so the goal would have to be a
> completely clean Checkstyle run rather than one that results in
> warnings that "we can ignore".
> 

Agreed.  False positives will naturally lead to ignoring the true
negatives that might get intermixed.

> > * AbstractClassName
> >    This one might not be one that can be activated because I can conceive
> >    of it breaking the public interface if it turns up any classes not
> >    properly named already... then again, it may very well find no such
> >    problems, in which case turning it on is good going forward.
> 
> We could try it out, but I seriously doubt that we could come up with
> a pattern that would make this rule pass. ;-) And changing the class
> names to make it work might well break backwards compatibility.
> 
> > * ImportOrder
> >    Imports in alphabetical order just makes it a little easier to find if
> >    something is used.  This is obviously not going to break anything, and
> >    is easy to fix with virtually any IDE in existence today (or an
> >    already-mapped macro in UltraEdit for us anti-IDE folk), so it's
> >    low-hanging fruit, might as well grab it I figure :)
> 
> I don't much care about this one. If a class has so many imports that
> you can't see the wood for the trees, the class is probably due for
> refactoring anyway. ;-)
> 
> I'm definitely with Craig, though, on the wildcard imports. Once
> bitten, twice shy.
> 
> > * CovariantEquals
> >    The CheckStyle docs say it all on this: "Mistakenly defining a
> >    covariant equals() method without overriding method
> >    equals(java.lang.Object) can produce unexpected runtime behaviour."
> 
> I'm OK with this one. I don't think we actually define equals() much anyway.
> 

Although maybe we should?  The configuration classes come to mind ...

> > * StringLiteralEquality
> >    I'd be very willing to bet there are no such mistakes in Struts, doing
> >    s == "test" when you meant s.equals("test") is indeed a novice
> >    mistake.  Still, better safe than sorry I figure.
> 
> Sure. That's more a bug than a style issue anyway.
> 
> > * IllegalCatch
> >    Again, as the docs say: "Catching java.lang.Exception, java.lang.Error
> >    or java.lang.RuntimeException is almost never acceptable."  In this
> >    cases where it actually *IS* acceptable, simply ignoring the error is
> >    acceptable.
> 
> I'm not sure if there are places in Struts where we do this and need
> to do this. If not, then I'm fine with adding this check to make sure
> that we don't do it in the future. If so, then we need to find a way
> to avoid warnings in these particular cases.
> 
> > * PackageDeclaration
> >    This is almost a silly check frankly, but again, no harm no foul.
> 
> Yes, this is silly. If Struts committers are checking in classes with
> no package declaration, then I think we have bigger problems. ;-)
> 

Such as "it won't work on a JDK 1.4 platform" :-)

Craig

> > * ExplicitInitialization
> >    It's kind of a code smell to initialize class members to their default
> >    values.  I've also heard it argued that it introduces slight
> >    inefficiencies, but I'm not sure I believe that personally.
> 
> I'm pretty sure that modern JVMs deal with the double init, so I don't
> think there's any perf issue. Also, it's sometimes clearer for Java
> newbies to see things initialised. However, I don't really care one
> way or the other.
> 
> > * UnnecessaryParentheses
> >    I personally find code with parenthesis that aren't actually needed to
> >    be more difficult, some feel the opposite.  If they are truly not
> >    needed though, it's just more characters for my brain to parse I
> >    figure.
> 
> I agree with Craig on this one, but I'm not sure exactly what the rule
> will flag and not flag. I'd be fine if it flags gratuitously
> unnecessary parentheses and leaves those that aid in clarity, but that
> seems like a rather subtle semantic for a tool like Checkstyle to deal
> with. ;-)
> 
> > At the following URL...
> >
> > http://www.omnytex.com/struts_checkstyle_reports.zip
> >
> > ...you can download three CheckStyle reports...
> >
> > The first is with the current rules file, resulting in 4829 complaints
> > (many of which are relatively minor things, i.e., tabs instead of
> > spaces, javadoc problems, etc.)
> 
> Dang, I thought I caught all the tabs! I sure tried. Maybe people have
> been adding them again...
> 
> --
> Martin Cooper
> 
> 
> > The second is the updated version with all the above checks added...
> > this results in 16584 complaints, which is clearly a lot... however, the
> > vast majority of the additional complaints result from the
> > StrictDuplicateCode and are probably ignorable, so that's one rule that
> > on second thought maybe shouldn't be added...
> >
> > The third is also an updated rules file NOT including the
> > StrictDuplicateCode check.  This results in a more reasonable 5580 (only
> > 751 more than the current ruleset).
> >
> > I would be more than happy to provide a patch for the rules file if
> > there is a consensus on what should or should not be enabled, although I
> > hardly think a patch is required :)   Once I know what the ruleset will
> > look like I'd like to start dealing with as many of the complaints as
> > possible, so the sooner there can be a resolution on this the better.
> >
> > Thanks, I look forward to hearing everyone' thoughts :)
> >
> > --
> > Frank W. Zammetti
> > Founder and Chief Software Architect
> > Omnytex Technologies
> > http://www.omnytex.com
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to