Re: Tidy enums
On 18.05.2009 15:06, Roedy Green wrote:
Do you know of a Java source code tidier that will reorder enums in
alphabetical order?
I don't and I also doubt whether this is a good idea: enums might be
ordered for a reason. Pure alphabetical ordering does not convey any
additional semantics. Also, if you change order code which depends on
the ordinal number will break (e.g. when storing the ordinal number in a
database).
1. sort enum constant declarations alphabetically. I know in general
you don't want to do this since it can change program semantics, but
all my code is written to permit it. Sorting makes c much easier to
navigate.
I do not know IntelliJ but in my IDE (Eclipse) ordering of enums would
have zero effect on my capabilities to navigate.
2. sort cases in a switch into canonical order. For numbers, in
ascending order, or enum constants, in enum ordinal order. If there
are multiple case labels on the same chunk of code, they too should be
sorted in canonical order. When code in is canonical order, it is much
easier to notice an anomaly, a missing case, a difference from similar
code etc. The default should go at the bottom. For bonus points,
generate a comment about any uncovered enum constants. It also reduces
false deltas in version control. I write a lot of hand-parsers --
finite state automata which are crawling with switch statements with
enum values.. I waste a huge amount of time combing the code putting
the code in to canonical form by hand.
Aren't there compiler warnings for unused case values? Eclipse has this
at least for enums - you can even promote this condition to an error.
Anyway, reordering switch statements without changing semantics can be
pretty hard considering fallthrough logic and multiple labels for the
same piece of code. I am also whether putting "default" at the end will
work in every case. Consider this, which is valid Java code which
cannot be reordered to have "default" at the end:
switch (i) {
case 0:
System.out.println("1");
break;
default:
System.out.println("2");
case 4:
System.out.println("3");
break;
}
Note, I don't say this is good coding style. All I am saying is that
reordering "switch" is a complex task and probably not worth the effort.
Kind regards
robert
--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/