Merge "Change reftypes_primitive_enums to reftypes_compat_mode."
diff --git a/src/google/protobuf/compiler/javanano/javanano_generator.cc b/src/google/protobuf/compiler/javanano/javanano_generator.cc
index 1936e45..b1e75e3 100644
--- a/src/google/protobuf/compiler/javanano/javanano_generator.cc
+++ b/src/google/protobuf/compiler/javanano/javanano_generator.cc
@@ -140,9 +140,12 @@
     } else if (option_name == "optional_field_style") {
       params.set_optional_field_accessors(option_value == "accessors");
       params.set_use_reference_types_for_primitives(option_value == "reftypes"
-          || option_value == "reftypes_primitive_enums");
+          || option_value == "reftypes_compat_mode");
       params.set_reftypes_primitive_enums(
-          option_value == "reftypes_primitive_enums");
+          option_value == "reftypes_compat_mode");
+      if (option_value == "reftypes_compat_mode") {
+        params.set_generate_clear(false);
+      }
     } else if (option_name == "generate_equals") {
       params.set_generate_equals(option_value == "true");
     } else if (option_name == "ignore_services") {
diff --git a/src/google/protobuf/compiler/javanano/javanano_message.cc b/src/google/protobuf/compiler/javanano/javanano_message.cc
index cc44cd3..7c52ca3 100644
--- a/src/google/protobuf/compiler/javanano/javanano_message.cc
+++ b/src/google/protobuf/compiler/javanano/javanano_message.cc
@@ -245,16 +245,20 @@
       "        _classInitialized = true;\n"
       "      }\n"
       "    }\n"
-      "  }\n"
-      "  clear();\n"
-      "}\n");
+      "  }\n");
+    if (params_.generate_clear()) {
+      printer->Print("  clear();\n");
+    }
+    printer->Print("}\n");
   } else {
-    printer->Print(
-      "\n"
-      "public $classname$() {\n"
-      "  clear();\n"
-      "}\n",
-      "classname", descriptor_->name());
+    if (params_.generate_clear()) {
+      printer->Print(
+        "\n"
+        "public $classname$() {\n"
+        "  clear();\n"
+        "}\n",
+        "classname", descriptor_->name());
+    }
   }
 
   // Other methods in this class
@@ -440,6 +444,9 @@
 }
 
 void MessageGenerator::GenerateClear(io::Printer* printer) {
+  if (!params_.generate_clear()) {
+    return;
+  }
   printer->Print(
     "\n"
     "public $classname$ clear() {\n",
diff --git a/src/google/protobuf/compiler/javanano/javanano_params.h b/src/google/protobuf/compiler/javanano/javanano_params.h
index 1512b4c..4691f36 100644
--- a/src/google/protobuf/compiler/javanano/javanano_params.h
+++ b/src/google/protobuf/compiler/javanano/javanano_params.h
@@ -65,6 +65,7 @@
   bool ignore_services_;
   bool parcelable_messages_;
   bool reftypes_primitive_enums_;
+  bool generate_clear_;
 
  public:
   Params(const string & base_name) :
@@ -79,7 +80,8 @@
     generate_equals_(false),
     ignore_services_(false),
     parcelable_messages_(false),
-    reftypes_primitive_enums_(false) {
+    reftypes_primitive_enums_(false),
+    generate_clear_(true) {
   }
 
   const string& base_name() const {
@@ -222,6 +224,13 @@
   bool reftypes_primitive_enums() const {
     return reftypes_primitive_enums_;
   }
+
+  void set_generate_clear(bool value) {
+    generate_clear_ = value;
+  }
+  bool generate_clear() const {
+    return generate_clear_;
+  }
 };
 
 }  // namespace javanano