From b3d0aa0c82ea5769b2a5dc7268e05c398d361726 Mon Sep 17 00:00:00 2001 From: Bryan Duxbury Date: Wed, 6 Oct 2010 20:00:03 +0000 Subject: [PATCH] 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 --- compiler/cpp/src/generate/t_java_generator.cc | 2 ++ .../apache/thrift/meta_data/FieldValueMetaData.java | 13 ++++++++++++- lib/java/test/org/apache/thrift/TestStruct.java | 7 ++++++- test/ThriftTest.thrift | 3 ++- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/compiler/cpp/src/generate/t_java_generator.cc b/compiler/cpp/src/generate/t_java_generator.cc index 4e32a379..ae4a5a9d 100644 --- a/compiler/cpp/src/generate/t_java_generator.cc +++ b/compiler/cpp/src/generate/t_java_generator.cc @@ -2112,6 +2112,8 @@ void t_java_generator::generate_field_value_meta_data(std::ofstream& out, t_type 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 2aad65d5..2180b089 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 @@ public class FieldValueMetaData implements java.io.Serializable { 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 class FieldValueMetaData implements java.io.Serializable { 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 e9f165d9..61b384d8 100644 --- a/lib/java/test/org/apache/thrift/TestStruct.java +++ b/lib/java/test/org/apache/thrift/TestStruct.java @@ -196,23 +196,28 @@ public class TestStruct extends TestCase { Map 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 5e927b5f..88fbd79a 100644 --- a/test/ThriftTest.thrift +++ b/test/ThriftTest.thrift @@ -94,7 +94,8 @@ struct Insanity struct CrazyNesting { 1: string string_field, 2: optional set set_field, - 3: required list< map,map>>>>> list_field + 3: required list< map,map>>>>> list_field, + 4: binary binary_field } exception Xception { -- 2.17.1