Just going through to see what's new/changed, and a couple small
thoughts to do with as you will.  I know this is a lot, but I hope it's
useful feedback, whatever you do with it.

>(*) Abstraction->Raw types
>Shouldn't this be disabled unless under 1.5 (like @Deprecated), or at
>least have that as an option?  Probably a general thing about generics
>-- some folks used the 1.4 version but others did not.  I don't know
>how to do it, but maybe a checkbox to disable/enable all generic checks
>under 1.4?

This is one that actually only turns itself on under 1.5 more or less automatically,
since you'll only see this if you are coding against classes that have type arguments.
If you're using the 1.5 libraries, you should probably be using them with parameters.


>(*) Class Struct->Static inheritence
>This is only avoidable easily with 1.5 imports of fields.  Maybe this
>also should have a "enable only if 1.5".

Strongly disagree.  Static inheritance can easily be avoided even with earlier JVMs,
simply by qualifying all the references. Indeed, there's now a quickfix that does
just that.  This is a best practice, as static inheritance unnecessarily pollutes
generated Javadoc, as well as being very iffy from an OO theory standpoint.

>(*) Cloning->doesn't throw CNSE
>I don't know who should ever turn this on.  If you are making a class
>cloneable, you often will not throw CNSE.
You want clone() to throw CNSE so that subclasses which don't wish to support cloning
can be written.  Not a major use, but somewhat important for those writing libraries,
and often forgotten.

(*) General
>Just a question: How do you decide whether a check is "General" or
>"Code Style"?  Just wondering.

All of the "General" and "Local Analysis" inspections are built-in by JetBrains.
I've asked them about making more descriptive names, but haven't got a response.

>Maybe I should be clear -- I want to use one setting for errors and
>switch between projects in 1.5 and 1.4.  So I don't want to play around
>with these settings.  For example, I want to use annotations properly
>in 1.5 code and not see them at all in code that I want to keep 1.4
>compatible.

I have two separate but largely similar profiles for just that purpose.

>Should be able to say "Same as <drop down list of other conventions>".

Sadly, the current API prohibits that.  I'll open a ticket.

>(*) Performance issues
>I just want to mark some disquiet here.

I generally agree, but will note that there is one compelling counterargument.
J2ME environments count cycles and class file bytes like a supermodel counts
calories, and for good solid engineering and economic reasons.  They generally
lack JITs and state-of-the-art GC.  I'm adding some (frankly odd) J2ME specific
inspections in the next release, and will probably move some of the "Performance"
issues to the new "J2ME" category.  Certainly
"Field repeatedly accessed in method" and "Anonymous inner class may be made
named static inner class" will be moved to J2ME, as you
are quite right that stuff like that simply doesn't matter to any rational
J2SE or J2EE application.  "Inner class may be static" will probably be kept
where it is, although that's up in the air.

>(*) Performance issues -> StringBuffer field
>This is not a performance issue, is it?
I'm probably also splitting out a "Memory management" category.  StringBuffer fields
are only a problem to the extent that they can grow larger than you expect,
and are thus good places to search for memory leaks.

>(*) Performance issues -> multiply/div by power of 2
>This is flat wrong.
Yup, this one will either be killed or moved to the "J2ME" category.

>(*) Performance issues -> static collection
>Should have an option to ignore WeakHashMap or possibly some list of
>types (as in "prohibited exception" checks) that are weak collection
>types.
Ooh, good call.

>(*) Portability issues -> Hardcoded file sep
>Maybe an exception for URL classes?  Or strings that look like URLS?
>In them, the slash dir is pre-defined.  (This is the reason I leave
>this off -- it flags too many URL contents.)

It should be filtering this already, the logic for guessing URL's is quite involved.
'll look into it.

>(*) Confusing Code -> COnfusing 'else'
>The description could use a simple example to show what you mean.
Yup.

>(*) Probable bugs -> compareto vs. compareTo
>This is a special case of a general problem -- a subclass that provides
>a method whose name differs only in case from that of an inherited
>method.

Good ideas.

>(*) Probably bugs -> floating point equality
>Have an option to ignore checks for 0.0 and -0.0?  And the constants in
>Float and Double?  It's reasonable to say "if (f ==
>Double.POSITIVE_INFINITY)", and 0.0 is a very well-defined value.

Good idea.

>A new check for comparsion to Double.NaN?  That's always false:
>Double.NaN != Double.NaN.

May already be implemented as a "constant condition" by IDEA.  If not, it's
certainly a worthwhile candidate.

>Compressible: the non-constant string exceptions.

These were literally just added this weekend, and I'm going to let people play
with them a bit before seeing how to modify them.  Compression and a general list
solution are definitely within possible future scope.

>(*) Security -> serializable
>When would I have a serializable class that wasn't deserializable?  Is
>this really two checks?  (If so, maybe they're compressible?)

Say you subclass a Serializable library class, and want it to include secure
information (or generally just want to make your project hyper-secure).  What
you need to do then is explicitly make readObject() and writeObject() throw exceptions,
to keep the bad guys from either writing your objects to a file or loading garbage
objects into your application somehow.  Yes, these are probably compressible.

(*) Serialization -> Instance var ...
Two things: (1) "Instance var" is a "field".  Other places you use
"field".  Probably ought to be consistent overall.  (I used -- nay,
insisted upon -- "field" in my book because it's the thing people
regularly say.); (2) You don't say whether you take

>readObject and writeObject mismatched check?  Same for
>readResolve/writeReplace?

Good ones.

>Why is there a separate check for being without serialVersionUID for
>class and non-static inner class?

Because the second is much more dangerous, as many more changes can cause the
default serialVersionUID to break.

>Check for readobject vs. readObject (as in compareto vs. compareTo)?
>And for the other methods, or any other signature mismatch (a
>readObject(Foo) method)?

Reasonable.

>(*) Verbose -> Redundant no-arg
>This is a problem -- if you don't declare the no-arg ctor, then you
>can't javadoc it, and that's bad.  At the least it should, by default,
>not complain about such ctors that have javadoc.  Removing them is not
>harmless.
Good eye. I'll add a "ignore redundant no-arg constructors if javadoced" flag.

>(*) Verbose -> Redundant type cast
>Isn't this already somewhere about "Overly strong type casts"?
>Wouldn't that catch all the same things?

"Redundant" is JetBrains.  "Overly strong" is one of mine.  If one were designing
from a blank sheet of paper, you would merge these

>(*) Verbose -> Unn 'continue'
>As a way of showing that a loop is *meant* to be empty, a common style
>is this:
>	while (...)
>		continue;
>In this case I would want that warning suppressed.  Probably need an
>option.

I've never seen such a style, but am not doubting you.  Perhaps an option.

>(*) Verbose -> Unn boxing
>Is there any reason someone would want to set this a different way than
>they set Unn unboxing?  At least these seem compressible.

Reasonable.
