Hi, Attached is the latest LJC warnings patch. I've merged all of the changes into a single patch. The one I'm unsure of the comments on the @SuppressWarnings("deprecation") in the ZipEntry.java. I've been fairly terse and just mentioned that it's using the date methods/constructor.
Regards, Michael Barker. On Mon, Dec 5, 2011 at 11:48 AM, Alan Bateman <alan.bate...@oracle.com> wrote: > On 04/12/2011 08:56, Michael Barker wrote: > > Hi, > > scan of the webrev. There are still a couple of raw type warnings in JarFile > and several more in other classes in these packages so it's possible you > don't have everything (I wasn't following that thread closely on jdk8-dev). > > Question on a rawtypes fix. In one case there is method defined as: > > public List<?> getManifestDigests() { > if (jv != null) { > return jv.getManifestDigests(); > } > return new ArrayList(); > } > > There is a rawtypes warning on the "new ArrayList()". I can put a > specific type as the return value should match > "jv.getManifestDigests()", which is public so shouldn't be changed. I > can define it as "new ArrayList<Object>()" or add > "@SuppressWarnings("rawtypes") // Need raw type to match public > signature definition". Which would be the preferred approach? > > Mike. > > I suspect you just need to pull the latest changes because as part of > 7116722 [1], Chris has fixed JarVerifier's getManifestDigests to return > List<Object>. This should mean that JarFile.getManfiestDigest can be changed > to: > > List<Object> getManifestDigests() { > ensureInitialization(); > > if (jv != null) { > return jv.getManifestDigests(); > } > return new ArrayList<Object>(); > } > > -Alan. > > [1] http://hg.openjdk.java.net/jdk8/tl/jdk/rev/3b8186aee592
diff -r da28826c5672 src/share/classes/java/util/jar/JarFile.java --- a/src/share/classes/java/util/jar/JarFile.java Mon Dec 05 12:24:17 2011 +0000 +++ b/src/share/classes/java/util/jar/JarFile.java Tue Dec 06 18:34:37 2011 +0000 @@ -183,7 +183,7 @@ } else { man = new Manifest(super.getInputStream(manEntry)); } - manRef = new SoftReference(man); + manRef = new SoftReference<>(man); } } return man; @@ -233,13 +233,13 @@ * Returns an enumeration of the zip file entries. */ public Enumeration<JarEntry> entries() { - final Enumeration enum_ = super.entries(); + final Enumeration<? extends ZipEntry> enum_ = super.entries(); return new Enumeration<JarEntry>() { public boolean hasMoreElements() { return enum_.hasMoreElements(); } public JarFileEntry nextElement() { - ZipEntry ze = (ZipEntry)enum_.nextElement(); + ZipEntry ze = enum_.nextElement(); return new JarFileEntry(ze); } }; @@ -608,7 +608,7 @@ } // screen out entries which are never signed - final Enumeration enum_ = super.entries(); + final Enumeration<? extends ZipEntry> enum_ = super.entries(); return new Enumeration<JarEntry>() { ZipEntry entry; @@ -618,7 +618,7 @@ return true; } while (enum_.hasMoreElements()) { - ZipEntry ze = (ZipEntry) enum_.nextElement(); + ZipEntry ze = enum_.nextElement(); if (JarVerifier.isSigningRelated(ze.getName())) { continue; } @@ -649,7 +649,7 @@ * JAR file has no signed content. Is there a non-signing * code source? */ - Enumeration unsigned = unsignedEntryNames(); + Enumeration<String> unsigned = unsignedEntryNames(); if (unsigned.hasMoreElements()) { return new CodeSource[]{JarVerifier.getUnsignedCS(url)}; } else { @@ -658,7 +658,7 @@ } private Enumeration<String> unsignedEntryNames() { - final Enumeration entries = entries(); + final Enumeration<JarEntry> entries = entries(); return new Enumeration<String>() { String name; @@ -673,7 +673,7 @@ } while (entries.hasMoreElements()) { String value; - ZipEntry e = (ZipEntry) entries.nextElement(); + ZipEntry e = entries.nextElement(); value = e.getName(); if (e.isDirectory() || JarVerifier.isSigningRelated(value)) { continue; @@ -726,11 +726,11 @@ } } - List getManifestDigests() { + List<Object> getManifestDigests() { ensureInitialization(); if (jv != null) { return jv.getManifestDigests(); } - return new ArrayList(); + return new ArrayList<Object>(); } } diff -r da28826c5672 src/share/classes/java/util/jar/Manifest.java --- a/src/share/classes/java/util/jar/Manifest.java Mon Dec 05 12:24:17 2011 +0000 +++ b/src/share/classes/java/util/jar/Manifest.java Tue Dec 06 18:34:37 2011 +0000 @@ -51,7 +51,7 @@ private Attributes attr = new Attributes(); // manifest entries - private Map entries = new HashMap(); + private Map<String, Attributes> entries = new HashMap<>(); /** * Constructs a new, empty Manifest. @@ -148,11 +148,11 @@ // Write out the main attributes for the manifest attr.writeMain(dos); // Now write out the pre-entry attributes - Iterator it = entries.entrySet().iterator(); + Iterator<Map.Entry<String, Attributes>> it = entries.entrySet().iterator(); while (it.hasNext()) { - Map.Entry e = (Map.Entry)it.next(); + Map.Entry<String, Attributes> e = it.next(); StringBuffer buffer = new StringBuffer("Name: "); - String value = (String)e.getKey(); + String value = e.getKey(); if (value != null) { byte[] vb = value.getBytes("UTF8"); value = new String(vb, 0, 0, vb.length); @@ -161,7 +161,7 @@ buffer.append("\r\n"); make72Safe(buffer); dos.writeBytes(buffer.toString()); - ((Attributes)e.getValue()).write(dos); + e.getValue().write(dos); } dos.flush(); } diff -r da28826c5672 src/share/classes/java/util/logging/LogManager.java --- a/src/share/classes/java/util/logging/LogManager.java Mon Dec 05 12:24:17 2011 +0000 +++ b/src/share/classes/java/util/logging/LogManager.java Tue Dec 06 18:34:37 2011 +0000 @@ -179,10 +179,10 @@ cname = System.getProperty("java.util.logging.manager"); if (cname != null) { try { - Class clz = ClassLoader.getSystemClassLoader().loadClass(cname); + Class<?> clz = ClassLoader.getSystemClassLoader().loadClass(cname); manager = (LogManager) clz.newInstance(); } catch (ClassNotFoundException ex) { - Class clz = Thread.currentThread().getContextClassLoader().loadClass(cname); + Class<?> clz = Thread.currentThread().getContextClassLoader().loadClass(cname); manager = (LogManager) clz.newInstance(); } } @@ -200,8 +200,8 @@ // Adding the global Logger. Doing so in the Logger.<clinit> // would deadlock with the LogManager.<clinit>. - Logger.global.setLogManager(manager); - manager.addLogger(Logger.global); + Logger.getGlobal().setLogManager(manager); + manager.addLogger(Logger.getGlobal()); // We don't call readConfiguration() here, as we may be running // very early in the JVM startup sequence. Instead readConfiguration @@ -415,8 +415,8 @@ for (int i = 0; i < names.length; i++) { String word = names[i]; try { - Class clz = ClassLoader.getSystemClassLoader().loadClass(word); - Handler hdl = (Handler) clz.newInstance(); + Class<?> clz = ClassLoader.getSystemClassLoader().loadClass(word); + Handler hdl = (Handler) clz.newInstance(); try { // Check if there is a property defining the // this handler's level. @@ -782,11 +782,11 @@ // responsibility to initialize the logging configuration, by // calling readConfiguration(InputStream) with a suitable stream. try { - Class clz = ClassLoader.getSystemClassLoader().loadClass(cname); + Class<?> clz = ClassLoader.getSystemClassLoader().loadClass(cname); clz.newInstance(); return; } catch (ClassNotFoundException ex) { - Class clz = Thread.currentThread().getContextClassLoader().loadClass(cname); + Class<?> clz = Thread.currentThread().getContextClassLoader().loadClass(cname); clz.newInstance(); return; } @@ -837,9 +837,9 @@ // the global handlers, if they haven't been initialized yet. initializedGlobalHandlers = true; } - Enumeration enum_ = getLoggerNames(); + Enumeration<String> enum_ = getLoggerNames(); while (enum_.hasMoreElements()) { - String name = (String)enum_.nextElement(); + String name = enum_.nextElement(); resetLogger(name); } } @@ -926,7 +926,7 @@ for (int i = 0; i < names.length; i++) { String word = names[i]; try { - Class clz = ClassLoader.getSystemClassLoader().loadClass(word); + Class<?> clz = ClassLoader.getSystemClassLoader().loadClass(word); clz.newInstance(); } catch (Exception ex) { System.err.println("Can't load config class \"" + word + "\""); @@ -1024,7 +1024,7 @@ String val = getProperty(name); try { if (val != null) { - Class clz = ClassLoader.getSystemClassLoader().loadClass(val); + Class<?> clz = ClassLoader.getSystemClassLoader().loadClass(val); return (Filter) clz.newInstance(); } } catch (Exception ex) { @@ -1045,7 +1045,7 @@ String val = getProperty(name); try { if (val != null) { - Class clz = ClassLoader.getSystemClassLoader().loadClass(val); + Class<?> clz = ClassLoader.getSystemClassLoader().loadClass(val); return (Formatter) clz.newInstance(); } } catch (Exception ex) { @@ -1163,7 +1163,7 @@ // Private method to be called when the configuration has // changed to apply any level settings to any pre-existing loggers. synchronized private void setLevelsOnExistingLoggers() { - Enumeration enum_ = props.propertyNames(); + Enumeration<?> enum_ = props.propertyNames(); while (enum_.hasMoreElements()) { String key = (String)enum_.nextElement(); if (!key.endsWith(".level")) { diff -r da28826c5672 src/share/classes/java/util/prefs/Preferences.java --- a/src/share/classes/java/util/prefs/Preferences.java Mon Dec 05 12:24:17 2011 +0000 +++ b/src/share/classes/java/util/prefs/Preferences.java Tue Dec 06 18:34:37 2011 +0000 @@ -413,7 +413,7 @@ * @throws IllegalArgumentException if the package has node preferences * node associated with it. */ - private static String nodeName(Class c) { + private static String nodeName(Class<?> c) { if (c.isArray()) throw new IllegalArgumentException( "Arrays have no associated preferences node."); diff -r da28826c5672 src/share/classes/java/util/prefs/XmlSupport.java --- a/src/share/classes/java/util/prefs/XmlSupport.java Mon Dec 05 12:24:17 2011 +0000 +++ b/src/share/classes/java/util/prefs/XmlSupport.java Tue Dec 06 18:34:37 2011 +0000 @@ -106,7 +106,7 @@ xmlRoot.setAttribute("type", (p.isUserNode() ? "user" : "system")); // Get bottom-up list of nodes from p to root, excluding root - List ancestors = new ArrayList(); + List<Preferences> ancestors = new ArrayList<>(); for (Preferences kid = p, dad = kid.parent(); dad != null; kid = dad, dad = kid.parent()) { @@ -116,7 +116,7 @@ for (int i=ancestors.size()-1; i >= 0; i--) { e.appendChild(doc.createElement("map")); e = (Element) e.appendChild(doc.createElement("node")); - e.setAttribute("name", ((Preferences)ancestors.get(i)).name()); + e.setAttribute("name", ancestors.get(i).name()); } putPreferencesInXml(e, doc, p, subTree); @@ -339,17 +339,17 @@ * @throws IOException if writing to the specified output stream * results in an <tt>IOException</tt>. */ - static void exportMap(OutputStream os, Map map) throws IOException { + static void exportMap(OutputStream os, Map<String, String> map) throws IOException { Document doc = createPrefsDoc("map"); Element xmlMap = doc.getDocumentElement( ) ; xmlMap.setAttribute("MAP_XML_VERSION", MAP_XML_VERSION); - for (Iterator i = map.entrySet().iterator(); i.hasNext(); ) { - Map.Entry e = (Map.Entry) i.next(); + for (Iterator<Map.Entry<String, String>> i = map.entrySet().iterator(); i.hasNext(); ) { + Map.Entry<String, String> e = i.next(); Element xe = (Element) xmlMap.appendChild(doc.createElement("entry")); - xe.setAttribute("key", (String) e.getKey()); - xe.setAttribute("value", (String) e.getValue()); + xe.setAttribute("key", e.getKey()); + xe.setAttribute("value", e.getValue()); } writeDoc(doc, os); @@ -368,7 +368,7 @@ * @throws InvalidPreferencesFormatException Data on input stream does not * constitute a valid XML document with the mandated document type. */ - static void importMap(InputStream is, Map m) + static void importMap(InputStream is, Map<String, String> m) throws IOException, InvalidPreferencesFormatException { try { diff -r da28826c5672 src/share/classes/java/util/zip/ZipEntry.java --- a/src/share/classes/java/util/zip/ZipEntry.java Mon Dec 05 12:24:17 2011 +0000 +++ b/src/share/classes/java/util/zip/ZipEntry.java Tue Dec 06 18:34:37 2011 +0000 @@ -281,6 +281,7 @@ * Converts DOS time to Java time (number of milliseconds since epoch). */ private static long dosToJavaTime(long dtime) { + @SuppressWarnings("deprecation") // Use of date constructor. Date d = new Date((int)(((dtime >> 25) & 0x7f) + 80), (int)(((dtime >> 21) & 0x0f) - 1), (int)((dtime >> 16) & 0x1f), @@ -293,6 +294,7 @@ /* * Converts Java time to DOS time. */ + @SuppressWarnings("deprecation") // Use of date methods private static long javaToDosTime(long time) { Date d = new Date(time); int year = d.getYear() + 1900;