@@ -63,7 +63,8 @@ public class HandleJacksonized extends JavacAnnotationHandler<Jacksonized> {
6363 private static enum JacksonAnnotations {
6464 JSON_POJO_BUILDER ("com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder" ),
6565 JSON_DESERIALIZE ("com.fasterxml.jackson.databind.annotation.JsonDeserialize" ),
66- JSON_PROPERTY ("com.fasterxml.jackson.annotation.JsonProperty" );
66+ JSON_PROPERTY ("com.fasterxml.jackson.annotation.JsonProperty" ),
67+ JSON_IGNORE ("com.fasterxml.jackson.annotation.JsonIgnore" );
6768
6869 private final String qualifiedName ;
6970 private final String [] chainedDots ;
@@ -118,11 +119,12 @@ private void handleJacksonizedAccessors(JavacNode annotationNode, JavacNode anno
118119 }
119120
120121 // Add @JsonProperty to all non-transient fields. It will be automatically copied to the getter/setters later.
122+ // Add @JsonIgnore to all transient fields. It will be automatically copied to the getter/setters later.
121123 for (JavacNode javacNode : tdNode .down ()) {
122- if (javacNode .getKind () != Kind .FIELD || javacNode .isTransient ()) {
123- continue ;
124+ if (javacNode .getKind () == Kind .FIELD ) {
125+ if (javacNode .isTransient ()) createJsonIgnoreForField (javacNode , annotationNode );
126+ else createJsonPropertyForField (javacNode , annotationNode );
124127 }
125- createJsonPropertyForField (javacNode , annotationNode );
126128 }
127129 }
128130
@@ -139,6 +141,19 @@ private void createJsonPropertyForField(JavacNode fieldNode, JavacNode annotatio
139141 fieldDecl .mods .annotations = fieldDecl .mods .annotations .append (annotationJsonProperty );
140142 }
141143
144+ private void createJsonIgnoreForField (JavacNode fieldNode , JavacNode annotationNode ) {
145+ if (JacksonAnnotations .JSON_IGNORE .isAnnotating (fieldNode )) {
146+ return ;
147+ }
148+ JavacTreeMaker maker = fieldNode .getTreeMaker ();
149+
150+ JCExpression jsonPropertyType = chainDots (fieldNode , JacksonAnnotations .JSON_IGNORE .chainedDots );
151+ JCAnnotation annotationJsonProperty = maker .Annotation (jsonPropertyType , List .<JCExpression >nil ());
152+ recursiveSetGeneratedBy (annotationJsonProperty , annotationNode );
153+ JCVariableDecl fieldDecl = ((JCVariableDecl )fieldNode .get ());
154+ fieldDecl .mods .annotations = fieldDecl .mods .annotations .append (annotationJsonProperty );
155+ }
156+
142157 private void handleJacksonizedBuilder (JavacNode annotationNode , JavacNode annotatedNode , JavacNode tdNode , JCClassDecl td , JavacNode builderAnnotationNode , JavacNode superBuilderAnnotationNode ) {
143158 if (builderAnnotationNode != null && superBuilderAnnotationNode != null ) {
144159 annotationNode .addError ("@Jacksonized cannot process both @Builder and @SuperBuilder on the same class." );
0 commit comments