THRIFT-1170. java: Thrift Generated Code and Java 5

This patch adds a trivial java5 option to the java generator.

Patch: Greg Moulliet

git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1126765 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 e453249..3b8516a 100644
--- a/compiler/cpp/src/generate/t_java_generator.cc
+++ b/compiler/cpp/src/generate/t_java_generator.cc
@@ -62,6 +62,12 @@
     iter = parsed_options.find("android_legacy");
     android_legacy_ = (iter != parsed_options.end());
 
+    iter = parsed_options.find("java5");
+    java5_ = (iter != parsed_options.end());
+    if (java5_) {
+        android_legacy_ = true;
+    }
+
     out_dir_base_ = (bean_style_ ? "gen-javabean" : "gen-java");
   }
 
@@ -262,6 +268,7 @@
   bool nocamel_style_;
   bool gen_hash_code_;
   bool android_legacy_;
+  bool java5_;
 
 };
 
@@ -3789,7 +3796,9 @@
 }
 
 void t_java_generator::generate_java_struct_clear(std::ofstream& out, t_struct* tstruct) {
-  indent(out) << "@Override" << endl;
+  if (!java5_) {
+     indent(out) << "@Override" << endl;
+  }
   indent(out) << "public void clear() {" << endl;
 
   const vector<t_field*>& members = tstruct->get_members();
@@ -3869,5 +3878,6 @@
 "    nocamel:         Do not use CamelCase field accessors with beans.\n"
 "    hashcode:        Generate quality hashCode methods.\n"
 "    android_legacy:  Do not use java.io.IOException(throwable) (available for Android 2.3 and above).\n"
+"    java5:           Generate Java 1.5 compliant code (includes android_legacy flag)."
 )
 
diff --git a/lib/java/src/org/apache/thrift/TUnion.java b/lib/java/src/org/apache/thrift/TUnion.java
index cfe910b..1962c80 100644
--- a/lib/java/src/org/apache/thrift/TUnion.java
+++ b/lib/java/src/org/apache/thrift/TUnion.java
@@ -30,7 +30,7 @@
 import org.apache.thrift.protocol.TProtocolException;
 import org.apache.thrift.protocol.TStruct;
 
-public abstract class TUnion<T extends TUnion, F extends TFieldIdEnum> implements TBase<T, F> {
+public abstract class TUnion<T extends TUnion<?,?>, F extends TFieldIdEnum> implements TBase<T, F> {
 
   protected Object value_;
   protected F setField_;