@@ -34,9 +34,27 @@ public abstract class JavaUtilCollectionsDeserializers
34
34
35
35
private final static Class <?> CLASS_AS_ARRAYS_LIST = Arrays .asList (null , null ).getClass ();
36
36
37
- private final static Class <?> CLASS_SINGLETON_SET = Collections .singleton (Boolean .TRUE ).getClass ();
38
- private final static Class <?> CLASS_SINGLETON_LIST = Collections .singletonList (Boolean .TRUE ).getClass ();
39
- private final static Class <?> CLASS_SINGLETON_MAP = Collections .singletonMap ("a" , "b" ).getClass ();
37
+ private final static Class <?> CLASS_SINGLETON_SET ;
38
+ private final static Class <?> CLASS_SINGLETON_LIST ;
39
+ private final static Class <?> CLASS_SINGLETON_MAP ;
40
+
41
+ private final static Class <?> CLASS_UNMODIFIABLE_SET ;
42
+ private final static Class <?> CLASS_UNMODIFIABLE_LIST ;
43
+ private final static Class <?> CLASS_UNMODIFIABLE_MAP ;
44
+
45
+ static {
46
+ Set <?> set = Collections .singleton (Boolean .TRUE );
47
+ CLASS_SINGLETON_SET = set .getClass ();
48
+ CLASS_UNMODIFIABLE_SET = Collections .unmodifiableSet (set ).getClass ();
49
+
50
+ List <?> list = Collections .singletonList (Boolean .TRUE );
51
+ CLASS_SINGLETON_LIST = list .getClass ();
52
+ CLASS_UNMODIFIABLE_LIST = Collections .unmodifiableList (list ).getClass ();
53
+
54
+ Map <?,?> map = Collections .singletonMap ("a" , "b" );
55
+ CLASS_SINGLETON_MAP = map .getClass ();
56
+ CLASS_UNMODIFIABLE_MAP = Collections .unmodifiableMap (map ).getClass ();
57
+ }
40
58
41
59
public static JsonDeserializer <?> findForCollection (DeserializationContext ctxt ,
42
60
JavaType type )
@@ -46,11 +64,15 @@ public static JsonDeserializer<?> findForCollection(DeserializationContext ctxt,
46
64
47
65
// 10-Jan-2017, tatu: Some types from `java.util.Collections`/`java.util.Arrays` need bit of help...
48
66
if (type .hasRawClass (CLASS_AS_ARRAYS_LIST )) {
49
- conv = converter (TYPE_AS_LIST , type );
67
+ conv = converter (TYPE_AS_LIST , type , List . class );
50
68
} else if (type .hasRawClass (CLASS_SINGLETON_LIST )) {
51
- conv = converter (TYPE_SINGLETON_LIST , type );
69
+ conv = converter (TYPE_SINGLETON_LIST , type , List . class );
52
70
} else if (type .hasRawClass (CLASS_SINGLETON_SET )) {
53
- conv = converter (TYPE_SINGLETON_SET , type );
71
+ conv = converter (TYPE_SINGLETON_SET , type , Set .class );
72
+ } else if (type .hasRawClass (CLASS_UNMODIFIABLE_LIST )) {
73
+ conv = converter (TYPE_UNMODIFIABLE_LIST , type , List .class );
74
+ } else if (type .hasRawClass (CLASS_UNMODIFIABLE_SET )) {
75
+ conv = converter (TYPE_UNMODIFIABLE_SET , type , Set .class );
54
76
} else {
55
77
return null ;
56
78
}
@@ -65,36 +87,19 @@ public static JsonDeserializer<?> findForMap(DeserializationContext ctxt,
65
87
66
88
// 10-Jan-2017, tatu: Some types from `java.util.Collections`/`java.util.Arrays` need bit of help...
67
89
if (type .hasRawClass (CLASS_SINGLETON_MAP )) {
68
- conv = converter (TYPE_SINGLETON_MAP , type );
90
+ conv = converter (TYPE_SINGLETON_MAP , type , Map .class );
91
+ } else if (type .hasRawClass (CLASS_UNMODIFIABLE_MAP )) {
92
+ conv = converter (TYPE_UNMODIFIABLE_MAP , type , Map .class );
69
93
} else {
70
94
return null ;
71
95
}
72
96
return new StdDelegatingDeserializer <Object >(conv );
73
97
}
74
98
75
- static JavaUtilCollectionsConverter converter (int kind , JavaType concreteType )
99
+ static JavaUtilCollectionsConverter converter (int kind ,
100
+ JavaType concreteType , Class <?> rawSuper )
76
101
{
77
- JavaType inputType ;
78
-
79
- switch (kind ) {
80
- case TYPE_SINGLETON_SET :
81
- case TYPE_UNMODIFIABLE_SET :
82
- inputType = concreteType .findSuperType (Set .class );
83
- break ;
84
-
85
- case TYPE_SINGLETON_MAP :
86
- case TYPE_UNMODIFIABLE_MAP :
87
- inputType = concreteType .findSuperType (Map .class );
88
- break ;
89
-
90
- case TYPE_SINGLETON_LIST :
91
- case TYPE_UNMODIFIABLE_LIST :
92
- case TYPE_AS_LIST :
93
- default :
94
- inputType = concreteType .findSuperType (List .class );
95
- break ;
96
- }
97
- return new JavaUtilCollectionsConverter (kind , inputType );
102
+ return new JavaUtilCollectionsConverter (kind , concreteType .findSuperType (rawSuper ));
98
103
}
99
104
100
105
/**
0 commit comments