THRIFT-946. java: Augment FieldValueMetaData so it differentiates 'string' and 'binary' fields.
This patch adds a new method to the FieldMetaData class that indicates binary or not.
Patch: Mathias Herberts
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@1005220 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/compiler/cpp/src/generate/t_java_generator.cc b/compiler/cpp/src/generate/t_java_generator.cc
index 4e32a37..ae4a5a9 100644
--- a/compiler/cpp/src/generate/t_java_generator.cc
+++ b/compiler/cpp/src/generate/t_java_generator.cc
@@ -2112,6 +2112,8 @@
indent(out) << "new FieldValueMetaData(" << get_java_type_string(type);
if (type->is_typedef()) {
indent(out) << ", \"" << ((t_typedef*)type)->get_symbolic() << "\"";
+ } else if (((t_base_type*)type)->is_binary()) {
+ indent(out) << ", true";
}
}
out << ")";
diff --git a/lib/java/src/org/apache/thrift/meta_data/FieldValueMetaData.java b/lib/java/src/org/apache/thrift/meta_data/FieldValueMetaData.java
index 2aad65d..2180b08 100644
--- a/lib/java/src/org/apache/thrift/meta_data/FieldValueMetaData.java
+++ b/lib/java/src/org/apache/thrift/meta_data/FieldValueMetaData.java
@@ -30,17 +30,24 @@
private final boolean isTypedefType;
private final String typedefName;
+ private final boolean isBinary;
- public FieldValueMetaData(byte type) {
+ public FieldValueMetaData(byte type, boolean binary) {
this.type = type;
this.isTypedefType = false;
this.typedefName = null;
+ this.isBinary = binary;
+ }
+
+ public FieldValueMetaData(byte type) {
+ this(type, false);
}
public FieldValueMetaData(byte type, String typedefName) {
this.type = type;
this.isTypedefType = true;
this.typedefName = typedefName;
+ this.isBinary = false;
}
public boolean isTypedef() {
@@ -58,4 +65,8 @@
public boolean isContainer() {
return type == TType.LIST || type == TType.MAP || type == TType.SET;
}
+
+ public boolean isBinary() {
+ return isBinary;
+ }
}
diff --git a/lib/java/test/org/apache/thrift/TestStruct.java b/lib/java/test/org/apache/thrift/TestStruct.java
index e9f165d..61b384d 100644
--- a/lib/java/test/org/apache/thrift/TestStruct.java
+++ b/lib/java/test/org/apache/thrift/TestStruct.java
@@ -196,23 +196,28 @@
Map<CrazyNesting._Fields, FieldMetaData> mdMap = CrazyNesting.metaDataMap;
// Check for struct fields existence
- assertEquals(3, mdMap.size());
+ assertEquals(4, mdMap.size());
assertTrue(mdMap.containsKey(CrazyNesting._Fields.SET_FIELD));
assertTrue(mdMap.containsKey(CrazyNesting._Fields.LIST_FIELD));
assertTrue(mdMap.containsKey(CrazyNesting._Fields.STRING_FIELD));
+ assertTrue(mdMap.containsKey(CrazyNesting._Fields.BINARY_FIELD));
// Check for struct fields contents
assertEquals("string_field", mdMap.get(CrazyNesting._Fields.STRING_FIELD).fieldName);
assertEquals("list_field", mdMap.get(CrazyNesting._Fields.LIST_FIELD).fieldName);
assertEquals("set_field", mdMap.get(CrazyNesting._Fields.SET_FIELD).fieldName);
+ assertEquals("binary_field", mdMap.get(CrazyNesting._Fields.BINARY_FIELD).fieldName);
assertEquals(TFieldRequirementType.DEFAULT, mdMap.get(CrazyNesting._Fields.STRING_FIELD).requirementType);
assertEquals(TFieldRequirementType.REQUIRED, mdMap.get(CrazyNesting._Fields.LIST_FIELD).requirementType);
assertEquals(TFieldRequirementType.OPTIONAL, mdMap.get(CrazyNesting._Fields.SET_FIELD).requirementType);
assertEquals(TType.STRING, mdMap.get(CrazyNesting._Fields.STRING_FIELD).valueMetaData.type);
+ assertFalse(mdMap.get(CrazyNesting._Fields.STRING_FIELD).valueMetaData.isBinary());
assertEquals(TType.LIST, mdMap.get(CrazyNesting._Fields.LIST_FIELD).valueMetaData.type);
assertEquals(TType.SET, mdMap.get(CrazyNesting._Fields.SET_FIELD).valueMetaData.type);
+ assertEquals(TType.STRING, mdMap.get(CrazyNesting._Fields.BINARY_FIELD).valueMetaData.type);
+ assertTrue(mdMap.get(CrazyNesting._Fields.BINARY_FIELD).valueMetaData.isBinary());
// Check nested structures
assertTrue(mdMap.get(CrazyNesting._Fields.LIST_FIELD).valueMetaData.isContainer());
diff --git a/test/ThriftTest.thrift b/test/ThriftTest.thrift
index 5e927b5..88fbd79 100644
--- a/test/ThriftTest.thrift
+++ b/test/ThriftTest.thrift
@@ -94,7 +94,8 @@
struct CrazyNesting {
1: string string_field,
2: optional set<Insanity> set_field,
- 3: required list< map<set<i32>,map<i32,set<list<map<Insanity,string>>>>>> list_field
+ 3: required list< map<set<i32>,map<i32,set<list<map<Insanity,string>>>>>> list_field,
+ 4: binary binary_field
}
exception Xception {