Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,26 @@ public IndexedListSerializer(IndexedListSerializer src,
Boolean unwrapSingle) {
super(src, property, vts, valueSerializer, unwrapSingle);
}

public IndexedListSerializer(IndexedListSerializer src,
BeanProperty property, TypeSerializer vts, JsonSerializer<?> valueSerializer,
Boolean unwrapSingle, Object suppressableValue, boolean suppressNulls) {
super(src, property, vts, valueSerializer, unwrapSingle, suppressableValue, suppressNulls);
}

@Override
public IndexedListSerializer withResolved(BeanProperty property,
TypeSerializer vts, JsonSerializer<?> elementSerializer,
Boolean unwrapSingle) {
return new IndexedListSerializer(this, property, vts, elementSerializer, unwrapSingle);
}

@Override
public IndexedListSerializer withResolved(BeanProperty property,
TypeSerializer vts, JsonSerializer<?> elementSerializer,
Boolean unwrapSingle, Object suppressableValue, boolean suppressNulls) {
return new IndexedListSerializer(this, property, vts, elementSerializer, unwrapSingle, suppressableValue, suppressNulls);
}

/*
/**********************************************************
Expand Down Expand Up @@ -71,25 +84,53 @@ public final void serialize(List<?> value, JsonGenerator gen, SerializerProvider
if (((_unwrapSingle == null) &&
provider.isEnabled(SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED))
|| (_unwrapSingle == Boolean.TRUE)) {
serializeContents(value, gen, provider);
if ((_suppressableValue != null) || _suppressNulls) {
serializeFilteredContents(value, gen, provider);
} else {
serializeContents(value, gen, provider);
}
return;
}
}
gen.writeStartArray(value, len);
serializeContents(value, gen, provider);
if ((_suppressableValue != null) || _suppressNulls) {
serializeFilteredContents(value, gen, provider);
} else {
serializeContents(value, gen, provider);
}
gen.writeEndArray();
}

@Override
public void serializeContents(List<?> value, JsonGenerator g, SerializerProvider provider)
throws IOException
{
serializeContentsImpl(value, g, provider, false);
}

@Override
protected void serializeFilteredContents(List<?> value, JsonGenerator g, SerializerProvider provider) throws IOException
{
serializeContentsImpl(value, g, provider, true);
}

private void serializeContentsImpl(List<?> value, JsonGenerator g, SerializerProvider provider, boolean filtered)
throws IOException
{
if (_elementSerializer != null) {
serializeContentsUsing(value, g, provider, _elementSerializer);
if (filtered) {
serializeFilteredContentsUsing(value, g, provider, _elementSerializer);
} else {
serializeContentsUsing(value, g, provider, _elementSerializer);
}
return;
}
if (_valueTypeSerializer != null) {
serializeTypedContents(value, g, provider);
if (filtered) {
serializeFilteredTypedContents(value, g, provider);
} else {
serializeTypedContents(value, g, provider);
}
return;
}
final int len = value.size();
Expand All @@ -102,6 +143,9 @@ public void serializeContents(List<?> value, JsonGenerator g, SerializerProvider
for (; i < len; ++i) {
Object elem = value.get(i);
if (elem == null) {
if (filtered && _suppressNulls) {
continue;
}
provider.defaultSerializeNull(g);
} else {
Class<?> cc = elem.getClass();
Expand All @@ -116,6 +160,10 @@ public void serializeContents(List<?> value, JsonGenerator g, SerializerProvider
}
serializers = _dynamicSerializers;
}
// Check if this element should be suppressed (only in filtered mode)
if (filtered && !_shouldSerializeElement(elem, serializer, provider)) {
continue;
}
serializer.serialize(elem, g, provider);
}
}
Expand All @@ -124,9 +172,23 @@ public void serializeContents(List<?> value, JsonGenerator g, SerializerProvider
}
}

public void serializeContentsUsing(List<?> value, JsonGenerator jgen, SerializerProvider provider,
private void serializeContentsUsing(List<?> value, JsonGenerator jgen, SerializerProvider provider,
JsonSerializer<Object> ser)
throws IOException
{
serializeContentsUsingImpl(value, jgen, provider, ser, false);
}

private void serializeFilteredContentsUsing(List<?> value, JsonGenerator jgen, SerializerProvider provider,
JsonSerializer<Object> ser)
throws IOException
{
serializeContentsUsingImpl(value, jgen, provider, ser, true);
}

private void serializeContentsUsingImpl(List<?> value, JsonGenerator jgen, SerializerProvider provider,
JsonSerializer<Object> ser, boolean filtered)
throws IOException
{
final int len = value.size();
if (len == 0) {
Expand All @@ -137,11 +199,20 @@ public void serializeContentsUsing(List<?> value, JsonGenerator jgen, Serializer
Object elem = value.get(i);
try {
if (elem == null) {
if (filtered && _suppressNulls) {
continue;
}
provider.defaultSerializeNull(jgen);
} else if (typeSer == null) {
ser.serialize(elem, jgen, provider);
} else {
ser.serializeWithType(elem, jgen, provider, typeSer);
// Check if this element should be suppressed (only in filtered mode)
if (filtered && !_shouldSerializeElement(elem, ser, provider)) {
continue;
}
if (typeSer == null) {
ser.serialize(elem, jgen, provider);
} else {
ser.serializeWithType(elem, jgen, provider, typeSer);
}
}
} catch (Exception e) {
// [JACKSON-55] Need to add reference information
Expand All @@ -150,7 +221,19 @@ public void serializeContentsUsing(List<?> value, JsonGenerator jgen, Serializer
}
}

public void serializeTypedContents(List<?> value, JsonGenerator jgen, SerializerProvider provider)
private void serializeTypedContents(List<?> value, JsonGenerator jgen, SerializerProvider provider)
throws IOException
{
serializeTypedContentsImpl(value, jgen, provider, false);
}

private void serializeFilteredTypedContents(List<?> value, JsonGenerator jgen, SerializerProvider provider)
throws IOException
{
serializeTypedContentsImpl(value, jgen, provider, true);
}

private void serializeTypedContentsImpl(List<?> value, JsonGenerator jgen, SerializerProvider provider, boolean filtered)
throws IOException
{
final int len = value.size();
Expand All @@ -164,6 +247,9 @@ public void serializeTypedContents(List<?> value, JsonGenerator jgen, Serializer
for (; i < len; ++i) {
Object elem = value.get(i);
if (elem == null) {
if (filtered && _suppressNulls) {
continue;
}
provider.defaultSerializeNull(jgen);
} else {
Class<?> cc = elem.getClass();
Expand All @@ -178,6 +264,10 @@ public void serializeTypedContents(List<?> value, JsonGenerator jgen, Serializer
}
serializers = _dynamicSerializers;
}
// Check if this element should be suppressed (only in filtered mode)
if (filtered && !_shouldSerializeElement(elem, serializer, provider)) {
continue;
}
serializer.serializeWithType(elem, jgen, provider, typeSer);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,22 @@ public IndexedStringListSerializer(IndexedStringListSerializer src,
Boolean unwrapSingle) {
super(src, unwrapSingle);
}

public IndexedStringListSerializer(IndexedStringListSerializer src,
Boolean unwrapSingle, Object suppressableValue, boolean suppressNulls) {
super(src, unwrapSingle, suppressableValue, suppressNulls);
}

@Override
public JsonSerializer<?> _withResolved(BeanProperty prop, Boolean unwrapSingle) {
return new IndexedStringListSerializer(this, unwrapSingle);
}

@Override
public JsonSerializer<?> _withResolved(BeanProperty prop, Boolean unwrapSingle,
Object suppressableValue, boolean suppressNulls) {
return new IndexedStringListSerializer(this, unwrapSingle, suppressableValue, suppressNulls);
}

@Override protected JsonNode contentSchema() { return createSchemaNode("string", true); }

Expand All @@ -69,12 +80,20 @@ public void serialize(List<String> value, JsonGenerator g,
if (((_unwrapSingle == null) &&
provider.isEnabled(SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED))
|| (_unwrapSingle == Boolean.TRUE)) {
serializeContents(value, g, provider, 1);
if ((_suppressableValue != null) || _suppressNulls) {
serializeFilteredContents(value, g, provider, 1);
} else {
serializeContents(value, g, provider, 1);
}
return;
}
}
g.writeStartArray(value, len);
serializeContents(value, g, provider, len);
if ((_suppressableValue != null) || _suppressNulls) {
serializeFilteredContents(value, g, provider, len);
} else {
serializeContents(value, g, provider, len);
}
g.writeEndArray();
}

Expand All @@ -92,14 +111,33 @@ public void serializeWithType(List<String> value, JsonGenerator g, SerializerPro

private final void serializeContents(List<String> value, JsonGenerator g,
SerializerProvider provider, int len) throws IOException
{
serializeContentsImpl(value, g, provider, len, false);
}

private final void serializeFilteredContents(List<String> value, JsonGenerator g,
SerializerProvider provider, int len) throws IOException
{
serializeContentsImpl(value, g, provider, len, true);
}

private final void serializeContentsImpl(List<String> value, JsonGenerator g,
SerializerProvider provider, int len, boolean filtered) throws IOException
{
int i = 0;
try {
for (; i < len; ++i) {
String str = value.get(i);
if (str == null) {
if (filtered && _suppressNulls) {
continue;
}
provider.defaultSerializeNull(g);
} else {
// Check if this element should be suppressed (only in filtered mode)
if (filtered && !_shouldSerializeElement(str, null, provider)) {
continue;
}
g.writeString(str);
}
}
Expand Down
Loading
Loading