in xstream/src/java/com/thoughtworks/xstream/converters/reflection/FieldDictionary.java [144:173]
private DictionaryEntry buildDictionaryEntryForClass(final Class<?> cls,
final DictionaryEntry lastDictionaryEntry) {
final Map<String, Field> keyedByFieldName = new HashMap<>(lastDictionaryEntry.getKeyedByFieldName());
final Map<FieldKey, Field> keyedByFieldKey = new LinkedHashMap<>(lastDictionaryEntry.getKeyedByFieldKey());
final Field[] fields = cls.getDeclaredFields();
if (JVM.reverseFieldDefinition()) {
reverseFieldsArray(fields);
}
for (int i = 0; i < fields.length; i++) {
final Field field = fields[i];
if (field.isSynthetic() && field.getName().startsWith("$jacoco")) {
continue;
}
if (!field.isAccessible()) {
field.setAccessible(true);
}
final FieldKey fieldKey = new FieldKey(field.getName(), field.getDeclaringClass(), i);
final Field existent = keyedByFieldName.get(field.getName());
if (existent == null
// do overwrite statics
|| (existent.getModifiers() & Modifier.STATIC) != 0
// overwrite non-statics with non-statics only
|| existent != null && (field.getModifiers() & Modifier.STATIC) == 0) {
keyedByFieldName.put(field.getName(), field);
}
keyedByFieldKey.put(fieldKey, field);
}
final Map<FieldKey, Field> sortedFieldKeys = sorter.sort(cls, keyedByFieldKey);
return new DictionaryEntry(keyedByFieldName, sortedFieldKeys);
}