in xstream/src/java/com/thoughtworks/xstream/mapper/ImplicitCollectionMapper.java [163:190]
public String getFieldNameForItemTypeAndName(final Class<?> itemType, final String itemFieldName) {
ImplicitCollectionMappingImpl unnamed = null;
for (final NamedItemType itemTypeForFieldName : namedItemTypeToDef.keySet()) {
final ImplicitCollectionMappingImpl def = namedItemTypeToDef.get(itemTypeForFieldName);
if (itemType == Mapper.Null.class) {
unnamed = def;
break;
} else if (itemTypeForFieldName.itemType.isAssignableFrom(itemType)) {
if (def.getItemFieldName() != null) {
if (def.getItemFieldName().equals(itemFieldName)) {
return def.getFieldName();
}
} else {
if (unnamed == null
|| unnamed.getItemType() == null
|| def.getItemType() != null && unnamed.getItemType().isAssignableFrom(def.getItemType())) {
unnamed = def;
}
}
}
}
if (unnamed != null) {
return unnamed.getFieldName();
} else {
final ImplicitCollectionMapperForClass mapper = getMapper(definedIn.getSuperclass(), null);
return mapper != null ? mapper.getFieldNameForItemTypeAndName(itemType, itemFieldName) : null;
}
}