Initial commit
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
package com.thoughtworks.xstream.converters.javabean;
|
||||
|
||||
import com.thoughtworks.xstream.converters.reflection.MissingFieldException;
|
||||
import com.thoughtworks.xstream.converters.reflection.ObjectAccessException;
|
||||
import com.thoughtworks.xstream.core.Caching;
|
||||
import com.thoughtworks.xstream.core.util.OrderRetainingMap;
|
||||
import java.beans.BeanInfo;
|
||||
import java.beans.IntrospectionException;
|
||||
import java.beans.Introspector;
|
||||
import java.beans.PropertyDescriptor;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public class PropertyDictionary implements Caching {
|
||||
static /* synthetic */ Class class$java$lang$Object;
|
||||
private transient Map propertyNameCache;
|
||||
private final PropertySorter sorter;
|
||||
|
||||
public PropertyDictionary() {
|
||||
this(new NativePropertySorter());
|
||||
}
|
||||
|
||||
private Map buildMap(Class cls) {
|
||||
Class cls2;
|
||||
Map map = (Map) this.propertyNameCache.get(cls);
|
||||
if (map != null) {
|
||||
return map;
|
||||
}
|
||||
try {
|
||||
if (class$java$lang$Object == null) {
|
||||
cls2 = class$("java.lang.Object");
|
||||
class$java$lang$Object = cls2;
|
||||
} else {
|
||||
cls2 = class$java$lang$Object;
|
||||
}
|
||||
BeanInfo beanInfo = Introspector.getBeanInfo(cls, cls2);
|
||||
OrderRetainingMap orderRetainingMap = new OrderRetainingMap();
|
||||
for (PropertyDescriptor propertyDescriptor : beanInfo.getPropertyDescriptors()) {
|
||||
orderRetainingMap.put(propertyDescriptor.getName(), propertyDescriptor);
|
||||
}
|
||||
Map sort = this.sorter.sort(cls, orderRetainingMap);
|
||||
this.propertyNameCache.put(cls, sort);
|
||||
return sort;
|
||||
} catch (IntrospectionException e) {
|
||||
ObjectAccessException objectAccessException = new ObjectAccessException("Cannot get BeanInfo of type", e);
|
||||
objectAccessException.add("bean-type", cls.getName());
|
||||
throw objectAccessException;
|
||||
}
|
||||
}
|
||||
|
||||
static /* synthetic */ Class class$(String str) {
|
||||
try {
|
||||
return Class.forName(str);
|
||||
} catch (ClassNotFoundException e) {
|
||||
throw new NoClassDefFoundError().initCause(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override // com.thoughtworks.xstream.core.Caching
|
||||
public void flushCache() {
|
||||
this.propertyNameCache.clear();
|
||||
}
|
||||
|
||||
public Iterator propertiesFor(Class cls) {
|
||||
return buildMap(cls).values().iterator();
|
||||
}
|
||||
|
||||
public BeanProperty property(Class cls, String str) {
|
||||
PropertyDescriptor propertyDescriptorOrNull = propertyDescriptorOrNull(cls, str);
|
||||
if (propertyDescriptorOrNull == null) {
|
||||
throw new MissingFieldException(cls.getName(), str);
|
||||
}
|
||||
if (propertyDescriptorOrNull.getReadMethod() == null || propertyDescriptorOrNull.getWriteMethod() == null) {
|
||||
return null;
|
||||
}
|
||||
return new BeanProperty(cls, propertyDescriptorOrNull.getName(), propertyDescriptorOrNull.getPropertyType());
|
||||
}
|
||||
|
||||
public PropertyDescriptor propertyDescriptor(Class cls, String str) {
|
||||
PropertyDescriptor propertyDescriptorOrNull = propertyDescriptorOrNull(cls, str);
|
||||
if (propertyDescriptorOrNull != null) {
|
||||
return propertyDescriptorOrNull;
|
||||
}
|
||||
throw new MissingFieldException(cls.getName(), str);
|
||||
}
|
||||
|
||||
public PropertyDescriptor propertyDescriptorOrNull(Class cls, String str) {
|
||||
return (PropertyDescriptor) buildMap(cls).get(str);
|
||||
}
|
||||
|
||||
public Iterator serializablePropertiesFor(Class cls) {
|
||||
ArrayList arrayList = new ArrayList();
|
||||
for (PropertyDescriptor propertyDescriptor : buildMap(cls).values()) {
|
||||
if (propertyDescriptor.getReadMethod() != null && propertyDescriptor.getWriteMethod() != null) {
|
||||
arrayList.add(new BeanProperty(cls, propertyDescriptor.getName(), propertyDescriptor.getPropertyType()));
|
||||
}
|
||||
}
|
||||
return arrayList.iterator();
|
||||
}
|
||||
|
||||
public PropertyDictionary(PropertySorter propertySorter) {
|
||||
this.propertyNameCache = Collections.synchronizedMap(new HashMap());
|
||||
this.sorter = propertySorter;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user