diff --git a/compiler/cpp/src/thrift/generate/t_java_generator.cc b/compiler/cpp/src/thrift/generate/t_java_generator.cc
index d2be702..efcd7d3 100644
--- a/compiler/cpp/src/thrift/generate/t_java_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_java_generator.cc
@@ -323,6 +323,7 @@
   std::string java_package();
   std::string java_suppressions();
   std::string java_nullable_annotation();
+  std::string java_override_annotation();
   std::string type_name(t_type* ttype,
                         bool in_container = false,
                         bool in_init = false,
@@ -475,6 +476,10 @@
   return "@org.apache.thrift.annotation.Nullable";
 }
 
+string t_java_generator::java_override_annotation() {
+  return "@Override";
+}
+
 /**
  * Nothing in Java
  */
@@ -549,6 +554,7 @@
   indent(f_enum) << " * Get the integer value of this enum value, as defined in the Thrift IDL."
                  << endl;
   indent(f_enum) << " */" << endl;
+  indent(f_enum) << java_override_annotation() << endl;
   indent(f_enum) << "public int getValue() {" << endl;
   indent(f_enum) << "  return value;" << endl;
   indent(f_enum) << "}" << endl << endl;
@@ -941,6 +947,7 @@
   indent(out) << "  super(other);" << endl;
   indent(out) << "}" << endl;
 
+  indent(out) << java_override_annotation() << endl;
   indent(out) << "public " << tstruct->get_name() << " deepCopy() {" << endl;
   indent(out) << "  return new " << tstruct->get_name() << "(this);" << endl;
   indent(out) << "}" << endl << endl;
@@ -1122,14 +1129,14 @@
   out << endl;
   generate_get_struct_desc(out, tstruct);
   out << endl;
