Reference
Recipes
Java
Cleanup
Design Partners
Fields in a Serializable class should either be transient or serializable
** org.openrewrite.java.cleanup.FixSerializableFields** _The fields of a class that implements Serializable must also implement Serializable or be marked as transient.
This recipe will look for any classes that directly or indirectly implement Serializable and for any member fields that are not serializable it will do one of two things:
  • If a non-serializable field has a type that is represented by a SourceFile within the same project, that SourceFile will be changed to implement Serializable.
  • If a non-serializable field has a type that is not represented as a SourceFile, the field will be marked as transient
NOTE: If markAllAsTransient is set to true, this recipe will mark all non-serializable fields as transient.
NOTE: Any fullyQualified names listed in the fullyQualifiedExclusions will be marked as transient, even if that SourceFile exists in the same project.
NOTE: This recipe does NOT recursively modify newly Serilazable classes to cut down on the graph of SourceFiles that may be impacted during a recipe run._

Tags

  • RSPEC-1948

Source

  • groupId: org.openrewrite
  • artifactId: rewrite-java
  • version: 7.22.0

Options

Type
Name
Description
Boolean
markAllAsTransient
Mark any fields that are not serializable as transient
List
fullyQualifiedExclusions
Optional. A list of fully-qualified names that should always be marked as transient vs being made Serializable

Usage

This recipe has required configuration parameters. Recipes with required configuration parameters cannot be activated directly. To activate this recipe you must create a new recipe which fills in the required parameters. In your rewrite.yml create a new recipe with a unique name. For example: com.yourorg.FixSerializableFieldsExample. Here's how you can define and customize such a recipe within your rewrite.yml:
rewrite.yml
1
---
2
type: specs.openrewrite.org/v1beta/recipe
3
name: com.yourorg.FixSerializableFieldsExample
4
displayName: Fields in a `Serializable` class should either be transient or serializable example
5
recipeList:
6
- org.openrewrite.java.cleanup.FixSerializableFields:
7
markAllAsTransient: null
8
fullyQualifiedExclusions: org.example.BeanFactory
Copied!
Now that com.yourorg.FixSerializableFieldsExample has been defined activate it in your build file:
Gradle
Maven
build.gradle
1
plugins {
2
id("org.openrewrite.rewrite") version("5.20.0")
3
}
4
5
rewrite {
6
activeRecipe("com.yourorg.FixSerializableFieldsExample")
7
}
8
9
repositories {
10
mavenCentral()
11
}
Copied!
pom.xml
1
<project>
2
<build>
3
<plugins>
4
<plugin>
5
<groupId>org.openrewrite.maven</groupId>
6
<artifactId>rewrite-maven-plugin</artifactId>
7
<version>4.23.0</version>
8
<configuration>
9
<activeRecipes>
10
<recipe>com.yourorg.FixSerializableFieldsExample</recipe>
11
</activeRecipes>
12
</configuration>
13
</plugin>
14
</plugins>
15
</build>
16
</project>
Copied!
Recipes can also be activated directly from the commandline by adding the argument -Drewrite.activeRecipes=com.yourorg.FixSerializableFieldsExample
Export as PDF
Copy link