From 1b4630f5898cc220fc5c93ebaa5226bbedcad96a Mon Sep 17 00:00:00 2001 From: arimu1 <19286898+arimu1@users.noreply.github.com> Date: Sat, 22 Aug 2026 11:22:17 +0700 Subject: [PATCH] fixes SerialVersionUID for static inner classes. Issue #517 --- src/main/javassist/SerialVersionUID.java | 4 +++- src/test/javassist/JvstTest.java | 6 ++++++ src/test/test1/SerialVUIDOuter.java | 7 +++++++ 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 src/test/test1/SerialVUIDOuter.java diff --git a/src/main/javassist/SerialVersionUID.java b/src/main/javassist/SerialVersionUID.java index ebb18bfa..24dad307 100644 --- a/src/main/javassist/SerialVersionUID.java +++ b/src/main/javassist/SerialVersionUID.java @@ -93,7 +93,9 @@ public static long calculateDefault(CtClass clazz) CtMethod[] methods = clazz.getDeclaredMethods(); // class modifiers. - int classMods = clazz.getModifiers(); + int classMods = clazz.getModifiers() + & (Modifier.PUBLIC | Modifier.FINAL + | Modifier.INTERFACE | Modifier.ABSTRACT); if ((classMods & Modifier.INTERFACE) != 0) if (methods.length > 0) classMods = classMods | Modifier.ABSTRACT; diff --git a/src/test/javassist/JvstTest.java b/src/test/javassist/JvstTest.java index af11a726..da21f983 100644 --- a/src/test/javassist/JvstTest.java +++ b/src/test/javassist/JvstTest.java @@ -836,6 +836,7 @@ public void testCast() throws Exception { } static final long svUID = 6006955401253799668L; + static final long svUIDStaticInner = -5933347829989567997L; public void testSerialVUID() throws Exception { CtClass cc = sloader.get("test1.MySerializableClass"); @@ -844,6 +845,11 @@ public void testSerialVUID() throws Exception { cc.writeFile(); } + public void testSerialVUIDStaticInner() throws Exception { + CtClass cc = sloader.get("test1.SerialVUIDOuter$Inner"); + assertEquals(svUIDStaticInner, SerialVersionUID.calculateDefault(cc)); + } + public void testInvokeInt() throws Exception { CtClass cc = sloader.get("test1.InvokeInt"); CtMethod m1 = cc.getDeclaredMethod("check"); diff --git a/src/test/test1/SerialVUIDOuter.java b/src/test/test1/SerialVUIDOuter.java new file mode 100644 index 00000000..fbe99af0 --- /dev/null +++ b/src/test/test1/SerialVUIDOuter.java @@ -0,0 +1,7 @@ +package test1; + +import java.io.Serializable; + +public class SerialVUIDOuter { + public static class Inner implements Serializable { } +}