@@ -48,7 +48,16 @@ public boolean isEmpty(Iterable<?> value) {
4848
4949 @ Override
5050 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+ }
5261 return false ;
5362 }
5463
@@ -66,22 +75,24 @@ public void serializeContents(Iterable<?> value, JsonGenerator jgen, SerializerP
6675 Object elem = it .next ();
6776 if (elem == null ) {
6877 provider .defaultSerializeNull (jgen );
69- } else {
78+ continue ;
79+ }
80+ JsonSerializer <Object > currSerializer = _elementSerializer ;
81+ if (currSerializer == null ) {
7082 // Minor optimization to avoid most lookups:
7183 Class <?> cc = elem .getClass ();
72- JsonSerializer <Object > currSerializer ;
7384 if (cc == prevClass ) {
7485 currSerializer = prevSerializer ;
7586 } else {
7687 currSerializer = provider .findValueSerializer (cc , _property );
7788 prevSerializer = currSerializer ;
7889 prevClass = cc ;
7990 }
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 );
8596 }
8697 } while (it .hasNext ());
8798 }
0 commit comments