Commit 517591b8 authored by Brian Duff's avatar Brian Duff Committed by Gerrit Code Review

Merge "Adds a primitive enum mode for reftypes."

parents 14e2f6cb a892068c
...@@ -59,6 +59,7 @@ void SetEnumVariables(const Params& params, ...@@ -59,6 +59,7 @@ void SetEnumVariables(const Params& params,
RenameJavaKeywords(UnderscoresToCapitalizedCamelCase(descriptor)); RenameJavaKeywords(UnderscoresToCapitalizedCamelCase(descriptor));
(*variables)["number"] = SimpleItoa(descriptor->number()); (*variables)["number"] = SimpleItoa(descriptor->number());
if (params.use_reference_types_for_primitives() if (params.use_reference_types_for_primitives()
&& !params.reftypes_primitive_enums()
&& !descriptor->is_repeated()) { && !descriptor->is_repeated()) {
(*variables)["type"] = "java.lang.Integer"; (*variables)["type"] = "java.lang.Integer";
(*variables)["default"] = "null"; (*variables)["default"] = "null";
...@@ -197,7 +198,8 @@ GenerateSerializedSizeCode(io::Printer* printer) const { ...@@ -197,7 +198,8 @@ GenerateSerializedSizeCode(io::Printer* printer) const {
} }
void EnumFieldGenerator::GenerateEqualsCode(io::Printer* printer) const { void EnumFieldGenerator::GenerateEqualsCode(io::Printer* printer) const {
if (params_.use_reference_types_for_primitives()) { if (params_.use_reference_types_for_primitives()
&& !params_.reftypes_primitive_enums()) {
printer->Print(variables_, printer->Print(variables_,
"if (this.$name$ == null) {\n" "if (this.$name$ == null) {\n"
" if (other.$name$ != null) {\n" " if (other.$name$ != null) {\n"
...@@ -228,7 +230,8 @@ void EnumFieldGenerator::GenerateEqualsCode(io::Printer* printer) const { ...@@ -228,7 +230,8 @@ void EnumFieldGenerator::GenerateEqualsCode(io::Printer* printer) const {
void EnumFieldGenerator::GenerateHashCodeCode(io::Printer* printer) const { void EnumFieldGenerator::GenerateHashCodeCode(io::Printer* printer) const {
printer->Print( printer->Print(
"result = 31 * result + "); "result = 31 * result + ");
if (params_.use_reference_types_for_primitives()) { if (params_.use_reference_types_for_primitives()
&& !params_.reftypes_primitive_enums()) {
printer->Print(variables_, printer->Print(variables_,
"(this.$name$ == null ? 0 : this.$name$)"); "(this.$name$ == null ? 0 : this.$name$)");
} else { } else {
......
...@@ -139,7 +139,10 @@ bool JavaNanoGenerator::Generate(const FileDescriptor* file, ...@@ -139,7 +139,10 @@ bool JavaNanoGenerator::Generate(const FileDescriptor* file,
params.set_java_enum_style(option_value == "java"); params.set_java_enum_style(option_value == "java");
} else if (option_name == "optional_field_style") { } else if (option_name == "optional_field_style") {
params.set_optional_field_accessors(option_value == "accessors"); params.set_optional_field_accessors(option_value == "accessors");
params.set_use_reference_types_for_primitives(option_value == "reftypes"); params.set_use_reference_types_for_primitives(option_value == "reftypes"
|| option_value == "reftypes_primitive_enums");
params.set_reftypes_primitive_enums(
option_value == "reftypes_primitive_enums");
} else if (option_name == "generate_equals") { } else if (option_name == "generate_equals") {
params.set_generate_equals(option_value == "true"); params.set_generate_equals(option_value == "true");
} else if (option_name == "ignore_services") { } else if (option_name == "ignore_services") {
......
...@@ -392,6 +392,10 @@ string DefaultValue(const Params& params, const FieldDescriptor* field) { ...@@ -392,6 +392,10 @@ string DefaultValue(const Params& params, const FieldDescriptor* field) {
} }
if (params.use_reference_types_for_primitives()) { if (params.use_reference_types_for_primitives()) {
if (params.reftypes_primitive_enums()
&& field->cpp_type() == FieldDescriptor::CPPTYPE_ENUM) {
return "Integer.MIN_VALUE";
}
return "null"; return "null";
} }
......
...@@ -64,6 +64,7 @@ class Params { ...@@ -64,6 +64,7 @@ class Params {
bool generate_equals_; bool generate_equals_;
bool ignore_services_; bool ignore_services_;
bool parcelable_messages_; bool parcelable_messages_;
bool reftypes_primitive_enums_;
public: public:
Params(const string & base_name) : Params(const string & base_name) :
...@@ -77,7 +78,8 @@ class Params { ...@@ -77,7 +78,8 @@ class Params {
use_reference_types_for_primitives_(false), use_reference_types_for_primitives_(false),
generate_equals_(false), generate_equals_(false),
ignore_services_(false), ignore_services_(false),
parcelable_messages_(false) { parcelable_messages_(false),
reftypes_primitive_enums_(false) {
} }
const string& base_name() const { const string& base_name() const {
...@@ -213,6 +215,13 @@ class Params { ...@@ -213,6 +215,13 @@ class Params {
bool parcelable_messages() const { bool parcelable_messages() const {
return parcelable_messages_; return parcelable_messages_;
} }
void set_reftypes_primitive_enums(bool value) {
reftypes_primitive_enums_ = value;
}
bool reftypes_primitive_enums() const {
return reftypes_primitive_enums_;
}
}; };
} // namespace javanano } // namespace javanano
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment