Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
P
protobuf
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
protobuf
Commits
4b7983cb
Commit
4b7983cb
authored
Sep 28, 2013
by
Ulas Kirazci
Committed by
Gerrit Code Review
Sep 28, 2013
Browse files
Options
Browse Files
Download
Plain Diff
Merge "Implement enum_style=java option."
parents
93429474
1479c7ab
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
186 additions
and
22 deletions
+186
-22
README.txt
java/README.txt
+12
-3
NanoTest.java
java/src/test/java/com/google/protobuf/NanoTest.java
+13
-0
javanano_enum.cc
src/google/protobuf/compiler/javanano/javanano_enum.cc
+28
-13
javanano_file.cc
src/google/protobuf/compiler/javanano/javanano_file.cc
+15
-0
javanano_helpers.cc
src/google/protobuf/compiler/javanano/javanano_helpers.cc
+22
-6
unittest_enum_class_multiple_nano.proto
src/google/protobuf/unittest_enum_class_multiple_nano.proto
+48
-0
unittest_enum_class_nano.proto
src/google/protobuf/unittest_enum_class_nano.proto
+48
-0
No files found.
java/README.txt
View file @
4b7983cb
...
@@ -93,8 +93,9 @@ Micro version
...
@@ -93,8 +93,9 @@ Micro version
The runtime and generated code for MICRO_RUNTIME is smaller
The runtime and generated code for MICRO_RUNTIME is smaller
because it does not include support for the descriptor and
because it does not include support for the descriptor and
reflection, and enums are generated as integer constants in
reflection, and enums are generated as integer constants in
the parent message or the file's outer class. Also, not
the parent message or the file's outer class, with no
currently supported are packed repeated elements or
protection against invalid values set to enum fields. Also,
not currently supported are packed repeated elements or
extensions.
extensions.
To create a jar file for the runtime and run tests invoke
To create a jar file for the runtime and run tests invoke
...
@@ -409,12 +410,20 @@ Nano version
...
@@ -409,12 +410,20 @@ Nano version
============================
============================
Nano is even smaller than micro, especially in the number of generated
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.
- Setter/getter/hazzer/clearer functions are opt-in.
- If not opted in, has state is not available. Serialization outputs
- 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.)
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
- CodedInputStreamMicro is renamed to CodedInputByteBufferNano and can
only take byte[] (not InputStream).
only take byte[] (not InputStream).
- Similar rename from CodedOutputStreamMicro to
- Similar rename from CodedOutputStreamMicro to
...
...
java/src/test/java/com/google/protobuf/NanoTest.java
View file @
4b7983cb
...
@@ -31,8 +31,11 @@
...
@@ -31,8 +31,11 @@
package
com
.
google
.
protobuf
;
package
com
.
google
.
protobuf
;
import
com.google.protobuf.nano.CodedInputByteBufferNano
;
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
;
import
com.google.protobuf.nano.Extensions.AnotherMessage
;
import
com.google.protobuf.nano.Extensions.AnotherMessage
;
import
com.google.protobuf.nano.FileScopeEnumMultiple
;
import
com.google.protobuf.nano.FileScopeEnumRefNano
;
import
com.google.protobuf.nano.FileScopeEnumRefNano
;
import
com.google.protobuf.nano.InternalNano
;
import
com.google.protobuf.nano.InternalNano
;
import
com.google.protobuf.nano.MessageNano
;
import
com.google.protobuf.nano.MessageNano
;
...
@@ -2391,6 +2394,16 @@ public class NanoTest extends TestCase {
...
@@ -2391,6 +2394,16 @@ public class NanoTest extends TestCase {
assertEquals
(
0
,
newMsg
.
id
);
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
* 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
* set to NaN. This is a special case as NaN != NaN, so normal equality
...
...
src/google/protobuf/compiler/javanano/javanano_enum.cc
View file @
4b7983cb
...
@@ -68,25 +68,40 @@ EnumGenerator::EnumGenerator(const EnumDescriptor* descriptor, const Params& par
...
@@ -68,25 +68,40 @@ EnumGenerator::EnumGenerator(const EnumDescriptor* descriptor, const Params& par
EnumGenerator
::~
EnumGenerator
()
{}
EnumGenerator
::~
EnumGenerator
()
{}
void
EnumGenerator
::
Generate
(
io
::
Printer
*
printer
)
{
void
EnumGenerator
::
Generate
(
io
::
Printer
*
printer
)
{
printer
->
Print
(
"// enum $classname$
\n
"
,
"classname"
,
descriptor_
->
name
());
printer
->
Print
(
for
(
int
i
=
0
;
i
<
canonical_values_
.
size
();
i
++
)
{
"// enum $classname$
\n
"
,
map
<
string
,
string
>
vars
;
"classname"
,
descriptor_
->
name
());
vars
[
"name"
]
=
RenameJavaKeywords
(
canonical_values_
[
i
]
->
name
());
vars
[
"canonical_value"
]
=
SimpleItoa
(
canonical_values_
[
i
]
->
number
());
// Start of container interface
printer
->
Print
(
vars
,
bool
use_shell_class
=
params_
.
java_enum_style
();
"public static final int $name$ = $canonical_value$;
\n
"
);
if
(
use_shell_class
)
{
printer
->
Print
(
"public interface $classname$ {
\n
"
,
"classname"
,
RenameJavaKeywords
(
descriptor_
->
name
()));
printer
->
Indent
();
}
}
// -----------------------------------------------------------------
// Canonical values
for
(
int
i
=
0
;
i
<
canonical_values_
.
size
();
i
++
)
{
printer
->
Print
(
"public static final int $name$ = $canonical_value$;
\n
"
,
"name"
,
RenameJavaKeywords
(
canonical_values_
[
i
]
->
name
()),
"canonical_value"
,
SimpleItoa
(
canonical_values_
[
i
]
->
number
()));
}
// Aliases
for
(
int
i
=
0
;
i
<
aliases_
.
size
();
i
++
)
{
for
(
int
i
=
0
;
i
<
aliases_
.
size
();
i
++
)
{
map
<
string
,
string
>
vars
;
printer
->
Print
(
vars
[
"name"
]
=
RenameJavaKeywords
(
aliases_
[
i
].
value
->
name
());
"public static final int $name$ = $canonical_name$;
\n
"
,
vars
[
"canonical_name"
]
=
aliases_
[
i
].
canonical_value
->
name
();
"name"
,
RenameJavaKeywords
(
aliases_
[
i
].
value
->
name
()),
printer
->
Print
(
vars
,
"canonical_name"
,
RenameJavaKeywords
(
aliases_
[
i
].
canonical_value
->
name
()));
"public static final int $name$ = $canonical_name$;
\n
"
);
}
}
// End of container interface
if
(
use_shell_class
)
{
printer
->
Outdent
();
printer
->
Print
(
"}
\n
"
);
}
printer
->
Print
(
"
\n
"
);
printer
->
Print
(
"
\n
"
);
}
}
...
...
src/google/protobuf/compiler/javanano/javanano_file.cc
View file @
4b7983cb
...
@@ -138,6 +138,13 @@ bool FileGenerator::Validate(string* error) {
...
@@ -138,6 +138,13 @@ bool FileGenerator::Validate(string* error) {
found_conflict
=
true
;
found_conflict
=
true
;
}
}
}
}
if
(
params_
.
java_enum_style
())
{
for
(
int
i
=
0
;
!
found_conflict
&&
i
<
file_
->
enum_type_count
();
i
++
)
{
if
(
file_
->
enum_type
(
i
)
->
name
()
==
classname_
)
{
found_conflict
=
true
;
}
}
}
if
(
found_conflict
)
{
if
(
found_conflict
)
{
error
->
assign
(
file_
->
name
());
error
->
assign
(
file_
->
name
());
error
->
append
(
error
->
append
(
...
@@ -237,6 +244,14 @@ void FileGenerator::GenerateSiblings(const string& package_dir,
...
@@ -237,6 +244,14 @@ void FileGenerator::GenerateSiblings(const string& package_dir,
file_
->
message_type
(
i
),
file_
->
message_type
(
i
),
output_directory
,
file_list
,
params_
);
output_directory
,
file_list
,
params_
);
}
}
if
(
params_
.
java_enum_style
())
{
for
(
int
i
=
0
;
i
<
file_
->
enum_type_count
();
i
++
)
{
GenerateSibling
<
EnumGenerator
>
(
package_dir
,
java_package_
,
file_
->
enum_type
(
i
),
output_directory
,
file_list
,
params_
);
}
}
}
}
}
}
...
...
src/google/protobuf/compiler/javanano/javanano_helpers.cc
View file @
4b7983cb
...
@@ -197,12 +197,23 @@ string FileJavaPackage(const Params& params, const FileDescriptor* file) {
...
@@ -197,12 +197,23 @@ string FileJavaPackage(const Params& params, const FileDescriptor* file) {
}
}
bool
IsOuterClassNeeded
(
const
Params
&
params
,
const
FileDescriptor
*
file
)
{
bool
IsOuterClassNeeded
(
const
Params
&
params
,
const
FileDescriptor
*
file
)
{
//
Enums and extensions need the outer class as the scope
.
//
If java_multiple_files is false, the outer class is always needed
.
if
(
file
->
enum_type_count
()
!=
0
||
file
->
extension_count
()
!=
0
)
{
if
(
!
params
.
java_multiple_files
(
file
->
name
())
)
{
return
true
;
return
true
;
}
}
// Messages need the outer class only if java_multiple_files is false.
return
!
params
.
java_multiple_files
(
file
->
name
());
// File-scope extensions need the outer class as the scope.
if
(
file
->
extension_count
()
!=
0
)
{
return
true
;
}
// If container interfaces are not generated, file-scope enums need the
// outer class as the scope.
if
(
file
->
enum_type_count
()
!=
0
&&
!
params
.
java_enum_style
())
{
return
true
;
}
return
false
;
}
}
string
ToJavaName
(
const
Params
&
params
,
const
string
&
name
,
bool
is_class
,
string
ToJavaName
(
const
Params
&
params
,
const
string
&
name
,
bool
is_class
,
...
@@ -228,9 +239,14 @@ string ClassName(const Params& params, const FileDescriptor* descriptor) {
...
@@ -228,9 +239,14 @@ string ClassName(const Params& params, const FileDescriptor* descriptor) {
}
}
string
ClassName
(
const
Params
&
params
,
const
EnumDescriptor
*
descriptor
)
{
string
ClassName
(
const
Params
&
params
,
const
EnumDescriptor
*
descriptor
)
{
// An enum's class name is the enclosing message's class name or the outer
// class name.
const
Descriptor
*
parent
=
descriptor
->
containing_type
();
const
Descriptor
*
parent
=
descriptor
->
containing_type
();
// When using Java enum style, an enum's class name contains the enum name.
// Use the standard ToJavaName translation.
if
(
params
.
java_enum_style
())
{
return
ToJavaName
(
params
,
descriptor
->
name
(),
true
,
parent
,
descriptor
->
file
());
}
// Otherwise the enum members are accessed from the enclosing class.
if
(
parent
!=
NULL
)
{
if
(
parent
!=
NULL
)
{
return
ClassName
(
params
,
parent
);
return
ClassName
(
params
,
parent
);
}
else
{
}
else
{
...
...
src/google/protobuf/unittest_enum_class_multiple_nano.proto
0 → 100644
View file @
4b7983cb
// Protocol Buffers - Google's data interchange format
// Copyright 2008 Google Inc. All rights reserved.
// http://code.google.com/p/protobuf/
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Author: maxtroy@google.com (Max Cai)
package
protobuf_unittest
;
option
java_package
=
"com.google.protobuf.nano"
;
option
java_multiple_files
=
true
;
enum
FileScopeEnumMultiple
{
THREE
=
3
;
}
message
EnumClassNanoMultiple
{
enum
MessageScopeEnumMultiple
{
FOUR
=
4
;
}
optional
FileScopeEnumMultiple
three
=
3
[
default
=
THREE
];
optional
MessageScopeEnumMultiple
four
=
4
[
default
=
FOUR
];
}
src/google/protobuf/unittest_enum_class_nano.proto
0 → 100644
View file @
4b7983cb
// Protocol Buffers - Google's data interchange format
// Copyright 2008 Google Inc. All rights reserved.
// http://code.google.com/p/protobuf/
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Author: maxtroy@google.com (Max Cai)
package
protobuf_unittest
;
option
java_package
=
"com.google.protobuf.nano"
;
option
java_outer_classname
=
"EnumClassNanos"
;
enum
FileScopeEnum
{
ONE
=
1
;
}
message
EnumClassNano
{
enum
MessageScopeEnum
{
TWO
=
2
;
}
optional
FileScopeEnum
one
=
1
[
default
=
ONE
];
optional
MessageScopeEnum
two
=
2
[
default
=
TWO
];
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment