THRIFT-759. java: Make TBase implement Comparable

git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@936581 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/compiler/cpp/src/generate/t_java_generator.cc b/compiler/cpp/src/generate/t_java_generator.cc
index cda3503..970c32c 100644
--- a/compiler/cpp/src/generate/t_java_generator.cc
+++ b/compiler/cpp/src/generate/t_java_generator.cc
@@ -701,10 +701,8 @@
   bool is_final = (tstruct->annotations_.find("final") != tstruct->annotations_.end());
 
   indent(f_struct) <<
-    "public " << (is_final ? "final " : "") << "class " << tstruct->get_name() 
-    << " extends TUnion<" << tstruct->get_name() << "._Fields> ";
-
-  f_struct << "implements Comparable<" << type_name(tstruct) << "> ";
+    "public " << (is_final ? "final " : "") << "class " << tstruct->get_name()
+    << " extends TUnion<" << tstruct->get_name() << ", " << tstruct->get_name() << "._Fields> ";
 
   scope_up(f_struct);
 
@@ -1072,9 +1070,7 @@
   if (is_exception) {
     out << "extends Exception ";
   }
-  out << "implements TBase<" << tstruct->get_name() << "._Fields>, java.io.Serializable, Cloneable";
-
-  out << ", Comparable<" << type_name(tstruct) << ">";
+  out << "implements TBase<" << tstruct->get_name() << ", " << tstruct->get_name() << "._Fields>, java.io.Serializable, Cloneable";
 
   out << " ";
 
diff --git a/lib/java/src/org/apache/thrift/TBase.java b/lib/java/src/org/apache/thrift/TBase.java
index bfa0abe..64ece80 100644
--- a/lib/java/src/org/apache/thrift/TBase.java
+++ b/lib/java/src/org/apache/thrift/TBase.java
@@ -27,7 +27,7 @@
  * Generic base interface for generated Thrift objects.
  *
  */
-public interface TBase<F extends TFieldIdEnum> extends Serializable {
+public interface TBase<T extends TBase, F extends TFieldIdEnum> extends Comparable<T>,  Serializable {
 
   /**
    * Reads the TObject from the given input protocol.
@@ -92,5 +92,5 @@
    */
   public void setFieldValue(F field, Object value);
 
-  public TBase<F> deepCopy();
+  public TBase<T, F> deepCopy();
 }
diff --git a/lib/java/src/org/apache/thrift/TUnion.java b/lib/java/src/org/apache/thrift/TUnion.java
index cc3c069..f5a7387 100644
--- a/lib/java/src/org/apache/thrift/TUnion.java
+++ b/lib/java/src/org/apache/thrift/TUnion.java
@@ -29,7 +29,7 @@
 import org.apache.thrift.protocol.TProtocolException;
 import org.apache.thrift.protocol.TStruct;
 
-public abstract class TUnion<F extends TFieldIdEnum> implements TBase<F> {
+public abstract class TUnion<T extends TUnion, F extends TFieldIdEnum> implements TBase<T, F> {
 
   protected Object value_;
   protected F setField_;
@@ -43,7 +43,7 @@
     setFieldValue(setField, value);
   }
 
-  protected TUnion(TUnion<F> other) {
+  protected TUnion(TUnion<T, F> other) {
     if (!other.getClass().equals(this.getClass())) {
       throw new ClassCastException();
     }