7116445: Miscellaneous warnings in the JDBC/RowSet classes

Stuart Marks stuart.marks at oracle.com
Wed Nov 30 00:31:16 UTC 2011

On 11/29/11 10:02 AM, Lance Andersen - Oracle wrote:
> Please review the following changes for JDBC area as part of the warnings clean up day.  I will not be able to participate on Thursday so I wanted to try and get this done ahead of time.
> The changes can be found at http://cr.openjdk.java.net/~lancea/7116445/webrev.00/

Hi Lance, thanks for jumping on the warnings bandwagon!

I have a few comments and discussion points.

* In CachedRowSetImpl.java, JdbcRowSetImpl.java and CachedRowSetReader.java, 
there are places where @SuppressWarnings("deprecation") is added to methods 
that are fairly long. If during further maintenance of these methods a use of 
another deprecated element is added, no warning will be issued. It might be 
nice to try to narrow the scope of the annotation, e.g. for CachedRowSetImpl 
you could do add this to the acceptChanges() method:

     final boolean doCommit = this.COMMIT_ON_ACCEPT_CHANGES;

and then use doCommit where COMMIT_ON_ACCEPT_CHANGES formerly was used. This 
would allow removal of the SuppressWarnings annotation from the entire method.

(Changing this to CachedRowSet.COMMIT_ON_ACCEPT_CHANGES would remove additional 
warnings. Actually since this is a final boolean defined to be true in an 
interface, it can't be changed, so maybe use of this value can be removed 
entirely. (But perhaps this is too much JDBC history for you to get into right 

In JdbcRowSetImpl and CachedRowSetReader dealing with the use of deprecated 
PreparedStatement.setUnicodeStream is trickier. There's no obvious way to add a 
local declaration on which one can place the annotation. I suppose you could 
refactor the call into a small method of its own, but this seems like overkill. 
Up to you as to whether you want to do anything on these.

* In CachedRowSetWriter.java, cols is changed from Vector to Vector<Integer>. 
This is fine but there's now a redundant cast (Integer)cols.get(i) at line 752 
that might generate another warning.

* Also in CachedRowSetWriter.java, line 308 can use diamond:

     status = new ArrayList<>(sz);

Up to you whether you want to use diamond here since the creation is separate 
from the declaration.

Further note that this sets up a potentially similar redundant cast for the 
result of status.get(), however, the line where it's used does this:

if (! ((status.get(j)).equals(Integer.valueOf(SyncResolver.NO_ROW_CONFLICT))))

Although this doesn't generate a warning I think you can simplify this to

if (status.get(j) != SyncResolver.NO_ROW_CONFLICT)

*  similar redundant cast at line 535, (String)stack.pop(), since stack is now 
Stack<String>. Oh, again you might want to use diamond where stack is initialized.

* WebRowSetXmlWriter.java, XmlReaderContentHandler.java, SQLInputImpl.java, and 
SyncFactory.java similar removals of redundant casts can be performed for types 
that have been converted to generics. This usually occurs near a get() call, 
e.g. in XmlReaderContentHandler, since propMap is now HashMap<String,Integer>, 
usages can be simplified from

     tag = ((Integer)propMap.get(name)).intValue();


     tag = propMap.get(name);

You might also consider using diamond where new generic instances are created, 
though it's a matter of style whether to use diamond in an assignment statement 
(as opposed to in a declaration's initializer).



More information about the core-libs-dev mailing list