Skip to content

Commit a682e11

Browse files
yuri1969timtebeek
andauthored
Enable custom Serial Version UID (#541)
* Enable custom Serial Version UID To be able to choose from `1`, `1L`, or any other value. * Apply suggestions from code review * Minor polish --------- Co-authored-by: Tim te Beek <[email protected]> Co-authored-by: Tim te Beek <[email protected]>
1 parent 4bb4647 commit a682e11

File tree

4 files changed

+63
-6
lines changed

4 files changed

+63
-6
lines changed

src/main/java/org/openrewrite/staticanalysis/AddSerialVersionUidToSerializable.java

+13-2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
*/
1616
package org.openrewrite.staticanalysis;
1717

18+
import lombok.EqualsAndHashCode;
19+
import lombok.Value;
1820
import org.jspecify.annotations.Nullable;
1921
import org.openrewrite.*;
2022
import org.openrewrite.internal.ListUtils;
@@ -32,8 +34,17 @@
3234
import java.util.Set;
3335
import java.util.concurrent.atomic.AtomicBoolean;
3436

37+
@Value
38+
@EqualsAndHashCode(callSuper = false)
3539
public class AddSerialVersionUidToSerializable extends Recipe {
3640

41+
@Option(displayName = "New serial version UID",
42+
description = "Value of the added serial version UID.",
43+
example = "42L",
44+
required = false)
45+
@Nullable
46+
String uid;
47+
3748
@Override
3849
public String getDisplayName() {
3950
return "Add `serialVersionUID` to a `Serializable` class when missing";
@@ -54,7 +65,7 @@ public Set<String> getTags() {
5465
@Override
5566
public TreeVisitor<?, ExecutionContext> getVisitor() {
5667
return new JavaIsoVisitor<ExecutionContext>() {
57-
final JavaTemplate template = JavaTemplate.builder("private static final long serialVersionUID = 1;").build();
68+
final JavaTemplate template = JavaTemplate.builder(String.format("private static final long serialVersionUID = %s;", uid != null ? uid : "1")).build();
5869

5970
@Override
6071
public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration method, ExecutionContext ctx) {
@@ -103,7 +114,7 @@ private J.VariableDeclarations maybeFixVariableDeclarations(J.VariableDeclaratio
103114
varDecls = varDecls.withModifiers(Arrays.asList(
104115
new J.Modifier(Tree.randomId(), Space.EMPTY, Markers.EMPTY, null, J.Modifier.Type.Private, Collections.emptyList()),
105116
new J.Modifier(Tree.randomId(), Space.SINGLE_SPACE, Markers.EMPTY, null, J.Modifier.Type.Static, Collections.emptyList()),
106-
new J.Modifier(Tree.randomId(), Space.SINGLE_SPACE, Markers.EMPTY, null, J.Modifier.Type.Final, Collections.emptyList())
117+
new J.Modifier(Tree.randomId(), Space.SINGLE_SPACE, Markers.EMPTY, null, J.Modifier.Type.Final, Collections.emptyList())
107118
));
108119
}
109120
if (TypeUtils.asPrimitive(varDecls.getType()) != JavaType.Primitive.Long) {

src/test/java/org/openrewrite/staticanalysis/AddSerialAnnotationToSerialVersionUIDTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ class Example implements Serializable {
6262
void shouldAddToNewFieldWhenChained() {
6363
rewriteRun(
6464
spec -> spec.recipes(
65-
new AddSerialVersionUidToSerializable(),
65+
new AddSerialVersionUidToSerializable(null),
6666
new AddSerialAnnotationToSerialVersionUID()),
6767
//language=java
6868
java(

src/test/java/org/openrewrite/staticanalysis/AddSerialVersionUidToSerializableTest.java

+47-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class AddSerialVersionUidToSerializableTest implements RewriteTest {
2727

2828
@Override
2929
public void defaults(RecipeSpec spec) {
30-
spec.recipe(new AddSerialVersionUidToSerializable());
30+
spec.recipe(new AddSerialVersionUidToSerializable(null));
3131
}
3232

3333
@DocumentExample
@@ -57,6 +57,33 @@ public class Example implements Serializable {
5757
);
5858
}
5959

60+
@Test
61+
void addCustomSerialVersionUID() {
62+
rewriteRun(
63+
spec -> spec.recipe(new AddSerialVersionUidToSerializable("1L")),
64+
//language=java
65+
java(
66+
"""
67+
import java.io.Serializable;
68+
69+
public class Example implements Serializable {
70+
private String fred;
71+
private int numberOfFreds;
72+
}
73+
""",
74+
"""
75+
import java.io.Serializable;
76+
77+
public class Example implements Serializable {
78+
private static final long serialVersionUID = 1L;
79+
private String fred;
80+
private int numberOfFreds;
81+
}
82+
"""
83+
)
84+
);
85+
}
86+
6087
@Test
6188
void doNothingNotSerializable() {
6289
rewriteRun(
@@ -171,6 +198,25 @@ public class Example implements Serializable {
171198
);
172199
}
173200

201+
@Test
202+
void customUidKeepsUidAlreadyPresent() {
203+
rewriteRun(
204+
spec -> spec.recipe(new AddSerialVersionUidToSerializable("1L")),
205+
//language=java
206+
java(
207+
"""
208+
import java.io.Serializable;
209+
210+
public class Example implements Serializable {
211+
private static final long serialVersionUID = 1;
212+
private String fred;
213+
private int numberOfFreds;
214+
}
215+
"""
216+
)
217+
);
218+
}
219+
174220
@Test
175221
void methodDeclarationsAreNotVisited() {
176222
rewriteRun(

src/test/java/org/openrewrite/staticanalysis/HiddenFieldTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ static void method(String someField) {
9292
String localVariable = someField;
9393
}
9494
}
95-
"""
95+
"""
9696
)
9797
);
9898
}
@@ -759,7 +759,7 @@ public abstract class A {
759759
760760
public abstract void method(int n);
761761
}
762-
"""
762+
"""
763763
)
764764
);
765765
}

0 commit comments

Comments
 (0)