118 lines
4.9 KiB
Java
118 lines
4.9 KiB
Java
package com.thoughtworks.xstream.mapper;
|
|
|
|
import com.thoughtworks.xstream.converters.Converter;
|
|
import com.thoughtworks.xstream.converters.ConverterLookup;
|
|
import com.thoughtworks.xstream.converters.SingleValueConverter;
|
|
import com.thoughtworks.xstream.converters.reflection.ReflectionProvider;
|
|
import java.lang.reflect.Field;
|
|
import java.util.HashMap;
|
|
import java.util.HashSet;
|
|
import java.util.Map;
|
|
import java.util.Set;
|
|
|
|
/* loaded from: classes.dex */
|
|
public class AttributeMapper extends MapperWrapper {
|
|
private ConverterLookup converterLookup;
|
|
private final Map fieldNameToTypeMap;
|
|
private final Set fieldToUseAsAttribute;
|
|
private ReflectionProvider reflectionProvider;
|
|
private final Set typeSet;
|
|
|
|
public AttributeMapper(Mapper mapper) {
|
|
this(mapper, null, null);
|
|
}
|
|
|
|
private SingleValueConverter getLocalConverterFromItemType(Class cls) {
|
|
Converter lookupConverterForType = this.converterLookup.lookupConverterForType(cls);
|
|
if (lookupConverterForType == null || !(lookupConverterForType instanceof SingleValueConverter)) {
|
|
return null;
|
|
}
|
|
return (SingleValueConverter) lookupConverterForType;
|
|
}
|
|
|
|
public void addAttributeFor(String str, Class cls) {
|
|
this.fieldNameToTypeMap.put(str, cls);
|
|
}
|
|
|
|
@Override // com.thoughtworks.xstream.mapper.MapperWrapper, com.thoughtworks.xstream.mapper.Mapper
|
|
public SingleValueConverter getConverterFromAttribute(String str) {
|
|
Class cls = (Class) this.fieldNameToTypeMap.get(str);
|
|
if (cls != null) {
|
|
return getLocalConverterFromItemType(cls);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override // com.thoughtworks.xstream.mapper.MapperWrapper, com.thoughtworks.xstream.mapper.Mapper
|
|
public SingleValueConverter getConverterFromItemType(String str, Class cls) {
|
|
if (this.fieldNameToTypeMap.get(str) == cls) {
|
|
return getLocalConverterFromItemType(cls);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public void setConverterLookup(ConverterLookup converterLookup) {
|
|
this.converterLookup = converterLookup;
|
|
}
|
|
|
|
public boolean shouldLookForSingleValueConverter(String str, Class cls, Class cls2) {
|
|
Field fieldOrNull;
|
|
if (this.typeSet.contains(cls) || this.fieldNameToTypeMap.get(str) == cls) {
|
|
return true;
|
|
}
|
|
return (str == null || cls2 == null || (fieldOrNull = this.reflectionProvider.getFieldOrNull(cls2, str)) == null || !this.fieldToUseAsAttribute.contains(fieldOrNull)) ? false : true;
|
|
}
|
|
|
|
public AttributeMapper(Mapper mapper, ConverterLookup converterLookup, ReflectionProvider reflectionProvider) {
|
|
super(mapper);
|
|
this.fieldNameToTypeMap = new HashMap();
|
|
this.typeSet = new HashSet();
|
|
this.fieldToUseAsAttribute = new HashSet();
|
|
this.converterLookup = converterLookup;
|
|
this.reflectionProvider = reflectionProvider;
|
|
}
|
|
|
|
public void addAttributeFor(Class cls) {
|
|
this.typeSet.add(cls);
|
|
}
|
|
|
|
public void addAttributeFor(Field field) {
|
|
if (field != null) {
|
|
this.fieldToUseAsAttribute.add(field);
|
|
}
|
|
}
|
|
|
|
@Override // com.thoughtworks.xstream.mapper.MapperWrapper, com.thoughtworks.xstream.mapper.Mapper
|
|
public SingleValueConverter getConverterFromAttribute(Class cls, String str) {
|
|
Field fieldOrNull = this.reflectionProvider.getFieldOrNull(cls, str);
|
|
if (fieldOrNull != null) {
|
|
return getConverterFromAttribute(cls, str, fieldOrNull.getType());
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override // com.thoughtworks.xstream.mapper.MapperWrapper, com.thoughtworks.xstream.mapper.Mapper
|
|
public SingleValueConverter getConverterFromItemType(String str, Class cls, Class cls2) {
|
|
SingleValueConverter localConverterFromItemType;
|
|
return (!shouldLookForSingleValueConverter(str, cls, cls2) || (localConverterFromItemType = getLocalConverterFromItemType(cls)) == null) ? super.getConverterFromItemType(str, cls, cls2) : localConverterFromItemType;
|
|
}
|
|
|
|
public void addAttributeFor(Class cls, String str) {
|
|
addAttributeFor(this.reflectionProvider.getField(cls, str));
|
|
}
|
|
|
|
@Override // com.thoughtworks.xstream.mapper.MapperWrapper, com.thoughtworks.xstream.mapper.Mapper
|
|
public SingleValueConverter getConverterFromAttribute(Class cls, String str, Class cls2) {
|
|
SingleValueConverter localConverterFromItemType;
|
|
return (!shouldLookForSingleValueConverter(str, cls2, cls) || (localConverterFromItemType = getLocalConverterFromItemType(cls2)) == null) ? super.getConverterFromAttribute(cls, str, cls2) : localConverterFromItemType;
|
|
}
|
|
|
|
@Override // com.thoughtworks.xstream.mapper.MapperWrapper, com.thoughtworks.xstream.mapper.Mapper
|
|
public SingleValueConverter getConverterFromItemType(Class cls) {
|
|
if (this.typeSet.contains(cls)) {
|
|
return getLocalConverterFromItemType(cls);
|
|
}
|
|
return null;
|
|
}
|
|
}
|