115 lines
4.0 KiB
Java
115 lines
4.0 KiB
Java
package com.thoughtworks.xstream.mapper;
|
|
|
|
import com.thoughtworks.xstream.core.Caching;
|
|
import java.lang.reflect.Field;
|
|
import java.util.Collections;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.Set;
|
|
|
|
/* loaded from: classes.dex */
|
|
public class OuterClassMapper extends MapperWrapper implements Caching {
|
|
private static final String[] EMPTY_NAMES = new String[0];
|
|
static /* synthetic */ Class class$java$lang$Object;
|
|
private final String alias;
|
|
private final Map innerFields;
|
|
|
|
public OuterClassMapper(Mapper mapper) {
|
|
this(mapper, "outer-class");
|
|
}
|
|
|
|
static /* synthetic */ Class class$(String str) {
|
|
try {
|
|
return Class.forName(str);
|
|
} catch (ClassNotFoundException e) {
|
|
throw new NoClassDefFoundError().initCause(e);
|
|
}
|
|
}
|
|
|
|
private String[] getInnerFieldNames(Class cls) {
|
|
String[] strArr = (String[]) this.innerFields.get(cls.getName());
|
|
if (strArr != null) {
|
|
return strArr;
|
|
}
|
|
String[] innerFieldNames = getInnerFieldNames(cls.getSuperclass());
|
|
String[] strArr2 = innerFieldNames;
|
|
for (Field field : cls.getDeclaredFields()) {
|
|
if (field.getName().startsWith("this$")) {
|
|
String[] strArr3 = new String[strArr2.length + 1];
|
|
System.arraycopy(strArr2, 0, strArr3, 0, strArr2.length);
|
|
strArr3[strArr3.length - 1] = field.getName();
|
|
strArr2 = strArr3;
|
|
}
|
|
}
|
|
this.innerFields.put(cls.getName(), strArr2);
|
|
return strArr2;
|
|
}
|
|
|
|
@Override // com.thoughtworks.xstream.core.Caching
|
|
public void flushCache() {
|
|
Set keySet = this.innerFields.keySet();
|
|
Class cls = class$java$lang$Object;
|
|
if (cls == null) {
|
|
cls = class$("java.lang.Object");
|
|
class$java$lang$Object = cls;
|
|
}
|
|
keySet.retainAll(Collections.singletonList(cls.getName()));
|
|
}
|
|
|
|
@Override // com.thoughtworks.xstream.mapper.MapperWrapper, com.thoughtworks.xstream.mapper.Mapper
|
|
public String realMember(Class cls, String str) {
|
|
if (str.startsWith(this.alias)) {
|
|
int i = -1;
|
|
int length = this.alias.length();
|
|
if (length == str.length()) {
|
|
i = 0;
|
|
} else {
|
|
int i2 = length + 1;
|
|
if (str.length() > i2 && str.charAt(length) == '-') {
|
|
i = Integer.valueOf(str.substring(i2)).intValue();
|
|
}
|
|
}
|
|
if (i >= 0) {
|
|
String[] innerFieldNames = getInnerFieldNames(cls);
|
|
if (i < innerFieldNames.length) {
|
|
return innerFieldNames[i];
|
|
}
|
|
}
|
|
}
|
|
return super.realMember(cls, str);
|
|
}
|
|
|
|
@Override // com.thoughtworks.xstream.mapper.MapperWrapper, com.thoughtworks.xstream.mapper.Mapper
|
|
public String serializedMember(Class cls, String str) {
|
|
if (str.startsWith("this$")) {
|
|
String[] innerFieldNames = getInnerFieldNames(cls);
|
|
for (int i = 0; i < innerFieldNames.length; i++) {
|
|
if (innerFieldNames[i].equals(str)) {
|
|
if (i == 0) {
|
|
return this.alias;
|
|
}
|
|
StringBuffer stringBuffer = new StringBuffer();
|
|
stringBuffer.append(this.alias);
|
|
stringBuffer.append('-');
|
|
stringBuffer.append(i);
|
|
return stringBuffer.toString();
|
|
}
|
|
}
|
|
}
|
|
return super.serializedMember(cls, str);
|
|
}
|
|
|
|
public OuterClassMapper(Mapper mapper, String str) {
|
|
super(mapper);
|
|
this.alias = str;
|
|
this.innerFields = Collections.synchronizedMap(new HashMap());
|
|
Map map = this.innerFields;
|
|
Class cls = class$java$lang$Object;
|
|
if (cls == null) {
|
|
cls = class$("java.lang.Object");
|
|
class$java$lang$Object = cls;
|
|
}
|
|
map.put(cls.getName(), EMPTY_NAMES);
|
|
}
|
|
}
|