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());
+  }
 }


Reply via email to