Hi Stuart,

On the surface the changes look fine, including what you did for SwitchData.

Certainly another pair of eyes would be good also on this.

Best
Lance
On Aug 7, 2013, at 2:28 AM, Stuart Marks wrote:

> Hi,
> 
> Please review the fix for this warnings cleanup bug.
> 
> Bug: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8022479
>    (not yet available publicly, but should be shortly)
> 
> Webrev: http://cr.openjdk.java.net/~smarks/reviews/8022479/webrev.0/
> 
> There are a few items of note.
> 
> This is *very* old code. You can see some of the authors' names in the code. 
> It's replete with uses of Vector, Hashtable, and Enumeration. It also has a 
> kind of musty style, which might have been reasonable from the standpoint of 
> C programmers (which we all were at the time!). For example, there are a 
> bunch of cases of direct field access to another class. There are also cases 
> where a class contains a Vector that's returned by a getter method. I guess 
> we just have to trust the caller not to modify it at the wrong time.
> 
> I've confined most of my cleanups to the addition of generics (which gets rid 
> of the rawtypes and unchecked warnings). There were a smattering of other 
> warnings I've cleaned up as well. I've also replaced few cases of calls to 
> "new" on boxed types like Integer and Long with calls to the respective 
> valueOf() methods. I didn't check all the code for this, though, just 
> instances I happened to run across.
> 
> There is much more cleanup that could be done that I've elected not to do, 
> such as replacing Vector, Hashtable, and Enumeration with ArrayList, HashMap, 
> and Iterator, and using the enhanced-for loop. These changes would *probably* 
> be safe, but they would require more analysis and testing than I'm willing to 
> do at the moment.
> 
> Two locations deserve a bit of scrutiny.
> 
> 1) There are four occurrences in Assembler.java of calls to 
> MemberDefinition.getArguments(). Unfortunately MemberDefinition resides in 
> the sun.tools.java package and getArguments() returns a raw Vector. This is 
> also overridden in a couple places spread across a couple sun.tools packages, 
> and there are hints that it being a LocalMember or MemberDefinition. It seems 
> out of scope to try to fix up the return value of getArguments() and its 
> various overrides.
> 
> Locally in the Assembler.java file, though, the contents of the returned 
> vector are always cast to MemberDefinition, so it seems sensible to make an 
> unchecked cast of the getArguments() return value to Vector<MemberDefinition> 
> and to suppress warnings at that point. Usage beyond those points within 
> Assembler.java is filled with sweet and juicy generic goodness.
> 
> 2) SwitchData.java contains a field whereCaseTab which is a 
> Hashtable<Integer,Long> ... most of the time. In the addTableDefault() 
> method, a value is put into the Hashtable under the key "default" -- a 
> String. Ick.
> 
> To deal with this I declared it as Hashtable<Integer,Long> since that's the 
> typical case, and for the put(String, Long) case I cast through raw and 
> suppressed the warning. The get() method already takes an Object so we're OK 
> there. Note that "default" as a key for this Hashtable is used in a couple 
> other places in Assembler.java. It's not intractable to change these to some 
> other sentinel value, but, you know, where does one stop?
> 
> (I said "Ick" when encountering a mix-type collection, and in a generified 
> world we very rarely see this style anymore. Upon further reflection, though, 
> from the standpoint of a pre-generics world, this is pretty sensible. Using a 
> string as a sentinel key is guaranteed not to collide with any Integer keys. 
> Sometimes it's possible to use -1 or Integer.MAX_VALUE as a sentinel, but if 
> any integer value is permitted as a key, what does one do then?)
> 
> With this changeset, sun.tools.asm is reduced from about 76 to zero warnings.
> 
> Thanks,
> 
> s'marks

Lance Andersen| Principal Member of Technical Staff | +1.781.442.2037
Oracle Java Engineering 
1 Network Drive 
Burlington, MA 01803
lance.ander...@oracle.com

Reply via email to