> 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;

Reply via email to