You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by br...@apache.org on 2011/06/08 19:46:55 UTC

svn commit: r1133482 - in /thrift/trunk: compiler/cpp/src/generate/t_java_generator.cc lib/java/test/org/apache/thrift/TestTUnion.java

Author: bryanduxbury
Date: Wed Jun  8 17:46:55 2011
New Revision: 1133482

URL: http://svn.apache.org/viewvc?rev=1133482&view=rev
Log:
THRIFT-1199. java: Union structs should have generated methods to test whether a specific field is currently set 

Patch: Piotr Kozikowski

Modified:
    thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc
    thrift/trunk/lib/java/test/org/apache/thrift/TestTUnion.java

Modified: thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc
URL: http://svn.apache.org/viewvc/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc?rev=1133482&r1=1133481&r2=1133482&view=diff
==============================================================================
--- thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc (original)
+++ thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc Wed Jun  8 17:46:55 2011
@@ -139,6 +139,7 @@ class t_java_generator : public t_oop_ge
   void generate_java_union(t_struct* tstruct);
   void generate_union_constructor(ofstream& out, t_struct* tstruct);
   void generate_union_getters_and_setters(ofstream& out, t_struct* tstruct);
+  void generate_union_is_set_methods(ofstream& out, t_struct* tstruct);
   void generate_union_abstract_methods(ofstream& out, t_struct* tstruct);
   void generate_check_type(ofstream& out, t_struct* tstruct);
   void generate_read_value(ofstream& out, t_struct* tstruct);
@@ -727,6 +728,10 @@ void t_java_generator::generate_java_uni
   f_struct << endl;
 
   generate_union_getters_and_setters(f_struct, tstruct);
+
+  f_struct << endl;
+
+  generate_union_is_set_methods(f_struct, tstruct);
   
   f_struct << endl;
 
@@ -854,6 +859,28 @@ void t_java_generator::generate_union_ge
   }
 }
 
+void t_java_generator::generate_union_is_set_methods(ofstream& out, t_struct* tstruct) {
+  const vector<t_field*>& members = tstruct->get_members();
+  vector<t_field*>::const_iterator m_iter;
+
+  bool first = true;
+  for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
+    if (first) {
+      first = false;
+    } else {
+      out << endl;
+    }
+
+    std::string field_name = (*m_iter)->get_name();
+
+    indent(out) << "public boolean is" << get_cap_name("set") << get_cap_name(field_name) << "() {" << endl;
+    indent_up();
+    indent(out) << "return setField_ == _Fields." << constant_name(field_name) << ";" << endl;
+    indent_down();
+    indent(out) << "}" << endl << endl;
+  }
+}
+
 void t_java_generator::generate_union_abstract_methods(ofstream& out, t_struct* tstruct) {
   generate_check_type(out, tstruct);
   out << endl;

Modified: thrift/trunk/lib/java/test/org/apache/thrift/TestTUnion.java
URL: http://svn.apache.org/viewvc/thrift/trunk/lib/java/test/org/apache/thrift/TestTUnion.java?rev=1133482&r1=1133481&r2=1133482&view=diff
==============================================================================
--- thrift/trunk/lib/java/test/org/apache/thrift/TestTUnion.java (original)
+++ thrift/trunk/lib/java/test/org/apache/thrift/TestTUnion.java Wed Jun  8 17:46:55 2011
@@ -49,6 +49,7 @@ public class TestTUnion extends TestCase
     TestUnion union = new TestUnion();
 
     assertFalse(union.isSet());
+    assertFalse(union.isSetI32_field());
     assertNull(union.getFieldValue());
 
     union = new TestUnion(TestUnion._Fields.I32_FIELD, 25);
@@ -56,6 +57,8 @@ public class TestTUnion extends TestCase
     assertEquals(Integer.valueOf(25), union.getFieldValue());
   
     assertEquals(Integer.valueOf(25), union.getFieldValue(TestUnion._Fields.I32_FIELD));
+    
+    assertTrue(union.isSetI32_field());
   
     try {
       union.getFieldValue(TestUnion._Fields.STRING_FIELD);
@@ -73,6 +76,8 @@ public class TestTUnion extends TestCase
     assertEquals(1, union.getI32_field());
     union.hashCode();
 
+    assertFalse(union.isSetString_field());
+    
     try {
       union.getString_field();
       fail("should have thrown an exception");