Author: bryanduxbury
Date: Thu Apr 22 01:05:02 2010
New Revision: 936588
URL: http://svn.apache.org/viewvc?rev=936588&view=rev
Log:
THRIFT-761. java: Include the symbolic name of a typedef field in the field
metadata
This patch adds a new isTypedef() method to FieldValueMetaData and converts
MetaDataTest to a testcase in TestStruct.
Removed:
incubator/thrift/trunk/lib/java/test/org/apache/thrift/test/MetaDataTest.java
Modified:
incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc
incubator/thrift/trunk/lib/java/build.xml
incubator/thrift/trunk/lib/java/src/org/apache/thrift/meta_data/FieldValueMetaData.java
incubator/thrift/trunk/lib/java/test/org/apache/thrift/TestStruct.java
Modified: incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc
URL:
http://svn.apache.org/viewvc/incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc?rev=936588&r1=936587&r2=936588&view=diff
==============================================================================
--- incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc
(original)
+++ incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc Thu
Apr 22 01:05:02 2010
@@ -2097,6 +2097,9 @@ void t_java_generator::generate_field_va
indent(out) << "new EnumMetaData(TType.ENUM, " << type_name(type) <<
".class";
} else {
indent(out) << "new FieldValueMetaData(" << get_java_type_string(type);
+ if (type->is_typedef()) {
+ indent(out) << ", \"" << ((t_typedef*)type)->get_symbolic() << "\"";
+ }
}
out << ")";
indent_down();
Modified: incubator/thrift/trunk/lib/java/build.xml
URL:
http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/java/build.xml?rev=936588&r1=936587&r2=936588&view=diff
==============================================================================
--- incubator/thrift/trunk/lib/java/build.xml (original)
+++ incubator/thrift/trunk/lib/java/build.xml Thu Apr 22 01:05:02 2010
@@ -205,8 +205,6 @@
classpathref="test.classpath" failonerror="true" />
<java classname="org.apache.thrift.test.ToStringTest"
classpathref="test.classpath" failonerror="true" />
- <java classname="org.apache.thrift.test.MetaDataTest"
- classpathref="test.classpath" failonerror="true" />
<java classname="org.apache.thrift.test.JavaBeansTest"
classpathref="test.classpath" failonerror="true" />
</target>
Modified:
incubator/thrift/trunk/lib/java/src/org/apache/thrift/meta_data/FieldValueMetaData.java
URL:
http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/java/src/org/apache/thrift/meta_data/FieldValueMetaData.java?rev=936588&r1=936587&r2=936588&view=diff
==============================================================================
---
incubator/thrift/trunk/lib/java/src/org/apache/thrift/meta_data/FieldValueMetaData.java
(original)
+++
incubator/thrift/trunk/lib/java/src/org/apache/thrift/meta_data/FieldValueMetaData.java
Thu Apr 22 01:05:02 2010
@@ -28,8 +28,27 @@ import org.apache.thrift.protocol.TType;
public class FieldValueMetaData implements java.io.Serializable {
public final byte type;
- public FieldValueMetaData(byte type){
+ private final boolean isTypedefType;
+ private final String typedefName;
+
+ public FieldValueMetaData(byte type) {
+ this.type = type;
+ this.isTypedefType = false;
+ this.typedefName = null;
+ }
+
+ public FieldValueMetaData(byte type, String typedefName) {
this.type = type;
+ this.isTypedefType = true;
+ this.typedefName = typedefName;
+ }
+
+ public boolean isTypedef() {
+ return isTypedefType;
+ }
+
+ public String getTypedefName() {
+ return typedefName;
}
public boolean isStruct() {
Modified: incubator/thrift/trunk/lib/java/test/org/apache/thrift/TestStruct.java
URL:
http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/java/test/org/apache/thrift/TestStruct.java?rev=936588&r1=936587&r2=936588&view=diff
==============================================================================
--- incubator/thrift/trunk/lib/java/test/org/apache/thrift/TestStruct.java
(original)
+++ incubator/thrift/trunk/lib/java/test/org/apache/thrift/TestStruct.java Thu
Apr 22 01:05:02 2010
@@ -5,17 +5,26 @@ import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
+import java.util.Map;
import junit.framework.TestCase;
+import org.apache.thrift.meta_data.FieldMetaData;
+import org.apache.thrift.meta_data.ListMetaData;
+import org.apache.thrift.meta_data.MapMetaData;
+import org.apache.thrift.meta_data.SetMetaData;
+import org.apache.thrift.meta_data.StructMetaData;
import org.apache.thrift.protocol.TBinaryProtocol;
+import org.apache.thrift.protocol.TType;
import thrift.test.Bonk;
+import thrift.test.CrazyNesting;
import thrift.test.HolyMoley;
import thrift.test.Insanity;
import thrift.test.Nesting;
import thrift.test.Numberz;
import thrift.test.OneOfEach;
+import thrift.test.Xtruct;
public class TestStruct extends TestCase {
@@ -186,4 +195,52 @@ public class TestStruct extends TestCase
int compareTo = insanity1.compareTo(insanity2);
assertEquals(insanity1 + " should be equal to " + insanity2 + ", but is: "
+ compareTo, 0, compareTo);
}
+
+ public void testMetaData() throws Exception {
+ Map<CrazyNesting._Fields, FieldMetaData> mdMap = CrazyNesting.metaDataMap;
+
+ // Check for struct fields existence
+ assertEquals(3, mdMap.size());
+ assertTrue(mdMap.containsKey(CrazyNesting._Fields.SET_FIELD));
+ assertTrue(mdMap.containsKey(CrazyNesting._Fields.LIST_FIELD));
+ assertTrue(mdMap.containsKey(CrazyNesting._Fields.STRING_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(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);
+ assertEquals(TType.LIST,
mdMap.get(CrazyNesting._Fields.LIST_FIELD).valueMetaData.type);
+ assertEquals(TType.SET,
mdMap.get(CrazyNesting._Fields.SET_FIELD).valueMetaData.type);
+
+ // Check nested structures
+
assertTrue(mdMap.get(CrazyNesting._Fields.LIST_FIELD).valueMetaData.isContainer());
+
+
assertFalse(mdMap.get(CrazyNesting._Fields.LIST_FIELD).valueMetaData.isStruct());
+
+ assertEquals(TType.STRUCT,
((MapMetaData)((ListMetaData)((SetMetaData)((MapMetaData)((MapMetaData)((ListMetaData)mdMap.get(CrazyNesting._Fields.LIST_FIELD).valueMetaData).elemMetaData).valueMetaData).valueMetaData).elemMetaData).elemMetaData).keyMetaData.type);
+
+ assertEquals(Insanity.class,
((StructMetaData)((MapMetaData)((ListMetaData)((SetMetaData)((MapMetaData)((MapMetaData)((ListMetaData)mdMap.get(CrazyNesting._Fields.LIST_FIELD).valueMetaData).elemMetaData).valueMetaData).valueMetaData).elemMetaData).elemMetaData).keyMetaData).structClass);
+
+ // Check that FieldMetaData contains a map with metadata for all generated
struct classes
+ assertNotNull(FieldMetaData.getStructMetaDataMap(CrazyNesting.class));
+ assertNotNull(FieldMetaData.getStructMetaDataMap(Insanity.class));
+ assertNotNull(FieldMetaData.getStructMetaDataMap(Xtruct.class));
+
+ assertEquals(CrazyNesting.metaDataMap,
FieldMetaData.getStructMetaDataMap(CrazyNesting.class));
+ assertEquals(Insanity.metaDataMap,
FieldMetaData.getStructMetaDataMap(Insanity.class));
+
+ for (Map.Entry<? extends TFieldIdEnum, FieldMetaData> mdEntry :
mdMap.entrySet()) {
+ assertEquals(mdEntry.getKey(),
CrazyNesting._Fields.findByName(mdEntry.getValue().fieldName));
+ }
+
+ MapMetaData vmd =
(MapMetaData)Insanity.metaDataMap.get(Insanity._Fields.USER_MAP).valueMetaData;
+ assertTrue(vmd.valueMetaData.isTypedef());
+ assertFalse(vmd.keyMetaData.isTypedef());
+ }
}