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 2010/08/05 22:44:53 UTC

svn commit: r982774 - in /incubator/thrift/trunk: compiler/cpp/src/generate/t_java_generator.cc lib/java/src/org/apache/thrift/TBase.java lib/java/src/org/apache/thrift/TUnion.java

Author: bryanduxbury
Date: Thu Aug  5 20:44:53 2010
New Revision: 982774

URL: http://svn.apache.org/viewvc?rev=982774&view=rev
Log:
THRIFT-751. java: Add clear() method to TBase

This patch adds a clear() method to the TBase interface and causes the compiler to generate implementations.

Modified:
    incubator/thrift/trunk/compiler/cpp/src/generate/t_java_generator.cc
    incubator/thrift/trunk/lib/java/src/org/apache/thrift/TBase.java
    incubator/thrift/trunk/lib/java/src/org/apache/thrift/TUnion.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=982774&r1=982773&r2=982774&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 Aug  5 20:44:53 2010
@@ -98,6 +98,7 @@ class t_java_generator : public t_oop_ge
   void generate_java_struct_result_writer(std::ofstream& out, t_struct* tstruct);
   void generate_java_struct_writer(std::ofstream& out, t_struct* tstruct);
   void generate_java_struct_tostring(std::ofstream& out, t_struct* tstruct);
+  void generate_java_struct_clear(std::ofstream& out, t_struct* tstruct);
   void generate_java_meta_data_map(std::ofstream& out, t_struct* tstruct);
   void generate_field_value_meta_data(std::ofstream& out, t_type* type);
   std::string get_java_type_string(t_type* type);
@@ -739,7 +740,7 @@ void t_java_generator::generate_java_uni
   generate_union_comparisons(f_struct, tstruct);
 
   f_struct << endl;
-  
+
   generate_union_hashcode(f_struct, tstruct);
 
   f_struct << endl;
@@ -1229,6 +1230,8 @@ void t_java_generator::generate_java_str
   indent(out) << "  return new " << tstruct->get_name() << "(this);" << endl;
   indent(out) << "}" << endl << endl;
 
+  generate_java_struct_clear(out, tstruct);
+
   generate_java_bean_boilerplate(out, tstruct);
   generate_generic_field_getters_setters(out, tstruct);
   generate_generic_isset_method(out, tstruct);
@@ -3867,6 +3870,47 @@ bool t_java_generator::has_bit_vector(t_
   return false;
 }
 
+void t_java_generator::generate_java_struct_clear(std::ofstream& out, t_struct* tstruct) {
+  indent(out) << "@Override" << endl;
+  indent(out) << "public void clear() {" << endl;
+
+  const vector<t_field*>& members = tstruct->get_members();
+  vector<t_field*>::const_iterator m_iter;
+
+  indent_up();
+  for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
+    t_type* t = get_true_type((*m_iter)->get_type());
+    if ((*m_iter)->get_value() != NULL) {
+      print_const_value(out, "this." + (*m_iter)->get_name(), t, (*m_iter)->get_value(), true, true);
+    } else {
+      if (type_can_be_null(t)) {
+        indent(out) << "this." << (*m_iter)->get_name() << " = null;" << endl;
+      } else {
+        // must be a base type
+        // means it also needs to be explicitly unset
+        indent(out) << "set" << get_cap_name((*m_iter)->get_name()) << get_cap_name("isSet") << "(false);" << endl;
+        switch (((t_base_type*)t)->get_base()) {
+          case t_base_type::TYPE_BYTE:
+          case t_base_type::TYPE_I16:
+          case t_base_type::TYPE_I32:
+          case t_base_type::TYPE_I64:
+            indent(out) << "this." << (*m_iter)->get_name() << " = 0;" << endl;
+            break;
+          case t_base_type::TYPE_DOUBLE:
+            indent(out) << "this." << (*m_iter)->get_name() << " = 0.0;" << endl;
+            break;
+          case t_base_type::TYPE_BOOL:
+            indent(out) << "this." << (*m_iter)->get_name() << " = false;" << endl;
+            break;
+        }
+      }
+    }
+  }
+  indent_down();
+
+  indent(out) << "}" << endl << endl;
+}
+
 THRIFT_REGISTER_GENERATOR(java, "Java",
 "    beans:           Members will be private, and setter methods will return void.\n"
 "    private-members: Members will be private, but setter methods will return 'this' like usual.\n"

Modified: incubator/thrift/trunk/lib/java/src/org/apache/thrift/TBase.java
URL: http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/java/src/org/apache/thrift/TBase.java?rev=982774&r1=982773&r2=982774&view=diff
==============================================================================
--- incubator/thrift/trunk/lib/java/src/org/apache/thrift/TBase.java (original)
+++ incubator/thrift/trunk/lib/java/src/org/apache/thrift/TBase.java Thu Aug  5 20:44:53 2010
@@ -93,4 +93,10 @@ public interface TBase<T extends TBase, 
   public void setFieldValue(F field, Object value);
 
   public TBase<T, F> deepCopy();
+
+  /**
+   * Return to the state of having just been initialized, as though you had just
+   * called the default constructor.
+   */
+  public void clear();
 }

Modified: incubator/thrift/trunk/lib/java/src/org/apache/thrift/TUnion.java
URL: http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/java/src/org/apache/thrift/TUnion.java?rev=982774&r1=982773&r2=982774&view=diff
==============================================================================
--- incubator/thrift/trunk/lib/java/src/org/apache/thrift/TUnion.java (original)
+++ incubator/thrift/trunk/lib/java/src/org/apache/thrift/TUnion.java Thu Aug  5 20:44:53 2010
@@ -226,4 +226,10 @@ public abstract class TUnion<T extends T
     }
     return sb.toString();
   }
+
+  @Override
+  public final void clear() {
+    this.setField_ = null;
+    this.value_ = null;
+  }
 }