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);
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;
}
}
+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;
TestUnion union = new TestUnion();
assertFalse(union.isSet());
+ assertFalse(union.isSetI32_field());
assertNull(union.getFieldValue());
union = new TestUnion(TestUnion._Fields.I32_FIELD, 25);
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);
assertEquals(1, union.getI32_field());
union.hashCode();
+ assertFalse(union.isSetString_field());
+
try {
union.getString_field();
fail("should have thrown an exception");