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