From 153d301e3816d2c645d68fbfaf11e6cea0674768 Mon Sep 17 00:00:00 2001 From: Michal Foksa Date: Thu, 12 Aug 2021 20:53:14 +0200 Subject: [PATCH 1/2] Ease future customization by unifying place where a new visitor is created. --- .../dataformat/avro/schema/ArrayVisitor.java | 12 ++++---- .../dataformat/avro/schema/MapVisitor.java | 14 +++++----- .../dataformat/avro/schema/RecordVisitor.java | 28 +++++++++---------- .../avro/schema/VisitorFormatWrapperImpl.java | 14 ++++++++-- 4 files changed, 38 insertions(+), 30 deletions(-) diff --git a/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/ArrayVisitor.java b/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/ArrayVisitor.java index 81ae18830..68e275b89 100644 --- a/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/ArrayVisitor.java +++ b/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/ArrayVisitor.java @@ -19,16 +19,16 @@ public class ArrayVisitor implements SchemaBuilder { protected final JavaType _type; - - protected final DefinedSchemas _schemas; + + protected final VisitorFormatWrapperImpl _visitorWrapper; protected Schema _elementSchema; - - public ArrayVisitor(SerializerProvider p, JavaType type, DefinedSchemas schemas) + + public ArrayVisitor(SerializerProvider p, JavaType type, VisitorFormatWrapperImpl visitorWrapper) { super(p); _type = type; - _schemas = schemas; + _visitorWrapper = visitorWrapper; } @Override @@ -53,7 +53,7 @@ public Schema builtAvroSchema() { public void itemsFormat(JsonFormatVisitable visitable, JavaType type) throws JsonMappingException { - VisitorFormatWrapperImpl wrapper = new VisitorFormatWrapperImpl(_schemas, getProvider()); + VisitorFormatWrapperImpl wrapper = _visitorWrapper.createVisitorWrapper(); visitable.acceptJsonFormatVisitor(wrapper, type); _elementSchema = wrapper.getAvroSchema(); } diff --git a/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/MapVisitor.java b/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/MapVisitor.java index 7a657043c..89b8b5a3f 100644 --- a/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/MapVisitor.java +++ b/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/MapVisitor.java @@ -14,17 +14,17 @@ public class MapVisitor extends JsonMapFormatVisitor.Base { protected final JavaType _type; - protected final DefinedSchemas _schemas; - + protected final VisitorFormatWrapperImpl _visitorWrapper; + protected Schema _valueSchema; protected JavaType _keyType; - public MapVisitor(SerializerProvider p, JavaType type, DefinedSchemas schemas) + public MapVisitor(SerializerProvider p, JavaType type, VisitorFormatWrapperImpl visitorWrapper) { super(p); _type = type; - _schemas = schemas; + _visitorWrapper = visitorWrapper; } @Override @@ -57,8 +57,8 @@ public void keyFormat(JsonFormatVisitable handler, JavaType keyType) public void valueFormat(JsonFormatVisitable handler, JavaType valueType) throws JsonMappingException { - VisitorFormatWrapperImpl wrapper = new VisitorFormatWrapperImpl(_schemas, getProvider()); - handler.acceptJsonFormatVisitor(wrapper, valueType); - _valueSchema = wrapper.getAvroSchema(); + VisitorFormatWrapperImpl visitorWrapper = _visitorWrapper.createVisitorWrapper(); + handler.acceptJsonFormatVisitor(visitorWrapper, valueType); + _valueSchema = visitorWrapper.getAvroSchema(); } } diff --git a/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/RecordVisitor.java b/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/RecordVisitor.java index b355f549d..6ae0a4523 100644 --- a/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/RecordVisitor.java +++ b/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/RecordVisitor.java @@ -23,7 +23,7 @@ public class RecordVisitor { protected final JavaType _type; - protected final DefinedSchemas _schemas; + protected final VisitorFormatWrapperImpl _visitorWrapper; /** * Tracks if the schema for this record has been overridden (by an annotation or other means), and calls to the {@code property} and @@ -35,11 +35,11 @@ public class RecordVisitor protected List _fields = new ArrayList(); - public RecordVisitor(SerializerProvider p, JavaType type, DefinedSchemas schemas) + public RecordVisitor(SerializerProvider p, JavaType type, VisitorFormatWrapperImpl visitorWrapper) { super(p); _type = type; - _schemas = schemas; + _visitorWrapper = visitorWrapper; // Check if the schema for this record is overridden BeanDescription bean = getProvider().getConfig().introspectDirectClassAnnotations(_type); List subTypes = getProvider().getAnnotationIntrospector().findSubtypes(bean.getClassInfo()); @@ -52,7 +52,7 @@ public RecordVisitor(SerializerProvider p, JavaType type, DefinedSchemas schemas try { for (NamedType subType : subTypes) { JsonSerializer ser = getProvider().findValueSerializer(subType.getType()); - VisitorFormatWrapperImpl visitor = new VisitorFormatWrapperImpl(_schemas, getProvider()); + VisitorFormatWrapperImpl visitor = _visitorWrapper.createVisitorWrapper(); ser.acceptJsonFormatVisitor(visitor, getProvider().getTypeFactory().constructType(subType.getType())); unionSchemas.add(visitor.getAvroSchema()); } @@ -69,7 +69,7 @@ public RecordVisitor(SerializerProvider p, JavaType type, DefinedSchemas schemas _avroSchema.addProp(meta.key(), meta.value()); } } - schemas.addSchema(type, _avroSchema); + _visitorWrapper.getSchemas().addSchema(type, _avroSchema); } @Override @@ -103,9 +103,9 @@ public void property(String name, JsonFormatVisitable handler, if (_overridden) { return; } - VisitorFormatWrapperImpl wrapper = new VisitorFormatWrapperImpl(_schemas, getProvider()); - handler.acceptJsonFormatVisitor(wrapper, type); - Schema schema = wrapper.getAvroSchema(); + VisitorFormatWrapperImpl visitorWrapper = _visitorWrapper.createVisitorWrapper(); + handler.acceptJsonFormatVisitor(visitorWrapper, type); + Schema schema = visitorWrapper.getAvroSchema(); _fields.add(new Schema.Field(name, schema, null, (Object) null)); } @@ -124,9 +124,9 @@ public void optionalProperty(String name, JsonFormatVisitable handler, if (_overridden) { return; } - VisitorFormatWrapperImpl wrapper = new VisitorFormatWrapperImpl(_schemas, getProvider()); - handler.acceptJsonFormatVisitor(wrapper, type); - Schema schema = wrapper.getAvroSchema(); + VisitorFormatWrapperImpl visitorWrapper = _visitorWrapper.createVisitorWrapper(); + handler.acceptJsonFormatVisitor(visitorWrapper, type); + Schema schema = visitorWrapper.getAvroSchema(); if (!type.isPrimitive()) { schema = AvroSchemaHelper.unionWithNull(schema); } @@ -170,9 +170,9 @@ protected Schema.Field schemaFieldForWriter(BeanProperty prop, boolean optional) } ser = prov.findValueSerializer(prop.getType(), prop); } - VisitorFormatWrapperImpl visitor = new VisitorFormatWrapperImpl(_schemas, prov); - ser.acceptJsonFormatVisitor(visitor, prop.getType()); - writerSchema = visitor.getAvroSchema(); + VisitorFormatWrapperImpl visitorWrapper = _visitorWrapper.createVisitorWrapper(); + ser.acceptJsonFormatVisitor(visitorWrapper, prop.getType()); + writerSchema = visitorWrapper.getAvroSchema(); } /* 23-Nov-2012, tatu: Actually let's also assume that primitive type values diff --git a/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/VisitorFormatWrapperImpl.java b/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/VisitorFormatWrapperImpl.java index be2d8c164..e5ae085e3 100644 --- a/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/VisitorFormatWrapperImpl.java +++ b/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/VisitorFormatWrapperImpl.java @@ -49,6 +49,10 @@ public VisitorFormatWrapperImpl(DefinedSchemas schemas, SerializerProvider p) { _provider = p; } + protected VisitorFormatWrapperImpl createVisitorWrapper() { + return new VisitorFormatWrapperImpl(_schemas, _provider); + } + @Override public SerializerProvider getProvider() { return _provider; @@ -60,6 +64,10 @@ public void setProvider(SerializerProvider provider) { _provider = provider; } + protected DefinedSchemas getSchemas() { + return _schemas; + } + /* /********************************************************************** /* Extended API @@ -95,14 +103,14 @@ public JsonObjectFormatVisitor expectObjectFormat(JavaType type) { _valueSchema = s; return null; } - RecordVisitor v = new RecordVisitor(_provider, type, _schemas); + RecordVisitor v = new RecordVisitor(_provider, type, this); _builder = v; return v; } @Override public JsonMapFormatVisitor expectMapFormat(JavaType mapType) { - MapVisitor v = new MapVisitor(_provider, mapType, _schemas); + MapVisitor v = new MapVisitor(_provider, mapType, this); _builder = v; return v; } @@ -122,7 +130,7 @@ public Schema builtAvroSchema() { return null; } } - ArrayVisitor v = new ArrayVisitor(_provider, convertedType, _schemas); + ArrayVisitor v = new ArrayVisitor(_provider, convertedType, this); _builder = v; return v; } From c76cd0a6050134e002ccf71398b901863b528c59 Mon Sep 17 00:00:00 2001 From: Michal Foksa Date: Sat, 14 Aug 2021 02:18:04 +0200 Subject: [PATCH 2/2] createVisitorWrapper() renamed to createChildWrapper(). --- .../jackson/dataformat/avro/schema/ArrayVisitor.java | 2 +- .../jackson/dataformat/avro/schema/MapVisitor.java | 2 +- .../jackson/dataformat/avro/schema/RecordVisitor.java | 8 ++++---- .../dataformat/avro/schema/VisitorFormatWrapperImpl.java | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/ArrayVisitor.java b/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/ArrayVisitor.java index 68e275b89..b70c6c7d7 100644 --- a/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/ArrayVisitor.java +++ b/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/ArrayVisitor.java @@ -53,7 +53,7 @@ public Schema builtAvroSchema() { public void itemsFormat(JsonFormatVisitable visitable, JavaType type) throws JsonMappingException { - VisitorFormatWrapperImpl wrapper = _visitorWrapper.createVisitorWrapper(); + VisitorFormatWrapperImpl wrapper = _visitorWrapper.createChildWrapper(); visitable.acceptJsonFormatVisitor(wrapper, type); _elementSchema = wrapper.getAvroSchema(); } diff --git a/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/MapVisitor.java b/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/MapVisitor.java index 89b8b5a3f..a99348a15 100644 --- a/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/MapVisitor.java +++ b/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/MapVisitor.java @@ -57,7 +57,7 @@ public void keyFormat(JsonFormatVisitable handler, JavaType keyType) public void valueFormat(JsonFormatVisitable handler, JavaType valueType) throws JsonMappingException { - VisitorFormatWrapperImpl visitorWrapper = _visitorWrapper.createVisitorWrapper(); + VisitorFormatWrapperImpl visitorWrapper = _visitorWrapper.createChildWrapper(); handler.acceptJsonFormatVisitor(visitorWrapper, valueType); _valueSchema = visitorWrapper.getAvroSchema(); } diff --git a/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/RecordVisitor.java b/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/RecordVisitor.java index 6ae0a4523..8efffc080 100644 --- a/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/RecordVisitor.java +++ b/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/RecordVisitor.java @@ -52,7 +52,7 @@ public RecordVisitor(SerializerProvider p, JavaType type, VisitorFormatWrapperIm try { for (NamedType subType : subTypes) { JsonSerializer ser = getProvider().findValueSerializer(subType.getType()); - VisitorFormatWrapperImpl visitor = _visitorWrapper.createVisitorWrapper(); + VisitorFormatWrapperImpl visitor = _visitorWrapper.createChildWrapper(); ser.acceptJsonFormatVisitor(visitor, getProvider().getTypeFactory().constructType(subType.getType())); unionSchemas.add(visitor.getAvroSchema()); } @@ -103,7 +103,7 @@ public void property(String name, JsonFormatVisitable handler, if (_overridden) { return; } - VisitorFormatWrapperImpl visitorWrapper = _visitorWrapper.createVisitorWrapper(); + VisitorFormatWrapperImpl visitorWrapper = _visitorWrapper.createChildWrapper(); handler.acceptJsonFormatVisitor(visitorWrapper, type); Schema schema = visitorWrapper.getAvroSchema(); _fields.add(new Schema.Field(name, schema, null, (Object) null)); @@ -124,7 +124,7 @@ public void optionalProperty(String name, JsonFormatVisitable handler, if (_overridden) { return; } - VisitorFormatWrapperImpl visitorWrapper = _visitorWrapper.createVisitorWrapper(); + VisitorFormatWrapperImpl visitorWrapper = _visitorWrapper.createChildWrapper(); handler.acceptJsonFormatVisitor(visitorWrapper, type); Schema schema = visitorWrapper.getAvroSchema(); if (!type.isPrimitive()) { @@ -170,7 +170,7 @@ protected Schema.Field schemaFieldForWriter(BeanProperty prop, boolean optional) } ser = prov.findValueSerializer(prop.getType(), prop); } - VisitorFormatWrapperImpl visitorWrapper = _visitorWrapper.createVisitorWrapper(); + VisitorFormatWrapperImpl visitorWrapper = _visitorWrapper.createChildWrapper(); ser.acceptJsonFormatVisitor(visitorWrapper, prop.getType()); writerSchema = visitorWrapper.getAvroSchema(); } diff --git a/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/VisitorFormatWrapperImpl.java b/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/VisitorFormatWrapperImpl.java index e5ae085e3..4b8badb86 100644 --- a/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/VisitorFormatWrapperImpl.java +++ b/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/VisitorFormatWrapperImpl.java @@ -49,7 +49,7 @@ public VisitorFormatWrapperImpl(DefinedSchemas schemas, SerializerProvider p) { _provider = p; } - protected VisitorFormatWrapperImpl createVisitorWrapper() { + protected VisitorFormatWrapperImpl createChildWrapper() { return new VisitorFormatWrapperImpl(_schemas, _provider); }