private DictionaryEntry buildDictionaryEntryForClass()

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);
    }