8028027: serialver should emit declaration with the 'private' modifier

Yuri Gaevsky ygaevsky at azulsystems.com
Fri Nov 8 15:20:15 UTC 2013


> Well, it would be more consistent to check for existence of protected or public serialVersionUID with Reflection API and change the serialver output accordingly.

Please see suggested fix and its output below.

Thanks,
-Yuri

$ serialver java.security.PublicKey
java.security.PublicKey:    public static final long serialVersionUID = 7187392471159151072L;

$ serialver java.lang.Exception
java.lang.Exception:     static final long serialVersionUID = -3387516993124229948L;

$ serialver java.lang.AssertionError
java.lang.AssertionError:    private static final long serialVersionUID = -5013299493970297370L;

$ serialver javax.xml.ws.soap.SOAPFaultException
javax.xml.ws.soap.SOAPFaultException:    private static final long serialVersionUID = -104968645459360720L;


$ hg diff
diff --git a/src/share/classes/sun/tools/serialver/SerialVer.java b/src/share/classes/sun/tools/serialver/SerialVer.java
--- a/src/share/classes/sun/tools/serialver/SerialVer.java
+++ b/src/share/classes/sun/tools/serialver/SerialVer.java
@@ -38,6 +38,7 @@
 import java.net.MalformedURLException;
 import java.util.StringTokenizer;
 import sun.net.www.ParseUtil;
+import java.lang.reflect.Modifier;
 
 public class SerialVer extends Applet {
     GridBagLayout gb;
@@ -211,7 +212,17 @@
         Class<?> cl = Class.forName(classname, false, loader);
         ObjectStreamClass desc = ObjectStreamClass.lookup(cl);
         if (desc != null) {
-            return "    static final long serialVersionUID = " +
+           String ams = "";
+           try {
+               final int mod =
+                       cl.getDeclaredField("serialVersionUID").getModifiers();
+               ams = Modifier.isPublic(mod) ? "public"
+                   : Modifier.isProtected(mod) ? "protected"
+                   : Modifier.isPrivate(mod) ? "private" : "";
+           } catch (NoSuchFieldException nsfe) {
+               ams = "private";
+           }
+            return "    " + ams + " static final long serialVersionUID = " +
                 desc.getSerialVersionUID() + "L;";
         } else {
             return null;




More information about the core-libs-dev mailing list