aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
authorMax Cai <maxtroy@google.com>2013-09-24 17:40:37 +0100
committerMax Cai <maxtroy@google.com>2013-09-25 19:44:27 +0100
commit26266cd4660ffe1f3d6015b715713ee654c5b936 (patch)
tree71d26d35515a268e6c81850d1dc33b7d7113886c /java
parente74fe623e115237968a3de1143d7cdb4df710858 (diff)
downloadexternal_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.txt17
-rw-r--r--java/pom.xml8
-rw-r--r--java/src/test/java/com/google/protobuf/NanoTest.java13
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