aboutsummaryrefslogtreecommitdiffhomepage
path: root/java/src/main/java/com/google/protobuf/WireFormat.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/main/java/com/google/protobuf/WireFormat.java')
-rw-r--r--java/src/main/java/com/google/protobuf/WireFormat.java94
1 files changed, 62 insertions, 32 deletions
diff --git a/java/src/main/java/com/google/protobuf/WireFormat.java b/java/src/main/java/com/google/protobuf/WireFormat.java
index 2faf2448..3b0bdcd0 100644
--- a/java/src/main/java/com/google/protobuf/WireFormat.java
+++ b/java/src/main/java/com/google/protobuf/WireFormat.java
@@ -56,54 +56,84 @@ public final class WireFormat {
static final int TAG_TYPE_MASK = (1 << TAG_TYPE_BITS) - 1;
/** Given a tag value, determines the wire type (the lower 3 bits). */
- static int getTagWireType(int tag) {
+ static int getTagWireType(final int tag) {
return tag & TAG_TYPE_MASK;
}
/** Given a tag value, determines the field number (the upper 29 bits). */
- public static int getTagFieldNumber(int tag) {
+ public static int getTagFieldNumber(final int tag) {
return tag >>> TAG_TYPE_BITS;
}
/** Makes a tag value given a field number and wire type. */
- static int makeTag(int fieldNumber, int wireType) {
+ static int makeTag(final int fieldNumber, final int wireType) {
return (fieldNumber << TAG_TYPE_BITS) | wireType;
}
- static int getWireFormatForFieldType(Descriptors.FieldDescriptor.Type type) {
- switch (type) {
- case DOUBLE : return WIRETYPE_FIXED64;
- case FLOAT : return WIRETYPE_FIXED32;
- case INT64 : return WIRETYPE_VARINT;
- case UINT64 : return WIRETYPE_VARINT;
- case INT32 : return WIRETYPE_VARINT;
- case FIXED64 : return WIRETYPE_FIXED64;
- case FIXED32 : return WIRETYPE_FIXED32;
- case BOOL : return WIRETYPE_VARINT;
- case STRING : return WIRETYPE_LENGTH_DELIMITED;
- case GROUP : return WIRETYPE_START_GROUP;
- case MESSAGE : return WIRETYPE_LENGTH_DELIMITED;
- case BYTES : return WIRETYPE_LENGTH_DELIMITED;
- case UINT32 : return WIRETYPE_VARINT;
- case ENUM : return WIRETYPE_VARINT;
- case SFIXED32: return WIRETYPE_FIXED32;
- case SFIXED64: return WIRETYPE_FIXED64;
- case SINT32 : return WIRETYPE_VARINT;
- case SINT64 : return WIRETYPE_VARINT;
+ /**
+ * Lite equivalent to {@link Descriptors.FieldDescriptor.JavaType}. This is
+ * only here to support the lite runtime and should not be used by users.
+ */
+ public enum JavaType {
+ INT(0),
+ LONG(0L),
+ FLOAT(0F),
+ DOUBLE(0D),
+ BOOLEAN(false),
+ STRING(""),
+ BYTE_STRING(ByteString.EMPTY),
+ ENUM(null),
+ MESSAGE(null);
+
+ JavaType(final Object defaultDefault) {
+ this.defaultDefault = defaultDefault;
+ }
+
+ /**
+ * The default default value for fields of this type, if it's a primitive
+ * type.
+ */
+ Object getDefaultDefault() {
+ return defaultDefault;
}
- throw new RuntimeException(
- "There is no way to get here, but the compiler thinks otherwise.");
+ private final Object defaultDefault;
}
- /** Given a field descriptor, returns the wire type. This differs from
- * getWireFormatForFieldType for packed repeated fields. */
- static int getWireFormatForField(Descriptors.FieldDescriptor descriptor) {
- if (descriptor.getOptions().getPacked()) {
- return WIRETYPE_LENGTH_DELIMITED;
- } else {
- return getWireFormatForFieldType(descriptor.getType());
+ /**
+ * Lite equivalent to {@link Descriptors.FieldDescriptor.Type}. This is
+ * only here to support the lite runtime and should not be used by users.
+ */
+ public enum FieldType {
+ DOUBLE (JavaType.DOUBLE , WIRETYPE_FIXED64 ),
+ FLOAT (JavaType.FLOAT , WIRETYPE_FIXED32 ),
+ INT64 (JavaType.LONG , WIRETYPE_VARINT ),
+ UINT64 (JavaType.LONG , WIRETYPE_VARINT ),
+ INT32 (JavaType.INT , WIRETYPE_VARINT ),
+ FIXED64 (JavaType.LONG , WIRETYPE_FIXED64 ),
+ FIXED32 (JavaType.INT , WIRETYPE_FIXED32 ),
+ BOOL (JavaType.BOOLEAN , WIRETYPE_VARINT ),
+ STRING (JavaType.STRING , WIRETYPE_LENGTH_DELIMITED),
+ GROUP (JavaType.MESSAGE , WIRETYPE_START_GROUP ),
+ MESSAGE (JavaType.MESSAGE , WIRETYPE_LENGTH_DELIMITED),
+ BYTES (JavaType.BYTE_STRING, WIRETYPE_LENGTH_DELIMITED),
+ UINT32 (JavaType.INT , WIRETYPE_VARINT ),
+ ENUM (JavaType.ENUM , WIRETYPE_VARINT ),
+ SFIXED32(JavaType.INT , WIRETYPE_FIXED32 ),
+ SFIXED64(JavaType.LONG , WIRETYPE_FIXED64 ),
+ SINT32 (JavaType.INT , WIRETYPE_VARINT ),
+ SINT64 (JavaType.LONG , WIRETYPE_VARINT );
+
+ FieldType(final JavaType javaType, final int wireType) {
+ this.javaType = javaType;
+ this.wireType = wireType;
}
+
+ private final JavaType javaType;
+ private final int wireType;
+
+ public JavaType getJavaType() { return javaType; }
+ public int getWireType() { return wireType; }
}
// Field numbers for feilds in MessageSet wire format.