Initial commit
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
package com.thoughtworks.xstream.converters.enums;
|
||||
|
||||
import com.thoughtworks.xstream.converters.Converter;
|
||||
import com.thoughtworks.xstream.converters.MarshallingContext;
|
||||
import com.thoughtworks.xstream.converters.UnmarshallingContext;
|
||||
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
|
||||
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public class EnumConverter implements Converter {
|
||||
@Override // com.thoughtworks.xstream.converters.ConverterMatcher
|
||||
public boolean canConvert(Class cls) {
|
||||
return (cls != null && cls.isEnum()) || Enum.class.isAssignableFrom(cls);
|
||||
}
|
||||
|
||||
@Override // com.thoughtworks.xstream.converters.Converter
|
||||
public void marshal(Object obj, HierarchicalStreamWriter hierarchicalStreamWriter, MarshallingContext marshallingContext) {
|
||||
hierarchicalStreamWriter.setValue(((Enum) obj).name());
|
||||
}
|
||||
|
||||
@Override // com.thoughtworks.xstream.converters.Converter
|
||||
public Object unmarshal(HierarchicalStreamReader hierarchicalStreamReader, UnmarshallingContext unmarshallingContext) {
|
||||
Class requiredType = unmarshallingContext.getRequiredType();
|
||||
if (requiredType.getSuperclass() != Enum.class) {
|
||||
requiredType = requiredType.getSuperclass();
|
||||
}
|
||||
String value = hierarchicalStreamReader.getValue();
|
||||
try {
|
||||
return Enum.valueOf(requiredType, value);
|
||||
} catch (IllegalArgumentException e) {
|
||||
for (Enum r3 : (Enum[]) requiredType.getEnumConstants()) {
|
||||
if (r3.name().equalsIgnoreCase(value)) {
|
||||
return r3;
|
||||
}
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,47 @@
|
||||
package com.thoughtworks.xstream.converters.enums;
|
||||
|
||||
import com.thoughtworks.xstream.converters.ConversionException;
|
||||
import com.thoughtworks.xstream.converters.MarshallingContext;
|
||||
import com.thoughtworks.xstream.converters.UnmarshallingContext;
|
||||
import com.thoughtworks.xstream.converters.collections.MapConverter;
|
||||
import com.thoughtworks.xstream.core.util.Fields;
|
||||
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
|
||||
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
|
||||
import com.thoughtworks.xstream.mapper.Mapper;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.EnumMap;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public class EnumMapConverter extends MapConverter {
|
||||
private static final Field typeField = Fields.locate(EnumMap.class, Class.class, false);
|
||||
|
||||
public EnumMapConverter(Mapper mapper) {
|
||||
super(mapper);
|
||||
}
|
||||
|
||||
@Override // com.thoughtworks.xstream.converters.collections.MapConverter, com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter, com.thoughtworks.xstream.converters.ConverterMatcher
|
||||
public boolean canConvert(Class cls) {
|
||||
return typeField != null && cls == EnumMap.class;
|
||||
}
|
||||
|
||||
@Override // com.thoughtworks.xstream.converters.collections.MapConverter, com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter, com.thoughtworks.xstream.converters.Converter
|
||||
public void marshal(Object obj, HierarchicalStreamWriter hierarchicalStreamWriter, MarshallingContext marshallingContext) {
|
||||
Class cls = (Class) Fields.read(typeField, obj);
|
||||
String aliasForSystemAttribute = mapper().aliasForSystemAttribute("enum-type");
|
||||
if (aliasForSystemAttribute != null) {
|
||||
hierarchicalStreamWriter.addAttribute(aliasForSystemAttribute, mapper().serializedClass(cls));
|
||||
}
|
||||
super.marshal(obj, hierarchicalStreamWriter, marshallingContext);
|
||||
}
|
||||
|
||||
@Override // com.thoughtworks.xstream.converters.collections.MapConverter, com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter, com.thoughtworks.xstream.converters.Converter
|
||||
public Object unmarshal(HierarchicalStreamReader hierarchicalStreamReader, UnmarshallingContext unmarshallingContext) {
|
||||
String aliasForSystemAttribute = mapper().aliasForSystemAttribute("enum-type");
|
||||
if (aliasForSystemAttribute == null) {
|
||||
throw new ConversionException("No EnumType specified for EnumMap");
|
||||
}
|
||||
EnumMap enumMap = new EnumMap(mapper().realClass(hierarchicalStreamReader.getAttribute(aliasForSystemAttribute)));
|
||||
populateMap(hierarchicalStreamReader, unmarshallingContext, enumMap);
|
||||
return enumMap;
|
||||
}
|
||||
}
|
@@ -0,0 +1,71 @@
|
||||
package com.thoughtworks.xstream.converters.enums;
|
||||
|
||||
import com.thoughtworks.xstream.converters.ConversionException;
|
||||
import com.thoughtworks.xstream.converters.Converter;
|
||||
import com.thoughtworks.xstream.converters.MarshallingContext;
|
||||
import com.thoughtworks.xstream.converters.UnmarshallingContext;
|
||||
import com.thoughtworks.xstream.core.util.Fields;
|
||||
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
|
||||
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
|
||||
import com.thoughtworks.xstream.mapper.Mapper;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.EnumSet;
|
||||
import java.util.Iterator;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public class EnumSetConverter implements Converter {
|
||||
private static final Field typeField = Fields.locate(EnumSet.class, Class.class, false);
|
||||
private final Mapper mapper;
|
||||
|
||||
public EnumSetConverter(Mapper mapper) {
|
||||
this.mapper = mapper;
|
||||
}
|
||||
|
||||
private String joinEnumValues(EnumSet enumSet) {
|
||||
StringBuffer stringBuffer = new StringBuffer();
|
||||
Iterator it = enumSet.iterator();
|
||||
boolean z = false;
|
||||
while (it.hasNext()) {
|
||||
Enum r2 = (Enum) it.next();
|
||||
if (z) {
|
||||
stringBuffer.append(',');
|
||||
} else {
|
||||
z = true;
|
||||
}
|
||||
stringBuffer.append(r2.name());
|
||||
}
|
||||
return stringBuffer.toString();
|
||||
}
|
||||
|
||||
@Override // com.thoughtworks.xstream.converters.ConverterMatcher
|
||||
public boolean canConvert(Class cls) {
|
||||
return (typeField == null || cls == null || !EnumSet.class.isAssignableFrom(cls)) ? false : true;
|
||||
}
|
||||
|
||||
@Override // com.thoughtworks.xstream.converters.Converter
|
||||
public void marshal(Object obj, HierarchicalStreamWriter hierarchicalStreamWriter, MarshallingContext marshallingContext) {
|
||||
EnumSet enumSet = (EnumSet) obj;
|
||||
Class cls = (Class) Fields.read(typeField, enumSet);
|
||||
String aliasForSystemAttribute = this.mapper.aliasForSystemAttribute("enum-type");
|
||||
if (aliasForSystemAttribute != null) {
|
||||
hierarchicalStreamWriter.addAttribute(aliasForSystemAttribute, this.mapper.serializedClass(cls));
|
||||
}
|
||||
hierarchicalStreamWriter.setValue(joinEnumValues(enumSet));
|
||||
}
|
||||
|
||||
@Override // com.thoughtworks.xstream.converters.Converter
|
||||
public Object unmarshal(HierarchicalStreamReader hierarchicalStreamReader, UnmarshallingContext unmarshallingContext) {
|
||||
String aliasForSystemAttribute = this.mapper.aliasForSystemAttribute("enum-type");
|
||||
if (aliasForSystemAttribute == null) {
|
||||
throw new ConversionException("No EnumType specified for EnumSet");
|
||||
}
|
||||
Class realClass = this.mapper.realClass(hierarchicalStreamReader.getAttribute(aliasForSystemAttribute));
|
||||
EnumSet noneOf = EnumSet.noneOf(realClass);
|
||||
for (String str : hierarchicalStreamReader.getValue().split(",")) {
|
||||
if (str.length() > 0) {
|
||||
noneOf.add(Enum.valueOf(realClass, str));
|
||||
}
|
||||
}
|
||||
return noneOf;
|
||||
}
|
||||
}
|
@@ -0,0 +1,30 @@
|
||||
package com.thoughtworks.xstream.converters.enums;
|
||||
|
||||
import com.thoughtworks.xstream.converters.basic.AbstractSingleValueConverter;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public class EnumSingleValueConverter extends AbstractSingleValueConverter {
|
||||
private final Class<? extends Enum> enumType;
|
||||
|
||||
public EnumSingleValueConverter(Class<? extends Enum> cls) {
|
||||
if (!Enum.class.isAssignableFrom(cls) && cls != Enum.class) {
|
||||
throw new IllegalArgumentException("Converter can only handle defined enums");
|
||||
}
|
||||
this.enumType = cls;
|
||||
}
|
||||
|
||||
@Override // com.thoughtworks.xstream.converters.basic.AbstractSingleValueConverter, com.thoughtworks.xstream.converters.ConverterMatcher
|
||||
public boolean canConvert(Class cls) {
|
||||
return cls != null && this.enumType.isAssignableFrom(cls);
|
||||
}
|
||||
|
||||
@Override // com.thoughtworks.xstream.converters.basic.AbstractSingleValueConverter, com.thoughtworks.xstream.converters.SingleValueConverter
|
||||
public Object fromString(String str) {
|
||||
return Enum.valueOf(this.enumType, str);
|
||||
}
|
||||
|
||||
@Override // com.thoughtworks.xstream.converters.basic.AbstractSingleValueConverter, com.thoughtworks.xstream.converters.SingleValueConverter
|
||||
public String toString(Object obj) {
|
||||
return ((Enum) Enum.class.cast(obj)).name();
|
||||
}
|
||||
}
|
@@ -0,0 +1,87 @@
|
||||
package com.thoughtworks.xstream.converters.enums;
|
||||
|
||||
import com.thoughtworks.xstream.InitializationException;
|
||||
import com.thoughtworks.xstream.converters.ConversionException;
|
||||
import com.thoughtworks.xstream.converters.basic.AbstractSingleValueConverter;
|
||||
import java.lang.Enum;
|
||||
import java.util.EnumMap;
|
||||
import java.util.EnumSet;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public class EnumToStringConverter<T extends Enum<T>> extends AbstractSingleValueConverter {
|
||||
private final Class<T> enumType;
|
||||
private final Map<String, T> strings;
|
||||
private final EnumMap<T, String> values;
|
||||
|
||||
public EnumToStringConverter(Class<T> cls) {
|
||||
this(cls, extractStringMap(cls), null);
|
||||
}
|
||||
|
||||
private static <T extends Enum<T>> EnumMap<T, String> buildValueMap(Class<T> cls, Map<String, T> map) {
|
||||
EnumMap<T, String> enumMap = new EnumMap<>(cls);
|
||||
for (Map.Entry<String, T> entry : map.entrySet()) {
|
||||
enumMap.put((EnumMap<T, String>) entry.getValue(), (T) entry.getKey());
|
||||
}
|
||||
return enumMap;
|
||||
}
|
||||
|
||||
private static <T> void checkType(Class<T> cls) {
|
||||
if (!Enum.class.isAssignableFrom(cls) && cls != Enum.class) {
|
||||
throw new InitializationException("Converter can only handle enum types");
|
||||
}
|
||||
}
|
||||
|
||||
private static <T extends Enum<T>> Map<String, T> extractStringMap(Class<T> cls) {
|
||||
checkType(cls);
|
||||
EnumSet allOf = EnumSet.allOf(cls);
|
||||
HashMap hashMap = new HashMap(allOf.size());
|
||||
Iterator it = allOf.iterator();
|
||||
while (it.hasNext()) {
|
||||
Enum r2 = (Enum) it.next();
|
||||
if (hashMap.put(r2.toString(), r2) != null) {
|
||||
throw new InitializationException("Enum type " + cls.getName() + " does not have unique string representations for its values");
|
||||
}
|
||||
}
|
||||
return hashMap;
|
||||
}
|
||||
|
||||
@Override // com.thoughtworks.xstream.converters.basic.AbstractSingleValueConverter, com.thoughtworks.xstream.converters.ConverterMatcher
|
||||
public boolean canConvert(Class cls) {
|
||||
return cls != null && this.enumType.isAssignableFrom(cls);
|
||||
}
|
||||
|
||||
@Override // com.thoughtworks.xstream.converters.basic.AbstractSingleValueConverter, com.thoughtworks.xstream.converters.SingleValueConverter
|
||||
public Object fromString(String str) {
|
||||
if (str == null) {
|
||||
return null;
|
||||
}
|
||||
T t = this.strings.get(str);
|
||||
if (t != null) {
|
||||
return t;
|
||||
}
|
||||
ConversionException conversionException = new ConversionException("Invalid string representation for enum type");
|
||||
conversionException.add("enum-type", this.enumType.getName());
|
||||
conversionException.add("enum-string", str);
|
||||
throw conversionException;
|
||||
}
|
||||
|
||||
@Override // com.thoughtworks.xstream.converters.basic.AbstractSingleValueConverter, com.thoughtworks.xstream.converters.SingleValueConverter
|
||||
public String toString(Object obj) {
|
||||
Enum r2 = (Enum) Enum.class.cast(obj);
|
||||
EnumMap<T, String> enumMap = this.values;
|
||||
return enumMap == null ? r2.toString() : enumMap.get(r2);
|
||||
}
|
||||
|
||||
public EnumToStringConverter(Class<T> cls, Map<String, T> map) {
|
||||
this(cls, map, buildValueMap(cls, map));
|
||||
}
|
||||
|
||||
private EnumToStringConverter(Class<T> cls, Map<String, T> map, EnumMap<T, String> enumMap) {
|
||||
this.enumType = cls;
|
||||
this.strings = map;
|
||||
this.values = enumMap;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user