diff options
author | Max Cai <maxtroy@google.com> | 2013-09-24 17:40:37 +0100 |
---|---|---|
committer | Max Cai <maxtroy@google.com> | 2013-09-25 19:44:27 +0100 |
commit | 26266cd4660ffe1f3d6015b715713ee654c5b936 (patch) | |
tree | 71d26d35515a268e6c81850d1dc33b7d7113886c /java | |
parent | e74fe623e115237968a3de1143d7cdb4df710858 (diff) | |
download | external_protobuf-26266cd4660ffe1f3d6015b715713ee654c5b936.zip external_protobuf-26266cd4660ffe1f3d6015b715713ee654c5b936.tar.gz external_protobuf-26266cd4660ffe1f3d6015b715713ee654c5b936.tar.bz2 |
Implement enum_style=java option.
This javanano_out command line option creates a container interface
at the normal place where the enum constants would reside, per enum
definition. The java_multiple_files flag would now affect the file-
scope enums with the shells. If the flag is true then file-scope
container interfaces are created in their own files.
Change-Id: Id52258fcff8d3dee9db8f3d8022147a811bf3565
Diffstat (limited to 'java')
-rw-r--r-- | java/README.txt | 17 | ||||
-rw-r--r-- | java/pom.xml | 8 | ||||
-rw-r--r-- | java/src/test/java/com/google/protobuf/NanoTest.java | 13 |
3 files changed, 34 insertions, 4 deletions
diff --git a/java/README.txt b/java/README.txt index 9728f48..e2e698e 100644 --- a/java/README.txt +++ b/java/README.txt @@ -93,8 +93,9 @@ Micro version The runtime and generated code for MICRO_RUNTIME is smaller because it does not include support for the descriptor and reflection, and enums are generated as integer constants in -the parent message or the file's outer class. Also, not -currently supported are packed repeated elements or +the parent message or the file's outer class, with no +protection against invalid values set to enum fields. Also, +not currently supported are packed repeated elements or extensions. To create a jar file for the runtime and run tests invoke @@ -409,12 +410,20 @@ Nano version ============================ Nano is even smaller than micro, especially in the number of generated -functions. It is like micro except: +functions. It is like micro: + +- No support for descriptors and reflection; +- Enum constants are integers with no protection against invalid + values set to enum fields. + +Except: - Setter/getter/hazzer/clearer functions are opt-in. - If not opted in, has state is not available. Serialization outputs - all fields not equal to their default. (See important implications + all fields not equal to their default. (See important implications below.) +- Enum constants can be generated into container interfaces bearing + the enum's name (so the referencing code is in Java style). - CodedInputStreamMicro is renamed to CodedInputByteBufferNano and can only take byte[] (not InputStream). - Similar rename from CodedOutputStreamMicro to diff --git a/java/pom.xml b/java/pom.xml index f36d65f..a34c164 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -144,6 +144,7 @@ <arg value="../src/google/protobuf/unittest_single_nano.proto" /> <arg value="../src/google/protobuf/unittest_multiple_nano.proto" /> <arg value="../src/google/protobuf/unittest_multiple_nameclash_nano.proto" /> + <arg value="../src/google/protobuf/unittest_enum_class_nano.proto" /> </exec> <exec executable="../src/protoc"> <arg value="--javanano_out=store_unknown_fields=true:target/generated-test-sources" /> @@ -163,6 +164,13 @@ <arg value="--proto_path=src/test/java" /> <arg value="../src/google/protobuf/unittest_accessors_nano.proto" /> </exec> + <exec executable="../src/protoc"> + <arg value="--javanano_out=enum_style=java:target/generated-test-sources" /> + <arg value="--proto_path=../src" /> + <arg value="--proto_path=src/test/java" /> + <arg value="../src/google/protobuf/unittest_enum_class_nano.proto" /> + <arg value="../src/google/protobuf/unittest_enum_class_multiple_nano.proto" /> + </exec> </tasks> <testSourceRoot>target/generated-test-sources</testSourceRoot> <!--testSourceRoot>target/generated-test-sources/opt-space</testSourceRoot--> diff --git a/java/src/test/java/com/google/protobuf/NanoTest.java b/java/src/test/java/com/google/protobuf/NanoTest.java index fb6cccb..8483619 100644 --- a/java/src/test/java/com/google/protobuf/NanoTest.java +++ b/java/src/test/java/com/google/protobuf/NanoTest.java @@ -31,8 +31,11 @@ package com.google.protobuf; import com.google.protobuf.nano.CodedInputByteBufferNano; +import com.google.protobuf.nano.EnumClassNanoMultiple; +import com.google.protobuf.nano.EnumClassNanos; import com.google.protobuf.nano.Extensions; import com.google.protobuf.nano.Extensions.AnotherMessage; +import com.google.protobuf.nano.FileScopeEnumMultiple; import com.google.protobuf.nano.FileScopeEnumRefNano; import com.google.protobuf.nano.InternalNano; import com.google.protobuf.nano.MessageNano; @@ -2391,6 +2394,16 @@ public class NanoTest extends TestCase { assertEquals(0, newMsg.id); } + public void testNanoJavaEnumStyle() throws Exception { + EnumClassNanos.EnumClassNano msg = new EnumClassNanos.EnumClassNano(); + assertEquals(EnumClassNanos.FileScopeEnum.ONE, msg.one); + assertEquals(EnumClassNanos.EnumClassNano.MessageScopeEnum.TWO, msg.two); + + EnumClassNanoMultiple msg2 = new EnumClassNanoMultiple(); + assertEquals(FileScopeEnumMultiple.THREE, msg2.three); + assertEquals(EnumClassNanoMultiple.MessageScopeEnumMultiple.FOUR, msg2.four); + } + /** * Tests that fields with a default value of NaN are not serialized when * set to NaN. This is a special case as NaN != NaN, so normal equality |