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");