Attribute.java/Instruction.java/Package.java.File :

- Layout.equals(Object x) {
  return x instanceof Layout && equals((Layout)x);
} 

should be : 

Layout.equals(Object x) {
  return (null != x) && (x.getClass() == Layout.class) && equals((Layout)x);
}

as sub-classes also using instanceof would have a non-reflexive equals(). ie. 
layout.equals(someSubClassOfLayout) != someSubclassOfLayout.equals(layout)


- Layout.isEmpty() {
 return layout.isEmpty();
}

- 
BandStructure.java/ClassReader.java/Coding.java/CodingChooser.java/PackageReader.java/PackageWriter.java
 : is there a reason to use concrete types (HashMap, ArrayList, HashSet) for 
fields and vars such as basicCodingIndexes, allKQBands? It seems not.

- Code.java : Arrays.copyOf and/or copyOfRange could be used rather than 
separate allocation and System.arrayCopy.

- Package.java.stripAttributeKind() : could be a switch.

- Package.java.File : possibly static class and final (which would eliminate 
the complaint about File.equals()) ?

- PropMap._listeners could be final (and probably a List rather than explicitly 
an ArrayList).

- PropMap.java : convert newly added final to ARM?

- FixedList.java : Anything saved by extending AbstractList rather than 
implementing List?

On Nov 15 2010, at 17:24 , Kumar Srinivasan wrote:

> Hi John, et. al.,
> 
> This revision contains all fixes noted by Brian below and other
> comments from Alan.
> 
> http://cr.openjdk.java.net/~ksrini/6990106/webrev.01/
> 
> Thanks
> Kumar
> 
>> Mostly style issues, but at least one likely bug.
>> 
>> In a few places, you've used @SuppressWarnings("unchecked").  While this may 
>> well be unavoidable, it is worth factoring this out into the smallest 
>> possible chunk.  For BandStructure, you've applied it to the whole class, 
>> and there's some big methods that use it too.  You can usually get it down 
>> to a small "makeArrayOfGenericFoo" method, since this is the most common 
>> source of non-fixable unchecked warnings.
>> 
>> Also using an interface like Constants to import symbols is an antipattern 
>> and is better replaced with static imports.
>> 
>> In ClassReader you've replaced use of new Integer() and friends with 
>> Integer.valueOf(), but its better style to go all the way and just use 
>> autoboxing.
>> 
>> In Instruction the equals() method takes into account bc, w, length, and 
>> bytes, but the hashCode() method also takes into account pc.  This may 
>> violate the "equal objects must have equal hashcodes" rule.
>> 
>> Throughout you've changed loops from
>>  for (Iterator i=...)
>> to
>>  for (Iterator<T> i=...)
>> but didn't go all the way and just use foreach loops.
>> 
>> PropMap should extend TreeMap by composition, not extension.  This 
>> implementation is subject to the hazards outlined in the Effective Java item 
>> "Prefer composition to extension."  (For example you override put() but not 
>> putAll(), but this idiom cannot be made to work without tightly coupling it 
>> to the superclass implementation.)
>> 
>> On 11/11/2010 12:29 PM, Kumar Srinivasan wrote:
>>> Hi,
>>> 
>>> Appreciate a review of the pack200 cleanup work, in the following areas:
>>> 
>>> 1. General generification of Collections.
>>> 2. fixed worthy findbugs items.
>>> 3. fixed worthy Netbeans nags.
>>> 4. Elimination of array/generics combination.
>>> 
>>> The webrev is here:
>>> http://cr.openjdk.java.net/~ksrini/6990106/webrev.00/
>>> 
>>> Thanks
>>> Kumar
>>> 
> 

Reply via email to