@@ -48,7 +48,16 @@ public boolean isEmpty(Iterable<?> value) {
48
48
49
49
@ Override
50
50
public boolean hasSingleElement (Iterable <?> value ) {
51
- // no really good way to determine (without consuming iterator), so:
51
+ // we can do it actually (fixed in 2.3.1)
52
+ if (value != null ) {
53
+ Iterator <?> it = value .iterator ();
54
+ if (it .hasNext ()) {
55
+ it .next ();
56
+ if (!it .hasNext ()) {
57
+ return true ;
58
+ }
59
+ }
60
+ }
52
61
return false ;
53
62
}
54
63
@@ -66,22 +75,24 @@ public void serializeContents(Iterable<?> value, JsonGenerator jgen, SerializerP
66
75
Object elem = it .next ();
67
76
if (elem == null ) {
68
77
provider .defaultSerializeNull (jgen );
69
- } else {
78
+ continue ;
79
+ }
80
+ JsonSerializer <Object > currSerializer = _elementSerializer ;
81
+ if (currSerializer == null ) {
70
82
// Minor optimization to avoid most lookups:
71
83
Class <?> cc = elem .getClass ();
72
- JsonSerializer <Object > currSerializer ;
73
84
if (cc == prevClass ) {
74
85
currSerializer = prevSerializer ;
75
86
} else {
76
87
currSerializer = provider .findValueSerializer (cc , _property );
77
88
prevSerializer = currSerializer ;
78
89
prevClass = cc ;
79
90
}
80
- if ( typeSer == null ) {
81
- currSerializer . serialize ( elem , jgen , provider );
82
- } else {
83
- currSerializer . serializeWithType ( elem , jgen , provider , typeSer );
84
- }
91
+ }
92
+ if ( typeSer == null ) {
93
+ currSerializer . serialize ( elem , jgen , provider );
94
+ } else {
95
+ currSerializer . serializeWithType ( elem , jgen , provider , typeSer );
85
96
}
86
97
} while (it .hasNext ());
87
98
}
0 commit comments