@@ -25,31 +25,31 @@ public static void registerTypeDecoder(Class clazz, Decoder decoder) {
2525 }
2626
2727 public static void registerTypeDecoder (TypeLiteral typeLiteral , Decoder decoder ) {
28- addNewDecoder (typeLiteral .getCacheKey (), decoder );
28+ addNewDecoder (typeLiteral .getDecoderCacheKey (), decoder );
2929 }
3030
3131 public static void registerFieldDecoder (Class clazz , String field , Decoder decoder ) {
3232 addNewDecoder (field + "@" + TypeLiteral .generateDecoderCacheKey (clazz ), decoder );
3333 }
3434
3535 public static void registerFieldDecoder (TypeLiteral typeLiteral , String field , Decoder decoder ) {
36- addNewDecoder (field + "@" + typeLiteral .getCacheKey (), decoder );
36+ addNewDecoder (field + "@" + typeLiteral .getDecoderCacheKey (), decoder );
3737 }
3838
3939 public static void registerTypeEncoder (Class clazz , Encoder encoder ) {
4040 addNewEncoder (TypeLiteral .generateEncoderCacheKey (clazz ), encoder );
4141 }
4242
4343 public static void registerTypeEncoder (TypeLiteral typeLiteral , Encoder encoder ) {
44- addNewEncoder (typeLiteral .getCacheKey (), encoder );
44+ addNewEncoder (typeLiteral .getDecoderCacheKey (), encoder );
4545 }
4646
4747 public static void registerFieldEncoder (Class clazz , String field , Encoder encoder ) {
4848 addNewEncoder (field + "@" + TypeLiteral .generateEncoderCacheKey (clazz ), encoder );
4949 }
5050
5151 public static void registerFieldEncoder (TypeLiteral typeLiteral , String field , Encoder encoder ) {
52- addNewEncoder (field + "@" + typeLiteral .getCacheKey (), encoder );
52+ addNewEncoder (field + "@" + typeLiteral .getDecoderCacheKey (), encoder );
5353 }
5454
5555 public static Decoder getDecoder (String cacheKey ) {
@@ -63,6 +63,9 @@ public synchronized static void addNewDecoder(String cacheKey, Decoder decoder)
6363 }
6464
6565 public static Encoder getEncoder (String cacheKey ) {
66+ if (cacheKey .startsWith ("decoder" )) {
67+ throw new RuntimeException ();
68+ }
6669 return encoders .get (cacheKey );
6770 }
6871
@@ -97,14 +100,21 @@ public static ClassDescriptor getClassDescriptor(Class clazz, boolean includingP
97100 if (binding .fromNames == null ) {
98101 binding .fromNames = new String []{binding .name };
99102 }
103+ if (binding .field != null && includingPrivate ) {
104+ binding .field .setAccessible (true );
105+ }
106+ binding .clazz = clazz ;
107+ binding .valueTypeLiteral = TypeLiteral .create (binding .valueType );
108+ }
109+ for (Binding binding : desc .allEncoderBindings ()) {
100110 if (binding .toNames == null ) {
101111 binding .toNames = new String []{binding .name };
102112 }
103113 if (binding .field != null && includingPrivate ) {
104114 binding .field .setAccessible (true );
105115 }
106116 binding .clazz = clazz ;
107- binding .valueTypeLiteral = createTypeLiteral (binding .valueType );
117+ binding .valueTypeLiteral = TypeLiteral . create (binding .valueType );
108118 }
109119 return desc ;
110120 }
@@ -143,7 +153,7 @@ private static Binding createBindingFromField(Class clazz, Field field) {
143153 binding .fromNames = new String []{field .getName ()};
144154 binding .name = field .getName ();
145155 binding .valueType = field .getType ();
146- binding .valueTypeLiteral = createTypeLiteral (binding .valueType );
156+ binding .valueTypeLiteral = TypeLiteral . create (binding .valueType );
147157 binding .clazz = clazz ;
148158 binding .annotations = field .getAnnotations ();
149159 binding .field = field ;
@@ -163,10 +173,6 @@ private static List<Field> getAllFields(Class clazz, boolean includingPrivate) {
163173 return allFields ;
164174 }
165175
166- private static TypeLiteral createTypeLiteral (Type valueType ) {
167- return new TypeLiteral (valueType , TypeLiteral .generateDecoderCacheKey (valueType ));
168- }
169-
170176 private static List <SetterDescriptor > getSetters (Class clazz , boolean includingPrivate ) {
171177 ArrayList <SetterDescriptor > setters = new ArrayList <SetterDescriptor >();
172178 List <Method > allMethods = Arrays .asList (clazz .getMethods ());
@@ -207,7 +213,7 @@ private static List<SetterDescriptor> getSetters(Class clazz, boolean includingP
207213 param .fromNames = new String []{fromName };
208214 param .name = fromName ;
209215 param .valueType = paramTypes [0 ];
210- param .valueTypeLiteral = createTypeLiteral (param .valueType );
216+ param .valueTypeLiteral = TypeLiteral . create (param .valueType );
211217 param .clazz = clazz ;
212218 setter .parameters .add (param );
213219 setters .add (setter );
@@ -234,17 +240,26 @@ private static List<Binding> getGetters(Class clazz, boolean includingPrivate) {
234240 if (method .getGenericParameterTypes ().length != 0 ) {
235241 continue ;
236242 }
237- String fromName = methodName .substring ("get" .length ());
238- char [] fromNameChars = fromName .toCharArray ();
243+ String toName = methodName .substring ("get" .length ());
244+ char [] fromNameChars = toName .toCharArray ();
239245 fromNameChars [0 ] = Character .toLowerCase (fromNameChars [0 ]);
240- fromName = new String (fromNameChars );
246+ toName = new String (fromNameChars );
241247 Binding getter = new Binding ();
242- getter .fromNames = new String []{methodName + "()" };
243- getter .name = fromName ;
248+ getter .toNames = new String []{toName };
249+ getter .name = methodName + "()" ;
244250 getter .valueType = method .getGenericReturnType ();
245251 getter .clazz = clazz ;
246252 getters .add (getter );
247253 }
248254 return getters ;
249255 }
256+
257+ public static void dump () {
258+ for (String cacheKey : decoders .keySet ()) {
259+ System .err .println (cacheKey );
260+ }
261+ for (String cacheKey : encoders .keySet ()) {
262+ System .err .println (cacheKey );
263+ }
264+ }
250265}
0 commit comments