am 33a6680a: Merge "Support generation of Parcelable nano messages."

* commit '33a6680ab98977cd5b9b7b03f4875b9265cfec3b':
  Support generation of Parcelable nano messages.
pull/91/head
Jeff Davidson 11 years ago committed by Android Git Automerger
commit 3eafa87ab8
  1. 61
      Android.mk
  2. 11
      java/README.txt
  3. 2
      src/google/protobuf/compiler/javanano/javanano_generator.cc
  4. 9
      src/google/protobuf/compiler/javanano/javanano_message.cc
  5. 11
      src/google/protobuf/compiler/javanano/javanano_params.h

@ -142,6 +142,7 @@ LOCAL_MODULE_TAGS := optional
LOCAL_SDK_VERSION := 8
LOCAL_SRC_FILES := $(call all-java-files-under, java/src/main/java/com/google/protobuf/nano)
LOCAL_SRC_FILES += $(call all-java-files-under, java/src/device/main/java/com/google/protobuf/nano)
include $(BUILD_STATIC_JAVA_LIBRARY)
@ -379,3 +380,63 @@ LOCAL_PROTO_JAVA_OUTPUT_PARAMS := \
java_outer_classname = $(LOCAL_PATH)/src/google/protobuf/unittest_import_nano.proto|UnittestImportNano
include $(BUILD_STATIC_JAVA_LIBRARY)
# To test Android-specific nanoproto features.
# =======================================================
include $(CLEAR_VARS)
# Parcelable messages
LOCAL_MODULE := android-nano-test-parcelable
LOCAL_MODULE_TAGS := tests
LOCAL_SDK_VERSION := current
LOCAL_PROTOC_OPTIMIZE_TYPE := nano
LOCAL_SRC_FILES := src/google/protobuf/unittest_simple_nano.proto
LOCAL_PROTOC_FLAGS := --proto_path=$(LOCAL_PATH)/src
LOCAL_PROTO_JAVA_OUTPUT_PARAMS := \
parcelable_messages = true
include $(BUILD_STATIC_JAVA_LIBRARY)
include $(CLEAR_VARS)
# Parcelable and extendable messages
LOCAL_MODULE := android-nano-test-parcelable-extendable
LOCAL_MODULE_TAGS := tests
LOCAL_SDK_VERSION := current
LOCAL_PROTOC_OPTIMIZE_TYPE := nano
LOCAL_SRC_FILES := src/google/protobuf/unittest_extension_nano.proto
LOCAL_PROTOC_FLAGS := --proto_path=$(LOCAL_PATH)/src
LOCAL_PROTO_JAVA_OUTPUT_PARAMS := \
parcelable_messages = true, \
store_unknown_fields = true
include $(BUILD_STATIC_JAVA_LIBRARY)
include $(CLEAR_VARS)
# Test APK
LOCAL_PACKAGE_NAME := NanoAndroidTest
LOCAL_SDK_VERSION := 8
LOCAL_MODULE_TAGS := tests
LOCAL_SRC_FILES := $(call all-java-files-under, java/src/device/test/java/com/google/protobuf/nano)
LOCAL_MANIFEST_FILE := java/src/device/test/AndroidManifest.xml
LOCAL_STATIC_JAVA_LIBRARIES := libprotobuf-java-2.3.0-nano \
android-nano-test-parcelable \
android-nano-test-parcelable-extendable
WITH_DEXPREOPT := false
include $(BUILD_PACKAGE)

@ -476,6 +476,7 @@ java_nano_generate_has -> true or false [DEPRECATED]
optional_field_style -> default or accessors
enum_style -> c or java
ignore_services -> true or false
parcelable_messages -> true or false
java_package:
java_outer_classname:
@ -588,6 +589,9 @@ ignore_services={true,false} (default: false)
it will generate a compilation error. If this flag is set to true,
services will be silently ignored, instead.
parcelable_messages={true,false} (default: false)
Android-specific option to generate Parcelable messages.
To use nano protobufs within the Android repo:
@ -638,8 +642,13 @@ Please run the following steps to test:
- cd ../../..
- . build/envsetup.sh
- lunch 1
- "make -j12 aprotoc libprotobuf-java-2.3.0-nano aprotoc-test-nano-params" and
- "make -j12 aprotoc libprotobuf-java-2.3.0-nano aprotoc-test-nano-params NanoAndroidTest" and
check for build errors.
- Plug in an Android device or start an emulator.
- adb install -r out/target/product/generic/data/app/NanoAndroidTest.apk
- Run:
"adb shell am instrument -w com.google.protobuf.nano.test/android.test.InstrumentationTestRunner"
and verify all tests pass.
- repo sync -c -j256
- "make -j12" and check for build errors

@ -144,6 +144,8 @@ bool JavaNanoGenerator::Generate(const FileDescriptor* file,
params.set_generate_equals(option_value == "true");
} else if (option_name == "ignore_services") {
params.set_ignore_services(option_value == "true");
} else if (option_name == "parcelable_messages") {
params.set_parcelable_messages(option_value == "true");
} else {
*error = "Ignore unknown javanano generator option: " + option_name;
}

@ -132,10 +132,17 @@ void MessageGenerator::Generate(io::Printer* printer) {
"public static final class $classname$ extends\n",
"classname", descriptor_->name());
}
if (params_.store_unknown_fields()) {
if (params_.store_unknown_fields() && params_.parcelable_messages()) {
printer->Print(
" com.google.protobuf.nano.android.ParcelableExtendableMessageNano<$classname$> {\n",
"classname", descriptor_->name());
} else if (params_.store_unknown_fields()) {
printer->Print(
" com.google.protobuf.nano.ExtendableMessageNano<$classname$> {\n",
"classname", descriptor_->name());
} else if (params_.parcelable_messages()) {
printer->Print(
" com.google.protobuf.nano.android.ParcelableMessageNano {\n");
} else {
printer->Print(
" com.google.protobuf.nano.MessageNano {\n");

@ -63,6 +63,7 @@ class Params {
bool use_reference_types_for_primitives_;
bool generate_equals_;
bool ignore_services_;
bool parcelable_messages_;
public:
Params(const string & base_name) :
@ -75,7 +76,8 @@ class Params {
optional_field_accessors_(false),
use_reference_types_for_primitives_(false),
generate_equals_(false),
ignore_services_(false) {
ignore_services_(false),
parcelable_messages_(false) {
}
const string& base_name() const {
@ -204,6 +206,13 @@ class Params {
bool ignore_services() const {
return ignore_services_;
}
void set_parcelable_messages(bool value) {
parcelable_messages_ = value;
}
bool parcelable_messages() const {
return parcelable_messages_;
}
};
} // namespace javanano

Loading…
Cancel
Save