Commit 14ae5639 authored by Max Cai's avatar Max Cai Committed by Android Git Automerger

am a8af729b: Merge "Allow whitespace in nano codegen options."

* commit 'a8af729b5ef822971f025a7e8ff197545986910d':
  Allow whitespace in nano codegen options.
parents d44a519d a793c09b
...@@ -374,6 +374,8 @@ LOCAL_SRC_FILES := \ ...@@ -374,6 +374,8 @@ LOCAL_SRC_FILES := \
LOCAL_PROTOC_FLAGS := --proto_path=$(LOCAL_PATH)/src LOCAL_PROTOC_FLAGS := --proto_path=$(LOCAL_PATH)/src
LOCAL_PROTO_JAVA_OUTPUT_PARAMS := java_package=$(LOCAL_PATH)/src/google/protobuf/unittest_import_nano.proto|com.google.protobuf.nano,java_outer_classname=$(LOCAL_PATH)/src/google/protobuf/unittest_import_nano.proto|UnittestImportNano LOCAL_PROTO_JAVA_OUTPUT_PARAMS := \
java_package = $(LOCAL_PATH)/src/google/protobuf/unittest_import_nano.proto|com.google.protobuf.nano, \
java_outer_classname = $(LOCAL_PATH)/src/google/protobuf/unittest_import_nano.proto|UnittestImportNano
include $(BUILD_STATIC_JAVA_LIBRARY) include $(BUILD_STATIC_JAVA_LIBRARY)
...@@ -580,9 +580,9 @@ To use nano protobufs within the Android repo: ...@@ -580,9 +580,9 @@ To use nano protobufs within the Android repo:
LOCAL_STATIC_JAVA_LIBRARIES variable, so you don't need to. LOCAL_STATIC_JAVA_LIBRARIES variable, so you don't need to.
- Set 'LOCAL_PROTO_JAVA_OUTPUT_PARAMS := ...' in your local .mk file - Set 'LOCAL_PROTO_JAVA_OUTPUT_PARAMS := ...' in your local .mk file
for any command-line options you need. Use commas to join multiple for any command-line options you need. Use commas to join multiple
options. Write all options on the same line; avoid backslash-newline options. In the nano flavor only, whitespace surrounding the option
or '+=', because they will introduce spaces in the middle of your names and values are ignored, so you can use backslash-newline or
options and the generator is not prepared to handle them. '+=' to structure your make files nicely.
- The options will be applied to *all* proto files in LOCAL_SRC_FILES - The options will be applied to *all* proto files in LOCAL_SRC_FILES
when you build a Java library or package. In case different options when you build a Java library or package. In case different options
are needed for different proto files, build separate Java libraries are needed for different proto files, build separate Java libraries
...@@ -603,10 +603,9 @@ To use nano protobufs outside of Android repo: ...@@ -603,10 +603,9 @@ To use nano protobufs outside of Android repo:
- Invoke with --javanano_out, e.g.: - Invoke with --javanano_out, e.g.:
./protoc '--javanano_out=\ ./protoc '--javanano_out=\
java_package=src/proto/simple-data.proto|my_package,\ java_package=src/proto/simple-data.proto|my_package,\
java_outer_classname=src/proto/simple-data.proto|OuterName:\ java_outer_classname=src/proto/simple-data.proto|OuterName\
.' src/proto/simple-data.proto :.' src/proto/simple-data.proto
Contributing to nano: Contributing to nano:
......
...@@ -46,6 +46,19 @@ namespace protobuf { ...@@ -46,6 +46,19 @@ namespace protobuf {
namespace compiler { namespace compiler {
namespace javanano { namespace javanano {
namespace {
string TrimString(const string& s) {
string::size_type start = s.find_first_not_of(" \n\r\t");
if (start == string::npos) {
return "";
}
string::size_type end = s.find_last_not_of(" \n\r\t") + 1;
return s.substr(start, end - start);
}
} // namespace
void UpdateParamsRecursively(Params& params, void UpdateParamsRecursively(Params& params,
const FileDescriptor* file) { const FileDescriptor* file) {
// Add any parameters for this file // Add any parameters for this file
...@@ -93,42 +106,44 @@ bool JavaNanoGenerator::Generate(const FileDescriptor* file, ...@@ -93,42 +106,44 @@ bool JavaNanoGenerator::Generate(const FileDescriptor* file,
// Replace any existing options with ones from command line // Replace any existing options with ones from command line
for (int i = 0; i < options.size(); i++) { for (int i = 0; i < options.size(); i++) {
if (options[i].first == "output_list_file") { string option_name = TrimString(options[i].first);
output_list_file = options[i].second; string option_value = TrimString(options[i].second);
} else if (options[i].first == "java_package") { if (option_name == "output_list_file") {
output_list_file = option_value;
} else if (option_name == "java_package") {
vector<string> parts; vector<string> parts;
SplitStringUsing(options[i].second, "|", &parts); SplitStringUsing(option_value, "|", &parts);
if (parts.size() != 2) { if (parts.size() != 2) {
*error = "Bad java_package, expecting filename|PackageName found '" *error = "Bad java_package, expecting filename|PackageName found '"
+ options[i].second + "'"; + option_value + "'";
return false; return false;
} }
params.set_java_package(parts[0], parts[1]); params.set_java_package(parts[0], parts[1]);
} else if (options[i].first == "java_outer_classname") { } else if (option_name == "java_outer_classname") {
vector<string> parts; vector<string> parts;
SplitStringUsing(options[i].second, "|", &parts); SplitStringUsing(option_value, "|", &parts);
if (parts.size() != 2) { if (parts.size() != 2) {
*error = "Bad java_outer_classname, " *error = "Bad java_outer_classname, "
"expecting filename|ClassName found '" "expecting filename|ClassName found '"
+ options[i].second + "'"; + option_value + "'";
return false; return false;
} }
params.set_java_outer_classname(parts[0], parts[1]); params.set_java_outer_classname(parts[0], parts[1]);
} else if (options[i].first == "store_unknown_fields") { } else if (option_name == "store_unknown_fields") {
params.set_store_unknown_fields(options[i].second == "true"); params.set_store_unknown_fields(option_value == "true");
} else if (options[i].first == "java_multiple_files") { } else if (option_name == "java_multiple_files") {
params.set_override_java_multiple_files(options[i].second == "true"); params.set_override_java_multiple_files(option_value == "true");
} else if (options[i].first == "java_nano_generate_has") { } else if (option_name == "java_nano_generate_has") {
params.set_generate_has(options[i].second == "true"); params.set_generate_has(option_value == "true");
} else if (options[i].first == "enum_style") { } else if (option_name == "enum_style") {
params.set_java_enum_style(options[i].second == "java"); params.set_java_enum_style(option_value == "java");
} else if (options[i].first == "optional_field_style") { } else if (option_name == "optional_field_style") {
params.set_optional_field_accessors(options[i].second == "accessors"); params.set_optional_field_accessors(option_value == "accessors");
params.set_use_reference_types_for_primitives(options[i].second == "reftypes"); params.set_use_reference_types_for_primitives(option_value == "reftypes");
} else if (options[i].first == "generate_equals") { } else if (option_name == "generate_equals") {
params.set_generate_equals(options[i].second == "true"); params.set_generate_equals(option_value == "true");
} else { } else {
*error = "Ignore unknown javanano generator option: " + options[i].first; *error = "Ignore unknown javanano generator option: " + option_name;
} }
} }
......
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