@@ -181,32 +181,30 @@ private static void decodingDeduplicate(ClassDescriptor desc) {
181181 }
182182 }
183183
184- // TODO: do not remove, set toNames to []
185184 private static void encodingDeduplicate (ClassDescriptor desc ) {
186- HashMap <String , Binding > byName = new HashMap <String , Binding >();
185+ HashMap <String , Binding > byToName = new HashMap <String , Binding >();
186+ HashMap <String , Binding > byFieldName = new HashMap <String , Binding >();
187187 for (Binding field : desc .fields ) {
188188 for (String toName : field .toNames ) {
189- if (byName .containsKey (toName )) {
189+ if (byToName .containsKey (toName )) {
190190 throw new JsonException ("field encode to same name: " + toName );
191191 }
192- byName .put (toName , field );
192+ byToName .put (toName , field );
193193 }
194+ byFieldName .put (field .name , field );
194195 }
195196 for (Binding getter : new ArrayList <Binding >(desc .getters )) {
197+ Binding existing = byFieldName .get (getter .name );
198+ if (existing != null ) {
199+ existing .toNames = new String [0 ];
200+ }
196201 for (String toName : getter .toNames ) {
197- Binding existing = byName .get (toName );
202+ existing = byToName .get (toName );
198203 if (existing == null ) {
199- byName .put (toName , getter );
200- continue ;
201- }
202- if (desc .fields .remove (existing )) {
203- continue ;
204- }
205- if (existing .method != null && existing .method .getName ().equals (getter .method .getName ())) {
206- // inherited interface getter
207- desc .getters .remove (getter );
204+ byToName .put (toName , getter );
208205 continue ;
209206 }
207+ existing .toNames = new String [0 ];
210208 throw new JsonException ("field encode to same name: " + toName );
211209 }
212210 }
0 commit comments