翰林优商.apk(点击下载) / RuntimeMessageAdapter.java
package com.czhj.wire;
import com.czhj.wire.Message;
import com.czhj.wire.Message.Builder;
import com.czhj.wire.ProtoAdapter;
import com.czhj.wire.WireField;
import com.czhj.wire.internal.Internal;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
final class RuntimeMessageAdapter<M extends Message<M, B>, B extends Message.Builder<M, B>> extends ProtoAdapter<M> {
private static final String a = "██";
private final Class<M> b;
private final Class<B> c;
private final Map<Integer, FieldBinding<M, B>> d;
RuntimeMessageAdapter(Class<M> cls, Class<B> cls2, Map<Integer, FieldBinding<M, B>> map) {
super(FieldEncoding.LENGTH_DELIMITED, cls);
this.b = cls;
this.c = cls2;
this.d = map;
}
static <M extends Message<M, B>, B extends Message.Builder<M, B>> RuntimeMessageAdapter<M, B> a(Class<M> cls) {
Class b2 = b(cls);
LinkedHashMap linkedHashMap = new LinkedHashMap();
Field[] declaredFields = cls.getDeclaredFields();
for (Field field : declaredFields) {
WireField wireField = (WireField) field.getAnnotation(WireField.class);
if (wireField != null) {
linkedHashMap.put(Integer.valueOf(wireField.tag()), new FieldBinding(wireField, field, b2));
}
}
return new RuntimeMessageAdapter<>(cls, b2, Collections.unmodifiableMap(linkedHashMap));
}
private static <M extends Message<M, B>, B extends Message.Builder<M, B>> Class<B> b(Class<M> cls) {
try {
return (Class<B>) Class.forName(cls.getName() + "$Builder");
} catch (ClassNotFoundException unused) {
throw new IllegalArgumentException("No builder class found for message type " + cls.getName());
}
}
/* access modifiers changed from: package-private */
public Map<Integer, FieldBinding<M, B>> a() {
return this.d;
}
/* access modifiers changed from: package-private */
public B b() {
try {
return this.c.newInstance();
} catch (Throwable th) {
throw new AssertionError(th);
}
}
@Override // com.czhj.wire.ProtoAdapter
public M decode(ProtoReader protoReader) throws IOException {
B b2 = b();
long beginMessage = protoReader.beginMessage();
while (true) {
int nextTag = protoReader.nextTag();
if (nextTag != -1) {
FieldBinding<M, B> fieldBinding = this.d.get(Integer.valueOf(nextTag));
if (fieldBinding != null) {
try {
fieldBinding.a(b2, (fieldBinding.a() ? fieldBinding.d() : fieldBinding.b()).decode(protoReader));
} catch (ProtoAdapter.EnumConstantNotFoundException e) {
b2.addUnknownField(nextTag, FieldEncoding.VARINT, Long.valueOf((long) e.value));
}
} else {
FieldEncoding peekFieldEncoding = protoReader.peekFieldEncoding();
b2.addUnknownField(nextTag, peekFieldEncoding, peekFieldEncoding.rawProtoAdapter().decode(protoReader));
}
} else {
protoReader.endMessage(beginMessage);
return (M) b2.build();
}
}
}
public void encode(ProtoWriter protoWriter, M m) throws IOException {
for (FieldBinding<M, B> fieldBinding : this.d.values()) {
Object a2 = fieldBinding.a(m);
if (a2 != null) {
fieldBinding.d().encodeWithTag(protoWriter, fieldBinding.tag, a2);
}
}
protoWriter.writeBytes(m.unknownFields());
}
public int encodedSize(M m) {
int i = m.cachedSerializedSize;
if (i != 0) {
return i;
}
int i2 = 0;
for (FieldBinding<M, B> fieldBinding : this.d.values()) {
Object a2 = fieldBinding.a(m);
if (a2 != null) {
i2 += fieldBinding.d().encodedSizeWithTag(fieldBinding.tag, a2);
}
}
int size = i2 + m.unknownFields().size();
m.cachedSerializedSize = size;
return size;
}
public boolean equals(Object obj) {
return (obj instanceof RuntimeMessageAdapter) && ((RuntimeMessageAdapter) obj).b == this.b;
}
public int hashCode() {
return this.b.hashCode();
}
public M redact(M m) {
Message.Builder newBuilder = m.newBuilder();
for (FieldBinding<M, B> fieldBinding : this.d.values()) {
if (!fieldBinding.redacted || fieldBinding.label != WireField.Label.REQUIRED) {
boolean isAssignableFrom = Message.class.isAssignableFrom(fieldBinding.b().javaType);
if (fieldBinding.redacted || (isAssignableFrom && !fieldBinding.label.a())) {
Object a2 = fieldBinding.a(newBuilder);
if (a2 != null) {
fieldBinding.b(newBuilder, fieldBinding.d().redact(a2));
}
} else if (isAssignableFrom && fieldBinding.label.a()) {
Internal.redactElements((List) fieldBinding.a(newBuilder), fieldBinding.b());
}
} else {
throw new UnsupportedOperationException(String.format("Field '%s' in %s is required and cannot be redacted.", fieldBinding.name, this.javaType.getName()));
}
}
newBuilder.clearUnknownFields();
return (M) newBuilder.build();
}
public String toString(M m) {
StringBuilder sb = new StringBuilder();
for (FieldBinding<M, B> fieldBinding : this.d.values()) {
Object a2 = fieldBinding.a(m);
if (a2 != null) {
sb.append(", ");
sb.append(fieldBinding.name);
sb.append('=');
if (fieldBinding.redacted) {
a2 = a;
}
sb.append(a2);
}
}
sb.replace(0, 2, this.b.getSimpleName() + '{');
sb.append('}');
return sb.toString();
}
}