-  indent(out) << "@Override" << endl;
+  indent(out) << java_override_annotation() << endl;
   indent(out) << "protected _Fields enumForId(short id) {" << endl;
   indent(out) << "  return _Fields.findByThriftIdOrThrow(id);" << endl;
   indent(out) << "}" << endl;
 }
 
 void t_java_generator::generate_check_type(ostream& out, t_struct* tstruct) {
-  indent(out) << "@Override" << endl;
+  indent(out) << java_override_annotation() << endl;
   indent(out) << "protected void checkType(_Fields setField, java.lang.Object value) throws "
                  "java.lang.ClassCastException {"
               << endl;
@@ -1167,7 +1174,7 @@
 }
 
 void t_java_generator::generate_standard_scheme_read_value(ostream& out, t_struct* tstruct) {
-  indent(out) << "@Override" << endl;
+  indent(out) << java_override_annotation() << endl;
   indent(out)
       << "protected java.lang.Object standardSchemeReadValue(org.apache.thrift.protocol.TProtocol "
          "iprot, org.apache.thrift.protocol.TField field) throws "
@@ -1227,7 +1234,7 @@
 }
 
 void t_java_generator::generate_standard_scheme_write_value(ostream& out, t_struct* tstruct) {
-  indent(out) << "@Override" << endl;
+  indent(out) << java_override_annotation() << endl;
   indent(out) << "protected void standardSchemeWriteValue(org.apache.thrift.protocol.TProtocol "
                  "oprot) throws org.apache.thrift.TException {"
               << endl;
@@ -1267,7 +1274,7 @@
 }
 
 void t_java_generator::generate_tuple_scheme_read_value(ostream& out, t_struct* tstruct) {
-  indent(out) << "@Override" << endl;
+  indent(out) << java_override_annotation() << endl;
   indent(out)
       << "protected java.lang.Object tupleSchemeReadValue(org.apache.thrift.protocol.TProtocol "
          "iprot, short fieldID) throws org.apache.thrift.TException {"
@@ -1280,7 +1287,7 @@
   indent_up();
   indent(out) << "switch (setField) {" << endl;
   indent_up();
-
+  
   const vector<t_field*>& members = tstruct->get_members();
   vector<t_field*>::const_iterator m_iter;
 
@@ -1318,7 +1325,7 @@
 }
 
 void t_java_generator::generate_tuple_scheme_write_value(ostream& out, t_struct* tstruct) {
-  indent(out) << "@Override" << endl;
+  indent(out) << java_override_annotation() << endl;
   indent(out) << "protected void tupleSchemeWriteValue(org.apache.thrift.protocol.TProtocol oprot) "
                  "throws org.apache.thrift.TException {"
               << endl;
@@ -1358,7 +1365,7 @@
 }
 
 void t_java_generator::generate_get_field_desc(ostream& out, t_struct* tstruct) {
-  indent(out) << "@Override" << endl;
+  indent(out) << java_override_annotation() << endl;
   indent(out) << "protected org.apache.thrift.protocol.TField getFieldDesc(_Fields setField) {"
               << endl;
   indent_up();
@@ -1388,7 +1395,7 @@
 
 void t_java_generator::generate_get_struct_desc(ostream& out, t_struct* tstruct) {
   (void)tstruct;
-  indent(out) << "@Override" << endl;
+  indent(out) << java_override_annotation() << endl;
   indent(out) << "protected org.apache.thrift.protocol.TStruct getStructDesc() {" << endl;
   indent(out) << "  return STRUCT_DESC;" << endl;
   indent(out) << "}" << endl;
@@ -1413,7 +1420,7 @@
   indent(out) << "}" << endl;
   out << endl;
 
-  indent(out) << "@Override" << endl;
+  indent(out) << java_override_annotation() << endl;
   indent(out) << "public int compareTo(" << type_name(tstruct) << " other) {" << endl;
   indent(out) << "  int lastComparison = org.apache.thrift.TBaseHelper.compareTo(getSetField(), "
                  "other.getSetField());"
@@ -1430,7 +1437,7 @@
 
 void t_java_generator::generate_union_hashcode(ostream& out, t_struct* tstruct) {
   (void)tstruct;
-  indent(out) << "@Override" << endl;
+  indent(out) << java_override_annotation() << endl;
   indent(out) << "public int hashCode() {" << endl;
   indent(out)
       << "  java.util.List<java.lang.Object> list = new java.util.ArrayList<java.lang.Object>();"
@@ -1684,6 +1691,7 @@
   indent(out) << "}" << endl << endl;
 
   // clone method, so that you can deep copy an object when you don't know its class.
+  indent(out) << java_override_annotation() << endl;
   indent(out) << "public " << tstruct->get_name() << " deepCopy() {" << endl;
   indent(out) << "  return new " << tstruct->get_name() << "(this);" << endl;
   indent(out) << "}" << endl << endl;
@@ -1727,7 +1735,7 @@
   const vector<t_field*>& members = tstruct->get_members();
   vector<t_field*>::const_iterator m_iter;
 
-  out << indent() << "@Override" << endl
+  out << indent() << java_override_annotation() << endl
       << indent() << "public void writeToParcel(android.os.Parcel out, int flags) {" << endl;
   indent_up();
   string bitsetPrimitiveType = "";
@@ -1813,7 +1821,8 @@
   scope_down(out);
   out << endl;
 
-  out << indent() << "@Override" << endl << indent() << "public int describeContents() {" << endl;
+  out << indent() << java_override_annotation() << endl
+      << indent() << "public int describeContents() {" << endl;
   indent_up();
   out << indent() << "return 0;" << endl;
   scope_down(out);
@@ -1915,14 +1924,14 @@
               << "> CREATOR = new android.os.Parcelable.Creator<" << tname << ">() {" << endl;
   indent_up();
 
-  indent(out) << "@Override" << endl
+  indent(out) << java_override_annotation() << endl
               << indent() << "public " << tname << "[] newArray(int size) {" << endl;
   indent_up();
   indent(out) << "return new " << tname << "[size];" << endl;
   scope_down(out);
   out << endl;
 
-  indent(out) << "@Override" << endl
+  indent(out) << java_override_annotation() << endl
               << indent() << "public " << tname << " createFromParcel(android.os.Parcel in) {"
               << endl;
   indent_up();
@@ -1940,7 +1949,7 @@
  * @param tstruct The struct definition
  */
 void t_java_generator::generate_java_struct_equality(ostream& out, t_struct* tstruct) {
-  out << indent() << "@Override" << endl
+  out << indent() << java_override_annotation() << endl
       << indent() << "public boolean equals(java.lang.Object that) {" << endl;
   indent_up();
   out << indent() << "if (that instanceof " << tstruct->get_name() << ")" << endl
@@ -2006,7 +2015,8 @@
   const int MUL = 8191; // HashCode multiplier
   const int B_YES = 131071;
   const int B_NO = 524287;
-  out << indent() << "@Override" << endl << indent() << "public int hashCode() {" << endl;
+  out << indent() << java_override_annotation() << endl
+      << indent() << "public int hashCode() {" << endl;
   indent_up();
   indent(out) << "int hashCode = 1;" << endl;
 
@@ -2073,7 +2083,7 @@
 }
 
 void t_java_generator::generate_java_struct_compare_to(ostream& out, t_struct* tstruct) {
-  indent(out) << "@Override" << endl;
+  indent(out) << java_override_annotation() << endl;
   indent(out) << "public int compareTo(" << type_name(tstruct) << " other) {" << endl;
   indent_up();
 
@@ -2115,8 +2125,8 @@
  *
  * @param tstruct The struct definition
  */
-void t_java_generator::generate_java_struct_reader(ostream& out, t_struct* tstruct) {
-  (void)tstruct;
+void t_java_generator::generate_java_struct_reader(ostream& out, t_struct* /*tstruct*/) {
+  indent(out) << java_override_annotation() << endl;
   indent(out) << "public void read(org.apache.thrift.protocol.TProtocol iprot) throws "
                  "org.apache.thrift.TException {"
               << endl;
@@ -2180,8 +2190,8 @@
  *
  * @param tstruct The struct definition
  */
-void t_java_generator::generate_java_struct_writer(ostream& out, t_struct* tstruct) {
-  (void)tstruct;
+void t_java_generator::generate_java_struct_writer(ostream& out, t_struct* /*tstruct*/) {
+  indent(out) << java_override_annotation() << endl;
   indent(out) << "public void write(org.apache.thrift.protocol.TProtocol oprot) throws "
                  "org.apache.thrift.TException {"
               << endl;
@@ -2215,6 +2225,7 @@
 void t_java_generator::generate_java_struct_field_by_id(ostream& out, t_struct* tstruct) {
   (void)tstruct;
   indent(out) << java_nullable_annotation() << endl;
+  indent(out) << java_override_annotation() << endl;
   indent(out) << "public _Fields fieldForId(int fieldId) {" << endl;
   indent(out) << "  return _Fields.findByThriftId(fieldId);" << endl;
   indent(out) << "}" << endl << endl;
@@ -2279,6 +2290,7 @@
 
   // create the setter
 
+  indent(out) << java_override_annotation() << endl;
   indent(out) << "public void setFieldValue(_Fields field, " << java_nullable_annotation()
               << " java.lang.Object value) {" << endl;
   indent(out) << "  switch (field) {" << endl;
@@ -2288,6 +2300,7 @@
 
   // create the getter
   indent(out) << java_nullable_annotation() << endl;
+  indent(out) << java_override_annotation() << endl;
   indent(out) << "public java.lang.Object getFieldValue(_Fields field) {" << endl;
   indent_up();
   indent(out) << "switch (field) {" << endl;
@@ -2307,6 +2320,7 @@
   indent(out) << "/** Returns true if field corresponding to fieldID is set (has been assigned a "
                  "value) and false otherwise */"
               << endl;
+  indent(out) << java_override_annotation() << endl;
   indent(out) << "public boolean isSet(_Fields field) {" << endl;
   indent_up();
   indent(out) << "if (field == null) {" << endl;
@@ -2667,7 +2681,7 @@
  * @param tstruct The struct definition
  */
 void t_java_generator::generate_java_struct_tostring(ostream& out, t_struct* tstruct) {
-  out << indent() << "@Override" << endl
+  out << indent() << java_override_annotation() << endl
       << indent() << "public java.lang.String toString() {" << endl;
   indent_up();
 
@@ -3033,12 +3047,14 @@
       << endl;
   indent_up();
   indent(f_service_) << "public Factory() {}" << endl;
+  indent(f_service_) << java_override_annotation() << endl;
   indent(f_service_) << "public Client getClient(org.apache.thrift.protocol.TProtocol prot) {"
                      << endl;
   indent_up();
   indent(f_service_) << "return new Client(prot);" << endl;
   indent_down();
   indent(f_service_) << "}" << endl;
+  indent(f_service_) << java_override_annotation() << endl;
   indent(f_service_) << "public Client getClient(org.apache.thrift.protocol.TProtocol iprot, "
                         "org.apache.thrift.protocol.TProtocol oprot) {"
                      << endl;
@@ -3074,6 +3090,7 @@
     }
 
     // Open function
+    indent(f_service_) << java_override_annotation() << endl;
     indent(f_service_) << "public " << function_signature(*f_iter) << endl;
     scope_up(f_service_);
     indent(f_service_) << "send" << sep << javaname << "(";
@@ -3248,6 +3265,7 @@
   indent(f_service_) << "    this.clientManager = clientManager;" << endl;
   indent(f_service_) << "    this.protocolFactory = protocolFactory;" << endl;
   indent(f_service_) << "  }" << endl;
+  indent(f_service_) << java_override_annotation() << endl;
   indent(f_service_) << "  public AsyncClient "
                         "getAsyncClient(org.apache.thrift.transport.TNonblockingTransport "
                         "transport) {"
@@ -3286,6 +3304,7 @@
     string result_name = (*f_iter)->get_name() + "_result";
 
     // Main method body
+    indent(f_service_) << java_override_annotation() << endl;
     indent(f_service_) << "public " << function_signature_async(*f_iter, false)
                        << " throws org.apache.thrift.TException {" << endl;
     indent(f_service_) << "  checkReady();" << endl;
@@ -3334,7 +3353,7 @@
     }
 
     indent(f_service_) << "}" << endl << endl;
-
+    indent(f_service_) << java_override_annotation() << endl;
     indent(f_service_) << "public void write_args(org.apache.thrift.protocol.TProtocol prot) "
                           "throws org.apache.thrift.TException {"
                        << endl;
@@ -3360,6 +3379,7 @@
     indent(f_service_) << "}" << endl << endl;
 
     // Return method
+    indent(f_service_) << java_override_annotation() << endl;
     indent(f_service_) << "public " + type_name(ret_type, true) + " getResult() throws ";
     vector<t_field*>::const_iterator x_iter;
     for (x_iter = xceptions.begin(); x_iter != xceptions.end(); ++x_iter) {
@@ -3595,10 +3615,12 @@
   indent(f_service_) << "  super(\"" << tfunction->get_name() << "\");" << endl;
   indent(f_service_) << "}" << endl << endl;
 
+  indent(f_service_) << java_override_annotation() << endl;
   indent(f_service_) << "public " << argsname << " getEmptyArgsInstance() {" << endl;
   indent(f_service_) << "  return new " << argsname << "();" << endl;
   indent(f_service_) << "}" << endl << endl;
 
+  indent(f_service_) << java_override_annotation() << endl;
   indent(f_service_) << "public org.apache.thrift.async.AsyncMethodCallback<" << resulttype
                      << "> getResultHandler(final "
                         "org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, "
@@ -3609,6 +3631,7 @@
   indent(f_service_) << "return new org.apache.thrift.async.AsyncMethodCallback<" << resulttype
                      << ">() { " << endl;
   indent_up();
+  indent(f_service_) << java_override_annotation() << endl;
   indent(f_service_) << "public void onComplete(" << resulttype << " o) {" << endl;
 
   indent_up();
@@ -3646,6 +3669,7 @@
   indent_down();
   indent(f_service_) << "}" << endl;
 
+  indent(f_service_) << java_override_annotation() << endl;
   indent(f_service_) << "public void onError(java.lang.Exception e) {" << endl;
   indent_up();
 
@@ -3731,10 +3755,12 @@
   indent_down();
   indent(f_service_) << "}" << endl << endl;
 
+  indent(f_service_) << java_override_annotation() << endl;
   indent(f_service_) << "protected boolean isOneway() {" << endl;
   indent(f_service_) << "  return " << ((tfunction->is_oneway()) ? "true" : "false") << ";" << endl;
   indent(f_service_) << "}" << endl << endl;
 
+  indent(f_service_) << java_override_annotation() << endl;
   indent(f_service_) << "public void start(I iface, " << argsname
                      << " args, org.apache.thrift.async.AsyncMethodCallback<" << resulttype
                      << "> resultHandler) throws org.apache.thrift.TException {" << endl;
@@ -3795,20 +3821,23 @@
   indent(f_service_) << "  super(\"" << tfunction->get_name() << "\");" << endl;
   indent(f_service_) << "}" << endl << endl;
 
+  indent(f_service_) << java_override_annotation() << endl;
   indent(f_service_) << "public " << argsname << " getEmptyArgsInstance() {" << endl;
   indent(f_service_) << "  return new " << argsname << "();" << endl;
   indent(f_service_) << "}" << endl << endl;
 
+  indent(f_service_) << java_override_annotation() << endl;
   indent(f_service_) << "protected boolean isOneway() {" << endl;
   indent(f_service_) << "  return " << ((tfunction->is_oneway()) ? "true" : "false") << ";" << endl;
   indent(f_service_) << "}" << endl << endl;
 
-  indent(f_service_) << "@Override" << endl;
+  indent(f_service_) << java_override_annotation() << endl;
   indent(f_service_) << "protected boolean rethrowUnhandledExceptions() {" << endl;
   indent(f_service_) << "  return " << ((rethrow_unhandled_exceptions_) ? "true" : "false") << ";"
                      << endl;
   indent(f_service_) << "}" << endl << endl;
 
+  indent(f_service_) << java_override_annotation() << endl;
   indent(f_service_) << "public " << resultname << " getResult(I iface, " << argsname
                      << " args) throws org.apache.thrift.TException {" << endl;
   indent_up();
@@ -5125,10 +5154,12 @@
   indent(out) << "  _fieldName = fieldName;" << endl;
   indent(out) << "}" << endl << endl;
 
+  indent(out) << java_override_annotation() << endl;
   indent(out) << "public short getThriftFieldId() {" << endl;
   indent(out) << "  return _thriftId;" << endl;
   indent(out) << "}" << endl << endl;
 
+  indent(out) << java_override_annotation() << endl;
   indent(out) << "public java.lang.String getFieldName() {" << endl;
   indent(out) << "  return _fieldName;" << endl;
   indent(out) << "}" << endl;
@@ -5169,9 +5200,7 @@
 }
 
 void t_java_generator::generate_java_struct_clear(std::ostream& out, t_struct* tstruct) {
-  if (!java5_) {
-    indent(out) << "@Override" << endl;
-  }
+  indent(out) << java_override_annotation() << endl;
   indent(out) << "public void clear() {" << endl;
 
   const vector<t_field*>& members = tstruct->get_members();
@@ -5283,8 +5312,9 @@
 }
 
 void t_java_generator::generate_standard_reader(ostream& out, t_struct* tstruct) {
-  out << indent() << "public void read(org.apache.thrift.protocol.TProtocol iprot, "
-      << tstruct->get_name() << " struct) throws org.apache.thrift.TException {" << endl;
+  indent(out) << java_override_annotation() << endl;
+  indent(out) << "public void read(org.apache.thrift.protocol.TProtocol iprot, "
+              << tstruct->get_name() << " struct) throws org.apache.thrift.TException {" << endl;
   indent_up();
 
   const vector<t_field*>& fields = tstruct->get_members();
@@ -5379,8 +5409,9 @@
 
 void t_java_generator::generate_standard_writer(ostream& out, t_struct* tstruct, bool is_result) {
   indent_up();
-  out << indent() << "public void write(org.apache.thrift.protocol.TProtocol oprot, "
-      << tstruct->get_name() << " struct) throws org.apache.thrift.TException {" << endl;
+  indent(out) << java_override_annotation() << endl;
+  indent(out) << "public void write(org.apache.thrift.protocol.TProtocol oprot, "
+              << tstruct->get_name() << " struct) throws org.apache.thrift.TException {" << endl;
   indent_up();
   const vector<t_field*>& fields = tstruct->get_sorted_members();
   vector<t_field*>::const_iterator f_iter;
@@ -5437,6 +5468,7 @@
               << "StandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {"
               << endl;
   indent_up();
+  indent(out) << java_override_annotation() << endl;
   indent(out) << "public " << tstruct->get_name() << "StandardScheme getScheme() {" << endl;
   indent_up();
   indent(out) << "return new " << tstruct->get_name() << "StandardScheme();" << endl;
@@ -5459,7 +5491,7 @@
 }
 
 void t_java_generator::generate_java_struct_tuple_reader(ostream& out, t_struct* tstruct) {
-  indent(out) << "@Override" << endl;
+  indent(out) << java_override_annotation() << endl;
   indent(out) << "public void read(org.apache.thrift.protocol.TProtocol prot, "
               << tstruct->get_name() << " struct) throws org.apache.thrift.TException {" << endl;
   indent_up();
@@ -5503,7 +5535,7 @@
 }
 
 void t_java_generator::generate_java_struct_tuple_writer(ostream& out, t_struct* tstruct) {
-  indent(out) << "@Override" << endl;
+  indent(out) << java_override_annotation() << endl;
   indent(out) << "public void write(org.apache.thrift.protocol.TProtocol prot, "
               << tstruct->get_name() << " struct) throws org.apache.thrift.TException {" << endl;
   indent_up();
@@ -5562,6 +5594,7 @@
   indent(out) << "private static class " << tstruct->get_name()
               << "TupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {" << endl;
   indent_up();
+  indent(out) << java_override_annotation() << endl;
   indent(out) << "public " << tstruct->get_name() << "TupleScheme getScheme() {" << endl;
   indent_up();
   indent(out) << "return new " << tstruct->get_name() << "TupleScheme();" << endl;
