discord-jadx/app/src/main/java/androidx/work/ArrayCreatingInputMerger.java

79 lines
3.1 KiB
Java

package androidx.work;
import androidx.annotation.NonNull;
import androidx.work.Data;
import java.lang.reflect.Array;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public final class ArrayCreatingInputMerger extends InputMerger {
private Object concatenateArrayAndNonArray(Object obj, Object obj2) {
int length = Array.getLength(obj);
Object newInstance = Array.newInstance(obj2.getClass(), length + 1);
System.arraycopy(obj, 0, newInstance, 0, length);
Array.set(newInstance, length, obj2);
return newInstance;
}
private Object concatenateArrays(Object obj, Object obj2) {
int length = Array.getLength(obj);
int length2 = Array.getLength(obj2);
Object newInstance = Array.newInstance(obj.getClass().getComponentType(), length + length2);
System.arraycopy(obj, 0, newInstance, 0, length);
System.arraycopy(obj2, 0, newInstance, length, length2);
return newInstance;
}
private Object concatenateNonArrays(Object obj, Object obj2) {
Object newInstance = Array.newInstance(obj.getClass(), 2);
Array.set(newInstance, 0, obj);
Array.set(newInstance, 1, obj2);
return newInstance;
}
private Object createArrayFor(Object obj) {
Object newInstance = Array.newInstance(obj.getClass(), 1);
Array.set(newInstance, 0, obj);
return newInstance;
}
@Override // androidx.work.InputMerger
@NonNull
public Data merge(@NonNull List<Data> list) {
Data.Builder builder = new Data.Builder();
HashMap hashMap = new HashMap();
loop0:
for (Data data : list) {
Iterator<Map.Entry<String, Object>> it = data.getKeyValueMap().entrySet().iterator();
while (true) {
if (it.hasNext()) {
Map.Entry<String, Object> next = it.next();
String key = next.getKey();
Object value = next.getValue();
Class<?> cls = value.getClass();
Object obj = hashMap.get(key);
if (obj != null) {
Class<?> cls2 = obj.getClass();
if (cls2.equals(cls)) {
value = cls2.isArray() ? concatenateArrays(obj, value) : concatenateNonArrays(obj, value);
} else if (cls2.isArray() && cls2.getComponentType().equals(cls)) {
value = concatenateArrayAndNonArray(obj, value);
} else if (!cls.isArray() || !cls.getComponentType().equals(cls2)) {
break loop0;
} else {
value = concatenateArrayAndNonArray(value, obj);
}
} else if (!cls.isArray()) {
value = createArrayFor(value);
}
hashMap.put(key, value);
}
}
throw new IllegalArgumentException();
}
builder.putAll(hashMap);
return builder.build();
}
}