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]