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
581be246
Commit
581be246
authored
Feb 24, 2015
by
Jisi Liu
Browse files
Options
Browse Files
Download
Plain Diff
Merge alpha branch 'review/v3.0.0-alpha-2'
parents
7c43f170
e70329c6
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
898 additions
and
633 deletions
+898
-633
CHANGES.txt
CHANGES.txt
+65
-0
Makefile.am
Makefile.am
+41
-1
configure.ac
configure.ac
+2
-2
pom.xml
java/pom.xml
+2
-2
GeneratedMessage.java
java/src/main/java/com/google/protobuf/GeneratedMessage.java
+27
-23
GeneratedMessageTest.java
...c/test/java/com/google/protobuf/GeneratedMessageTest.java
+13
-1
MapTest.java
java/src/test/java/com/google/protobuf/MapTest.java
+105
-66
README.txt
javanano/README.txt
+12
-10
pom.xml
javanano/pom.xml
+2
-2
post_process_dist.sh
post_process_dist.sh
+1
-1
setup.py
python/setup.py
+1
-1
README.md
ruby/README.md
+45
-3
google-protobuf.gemspec
ruby/google-protobuf.gemspec
+1
-1
command_line_interface_unittest.cc
...ogle/protobuf/compiler/command_line_interface_unittest.cc
+6
-0
java_message_field.cc
src/google/protobuf/compiler/java/java_message_field.cc
+1
-0
generated_message_reflection.cc
src/google/protobuf/generated_message_reflection.cc
+6
-0
message.cc
src/google/protobuf/message.cc
+24
-0
singleton.h
src/google/protobuf/stubs/singleton.h
+5
-1
extract_includes.bat
vsprojects/extract_includes.bat
+4
-0
libprotoc.vcproj
vsprojects/libprotoc.vcproj
+535
-519
No files found.
CHANGES.txt
View file @
581be246
2015-02-22 version 3.0.0-alpha-2 (Ruby/JavaNano):
General
* Introduced two new language implementations (Ruby and JavaNano) to proto3.
* Various bug fixes since 3.0.0-alpha-1
Ruby:
We have added proto3 support for Ruby via a native C extension.
The Ruby extension itself is included in the ruby/ directory, and details on
building and installing the extension are in ruby/README.md. The extension
will also be published as a Ruby gem. Code generator support is included as
part of `protoc` with the `--ruby_out` flag.
The Ruby extension implements a user-friendly DSL to define message types
(also generated by the code generator from `.proto` files). Once a message
type is defined, the user may create instances of the message that behave in
ways idiomatic to Ruby. For example:
- Message fields are present as ordinary Ruby properties (getter method
`foo` and setter method `foo=`).
- Repeated field elements are stored in a container that acts like a native
Ruby array, and map elements are stored in a container that acts like a
native Ruby hashmap.
- The usual well-known methods, such as `#to_s`, `#dup`, and the like, are
present.
Unlike several existing third-party Ruby extensions for protobuf, this
extension is built on a "strongly-typed" philosophy: message fields and
array/map containers will throw exceptions eagerly when values of the
incorrect type are inserted.
See ruby/README.md for details.
JavaNano:
JavaNano is a special code generator and runtime library designed especially
for resource-restricted systems, like Android. It is very resource-friendly
in both the amount of code and the runtime overhead. Here is an an overview
of JavaNano features compared with the official Java protobuf:
- No descriptors or message builders.
- All messages are mutable; fields are public Java fields.
- For optional fields only, encapsulation behind setter/getter/hazzer/
clearer functions is opt-in, which provide proper 'has' state support.
- For proto2, if not opted in, has state (field presence) is not available.
Serialization outputs all fields not equal to their defaults.
The behavior is consistent with proto3 semantics.
- Required fields (proto2 only) are always serialized.
- Enum constants are integers; protection against invalid values only
when parsing from the wire.
- Enum constants can be generated into container interfaces bearing
the enum's name (so the referencing code is in Java style).
- CodedInputByteBufferNano can only take byte[] (not InputStream).
- Similarly CodedOutputByteBufferNano can only write to byte[].
- Repeated fields are in arrays, not ArrayList or Vector. Null array
elements are allowed and silently ignored.
- Full support for serializing/deserializing repeated packed fields.
- Support extensions (in proto2).
- Unset messages/groups are null, not an immutable empty default
instance.
- toByteArray(...) and mergeFrom(...) are now static functions of
MessageNano.
- The 'bytes' type translates to the Java type byte[].
See javanano/README.txt for details.
2014-12-01 version 3.0.0-alpha-1 (C++/Java):
General
...
...
Makefile.am
View file @
581be246
...
...
@@ -154,6 +154,46 @@ java_EXTRA_DIST= \
java/pom.xml
\
java/README.txt
javanano_EXTRA_DIST
=
\
javanano/src/main/java/com/google/protobuf/nano/CodedOutputByteBufferNano.java
\
javanano/src/main/java/com/google/protobuf/nano/FieldData.java
\
javanano/src/main/java/com/google/protobuf/nano/FieldArray.java
\
javanano/src/main/java/com/google/protobuf/nano/WireFormatNano.java
\
javanano/src/main/java/com/google/protobuf/nano/Extension.java
\
javanano/src/main/java/com/google/protobuf/nano/CodedInputByteBufferNano.java
\
javanano/src/main/java/com/google/protobuf/nano/UnknownFieldData.java
\
javanano/src/main/java/com/google/protobuf/nano/MessageNano.java
\
javanano/src/main/java/com/google/protobuf/nano/InternalNano.java
\
javanano/src/main/java/com/google/protobuf/nano/InvalidProtocolBufferNanoException.java
\
javanano/src/main/java/com/google/protobuf/nano/MapFactories.java
\
javanano/src/main/java/com/google/protobuf/nano/ExtendableMessageNano.java
\
javanano/src/main/java/com/google/protobuf/nano/MessageNanoPrinter.java
\
javanano/src/test/java/com/google/protobuf/nano/unittest_accessors_nano.proto
\
javanano/src/test/java/com/google/protobuf/nano/unittest_enum_class_nano.proto
\
javanano/src/test/java/com/google/protobuf/nano/unittest_reference_types_nano.proto
\
javanano/src/test/java/com/google/protobuf/nano/unittest_extension_repeated_nano.proto
\
javanano/src/test/java/com/google/protobuf/nano/unittest_has_nano.proto
\
javanano/src/test/java/com/google/protobuf/nano/unittest_nano.proto
\
javanano/src/test/java/com/google/protobuf/nano/unittest_multiple_nameclash_nano.proto
\
javanano/src/test/java/com/google/protobuf/nano/unittest_single_nano.proto
\
javanano/src/test/java/com/google/protobuf/nano/NanoTest.java
\
javanano/src/test/java/com/google/protobuf/nano/unittest_simple_nano.proto
\
javanano/src/test/java/com/google/protobuf/nano/unittest_import_nano.proto
\
javanano/src/test/java/com/google/protobuf/nano/unittest_repeated_merge_nano.proto
\
javanano/src/test/java/com/google/protobuf/nano/unittest_extension_nano.proto
\
javanano/src/test/java/com/google/protobuf/nano/unittest_repeated_packables_nano.proto
\
javanano/src/test/java/com/google/protobuf/nano/unittest_extension_singular_nano.proto
\
javanano/src/test/java/com/google/protobuf/nano/unittest_recursive_nano.proto
\
javanano/src/test/java/com/google/protobuf/nano/unittest_extension_packed_nano.proto
\
javanano/src/test/java/com/google/protobuf/nano/unittest_enum_validity_nano.proto
\
javanano/src/test/java/com/google/protobuf/nano/unittest_stringutf8_nano.proto
\
javanano/src/test/java/com/google/protobuf/nano/unittest_multiple_nano.proto
\
javanano/src/test/java/com/google/protobuf/nano/unittest_enum_class_multiple_nano.proto
\
javanano/src/test/java/com/google/protobuf/nano/map_test.proto
\
javanano/README.txt
\
javanano/pom.xml
python_EXTRA_DIST
=
\
python/google/protobuf/internal/api_implementation.cc
\
python/google/protobuf/internal/api_implementation.py
\
...
...
@@ -260,7 +300,7 @@ ruby_EXTRA_DIST= \
ruby/tests/generated_code.rb
\
ruby/tests/generated_code_test.rb
all_EXTRA_DIST
=
$(java_EXTRA_DIST)
$(python_EXTRA_DIST)
$(ruby_EXTRA_DIST)
all_EXTRA_DIST
=
$(java_EXTRA_DIST)
$(
javanano_EXTRA_DIST)
$(
python_EXTRA_DIST)
$(ruby_EXTRA_DIST)
EXTRA_DIST
=
$
(
@DIST_LANG@_EXTRA_DIST
)
\
autogen.sh
\
...
...
configure.ac
View file @
581be246
...
...
@@ -12,7 +12,7 @@ AC_PREREQ(2.59)
# In the SVN trunk, the version should always be the next anticipated release
# version with the "-pre" suffix. (We used to use "-SNAPSHOT" but this pushed
# the size of one file name in the dist tarfile over the 99-char limit.)
AC_INIT([Protocol Buffers],[3.0.0-
pre
],[protobuf@googlegroups.com],[protobuf])
AC_INIT([Protocol Buffers],[3.0.0-
alpha-2
],[protobuf@googlegroups.com],[protobuf])
AM_MAINTAINER_MODE([enable])
...
...
@@ -37,7 +37,7 @@ AS_IF([test "x${ac_cv_env_CXXFLAGS_set}" = "x"],
AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE([subdir-objects])
AM_INIT_AUTOMAKE([
1.9 tar-ustar
subdir-objects])
AC_ARG_WITH([zlib],
[AS_HELP_STRING([--with-zlib],
...
...
java/pom.xml
View file @
581be246
...
...
@@ -10,7 +10,7 @@
</parent>
<groupId>
com.google.protobuf
</groupId>
<artifactId>
protobuf-java
</artifactId>
<version>
3.0.0-
pre
</version>
<version>
3.0.0-
alpha-2
</version>
<packaging>
bundle
</packaging>
<name>
Protocol Buffer Java API
</name>
<description>
...
...
@@ -152,7 +152,7 @@
<instructions>
<Bundle-DocURL>
https://developers.google.com/protocol-buffers/
</Bundle-DocURL>
<Bundle-SymbolicName>
com.google.protobuf
</Bundle-SymbolicName>
<Export-Package>
com.google.protobuf;version=3.0.0-
pre
</Export-Package>
<Export-Package>
com.google.protobuf;version=3.0.0-
alpha-2
</Export-Package>
</instructions>
</configuration>
</plugin>
...
...
java/src/main/java/com/google/protobuf/GeneratedMessage.java
View file @
581be246
...
...
@@ -73,7 +73,7 @@ public abstract class GeneratedMessage extends AbstractMessage
/** For use by generated code only. */
protected
UnknownFieldSet
unknownFields
;
protected
GeneratedMessage
()
{
unknownFields
=
UnknownFieldSet
.
getDefaultInstance
();
}
...
...
@@ -549,12 +549,12 @@ public abstract class GeneratedMessage extends AbstractMessage
* Gets the map field with the given field number. This method should be
* overridden in the generated message class if the message contains map
* fields.
*
*
* Unlike other field types, reflection support for map fields can't be
* implemented based on generated public API because we need to access a
* map field as a list in reflection API but the generated API only allows
* us to access it as a map. This method returns the underlying map field
* directly and thus enables us to access the map field as a list.
* directly and thus enables us to access the map field as a list.
*/
@SuppressWarnings
({
"unused"
,
"rawtypes"
})
protected
MapField
internalGetMapField
(
int
fieldNumber
)
{
...
...
@@ -683,7 +683,7 @@ public abstract class GeneratedMessage extends AbstractMessage
public
final
<
Type
>
Type
getExtension
(
final
ExtensionLite
<
MessageType
,
Type
>
extensionLite
)
{
Extension
<
MessageType
,
Type
>
extension
=
checkNotLite
(
extensionLite
);
verifyExtensionContainingType
(
extension
);
FieldDescriptor
descriptor
=
extension
.
getDescriptor
();
final
Object
value
=
extensions
.
getField
(
descriptor
);
...
...
@@ -1313,7 +1313,7 @@ public abstract class GeneratedMessage extends AbstractMessage
implements
ExtensionDescriptorRetriever
{
private
volatile
FieldDescriptor
descriptor
;
protected
abstract
FieldDescriptor
loadDescriptor
();
public
FieldDescriptor
getDescriptor
()
{
if
(
descriptor
==
null
)
{
synchronized
(
this
)
{
...
...
@@ -1651,17 +1651,17 @@ public abstract class GeneratedMessage extends AbstractMessage
}
}
}
/**
* Gets the map field with the given field number. This method should be
* overridden in the generated message class if the message contains map
* fields.
*
*
* Unlike other field types, reflection support for map fields can't be
* implemented based on generated public API because we need to access a
* map field as a list in reflection API but the generated API only allows
* us to access it as a map. This method returns the underlying map field
* directly and thus enables us to access the map field as a list.
* directly and thus enables us to access the map field as a list.
*/
@SuppressWarnings
({
"rawtypes"
,
"unused"
})
protected
MapField
internalGetMapField
(
int
fieldNumber
)
{
...
...
@@ -1709,7 +1709,7 @@ public abstract class GeneratedMessage extends AbstractMessage
oneofs
=
new
OneofAccessor
[
descriptor
.
getOneofs
().
size
()];
initialized
=
false
;
}
private
boolean
isMapFieldEnabled
(
FieldDescriptor
field
)
{
boolean
result
=
true
;
return
result
;
...
...
@@ -1934,11 +1934,11 @@ public abstract class GeneratedMessage extends AbstractMessage
protected
final
FieldDescriptor
field
;
protected
final
boolean
isOneofField
;
protected
final
boolean
hasHasMethod
;
private
int
getOneofFieldNumber
(
final
GeneratedMessage
message
)
{
return
((
Internal
.
EnumLite
)
invokeOrDie
(
caseMethod
,
message
)).
getNumber
();
}
private
int
getOneofFieldNumber
(
final
GeneratedMessage
.
Builder
builder
)
{
return
((
Internal
.
EnumLite
)
invokeOrDie
(
caseMethodBuilder
,
builder
)).
getNumber
();
}
...
...
@@ -2130,15 +2130,15 @@ public abstract class GeneratedMessage extends AbstractMessage
private
final
FieldDescriptor
field
;
private
final
Message
mapEntryMessageDefaultInstance
;
private
MapField
<?,
?>
getMapField
(
GeneratedMessage
message
)
{
return
(
MapField
<?,
?>)
message
.
internalGetMapField
(
field
.
getNumber
());
}
private
MapField
<?,
?>
getMapField
(
GeneratedMessage
.
Builder
builder
)
{
return
(
MapField
<?,
?>)
builder
.
internalGetMapField
(
field
.
getNumber
());
}
public
Object
get
(
GeneratedMessage
message
)
{
List
result
=
new
ArrayList
();
for
(
int
i
=
0
;
i
<
getRepeatedCount
(
message
);
i
++)
{
...
...
@@ -2171,10 +2171,12 @@ public abstract class GeneratedMessage extends AbstractMessage
}
public
void
setRepeated
(
Builder
builder
,
int
index
,
Object
value
)
{
builder
.
onChanged
();
getMapField
(
builder
).
getMutableList
().
set
(
index
,
(
Message
)
value
);
}
public
void
addRepeated
(
Builder
builder
,
Object
value
)
{
builder
.
onChanged
();
getMapField
(
builder
).
getMutableList
().
add
((
Message
)
value
);
}
...
...
@@ -2197,6 +2199,7 @@ public abstract class GeneratedMessage extends AbstractMessage
}
public
void
clear
(
Builder
builder
)
{
builder
.
onChanged
();
getMapField
(
builder
).
getMutableList
().
clear
();
}
...
...
@@ -2208,7 +2211,7 @@ public abstract class GeneratedMessage extends AbstractMessage
throw
new
UnsupportedOperationException
(
"Nested builder not supported for map fields."
);
}
public
com
.
google
.
protobuf
.
Message
.
Builder
getRepeatedBuilder
(
Builder
builder
,
int
index
)
{
throw
new
UnsupportedOperationException
(
...
...
@@ -2226,7 +2229,7 @@ public abstract class GeneratedMessage extends AbstractMessage
final
Class
<?
extends
Builder
>
builderClass
,
final
String
containingOneofCamelCaseName
)
{
super
(
descriptor
,
camelCaseName
,
messageClass
,
builderClass
,
containingOneofCamelCaseName
);
enumDescriptor
=
descriptor
.
getEnumType
();
valueOfMethod
=
getMethodOrDie
(
type
,
"valueOf"
,
...
...
@@ -2244,12 +2247,12 @@ public abstract class GeneratedMessage extends AbstractMessage
getMethodOrDie
(
builderClass
,
"set"
+
camelCaseName
+
"Value"
,
int
.
class
);
}
}
private
EnumDescriptor
enumDescriptor
;
private
Method
valueOfMethod
;
private
Method
getValueDescriptorMethod
;
private
boolean
supportUnknownEnumValue
;
private
Method
getValueMethod
;
private
Method
getValueMethodBuilder
;
...
...
@@ -2291,7 +2294,7 @@ public abstract class GeneratedMessage extends AbstractMessage
final
Class
<?
extends
GeneratedMessage
>
messageClass
,
final
Class
<?
extends
Builder
>
builderClass
)
{
super
(
descriptor
,
camelCaseName
,
messageClass
,
builderClass
);
enumDescriptor
=
descriptor
.
getEnumType
();
valueOfMethod
=
getMethodOrDie
(
type
,
"valueOf"
,
...
...
@@ -2315,7 +2318,7 @@ public abstract class GeneratedMessage extends AbstractMessage
private
final
Method
valueOfMethod
;
private
final
Method
getValueDescriptorMethod
;
private
boolean
supportUnknownEnumValue
;
private
Method
getRepeatedValueMethod
;
private
Method
getRepeatedValueMethodBuilder
;
...
...
@@ -2395,7 +2398,8 @@ public abstract class GeneratedMessage extends AbstractMessage
final
Class
<?
extends
GeneratedMessage
>
messageClass
,
final
Class
<?
extends
Builder
>
builderClass
,
final
String
containingOneofCamelCaseName
)
{
super
(
descriptor
,
camelCaseName
,
messageClass
,
builderClass
,
containingOneofCamelCaseName
);
super
(
descriptor
,
camelCaseName
,
messageClass
,
builderClass
,
containingOneofCamelCaseName
);
newBuilderMethod
=
getMethodOrDie
(
type
,
"newBuilder"
);
getBuilderMethodBuilder
=
...
...
@@ -2492,7 +2496,7 @@ public abstract class GeneratedMessage extends AbstractMessage
protected
Object
writeReplace
()
throws
ObjectStreamException
{
return
new
GeneratedMessageLite
.
SerializedForm
(
this
);
}
/**
* Checks that the {@link Extension} is non-Lite and returns it as a
* {@link GeneratedExtension}.
...
...
@@ -2503,7 +2507,7 @@ public abstract class GeneratedMessage extends AbstractMessage
if
(
extension
.
isLite
())
{
throw
new
IllegalArgumentException
(
"Expected non-lite extension."
);
}
return
(
Extension
<
MessageType
,
T
>)
extension
;
}
}
java/src/test/java/com/google/protobuf/GeneratedMessageTest.java
View file @
581be246
...
...
@@ -56,9 +56,10 @@ import protobuf_unittest.UnittestProto;
import
protobuf_unittest.UnittestProto.ForeignEnum
;
import
protobuf_unittest.UnittestProto.ForeignMessage
;
import
protobuf_unittest.UnittestProto.ForeignMessageOrBuilder
;
import
protobuf_unittest.UnittestProto.NestedTestAllTypes
;
import
protobuf_unittest.UnittestProto.TestAllExtensions
;
import
protobuf_unittest.UnittestProto.TestAllTypes
;
import
protobuf_unittest.UnittestProto.TestAllTypes.NestedMessage
;
import
protobuf_unittest.UnittestProto.TestAllTypes
;
import
protobuf_unittest.UnittestProto.TestAllTypesOrBuilder
;
import
protobuf_unittest.UnittestProto.TestExtremeDefaultValues
;
import
protobuf_unittest.UnittestProto.TestOneof2
;
...
...
@@ -1510,6 +1511,17 @@ public class GeneratedMessageTest extends TestCase {
}
}
public
void
testOneofNestedBuilderOnChangePropagation
()
{
NestedTestAllTypes
.
Builder
parentBuilder
=
NestedTestAllTypes
.
newBuilder
();
TestAllTypes
.
Builder
builder
=
parentBuilder
.
getPayloadBuilder
();
builder
.
getOneofNestedMessageBuilder
();
assertTrue
(
builder
.
hasOneofNestedMessage
());
assertTrue
(
parentBuilder
.
hasPayload
());
NestedTestAllTypes
message
=
parentBuilder
.
build
();
assertTrue
(
message
.
hasPayload
());
assertTrue
(
message
.
getPayload
().
hasOneofNestedMessage
());
}
public
void
testGetRepeatedFieldBuilder
()
{
Descriptor
descriptor
=
TestAllTypes
.
getDescriptor
();
...
...
java/src/test/java/com/google/protobuf/MapTest.java
View file @
581be246
...
...
@@ -57,22 +57,22 @@ public class MapTest extends TestCase {
builder
.
getMutableInt32ToStringField
().
put
(
1
,
"11"
);
builder
.
getMutableInt32ToStringField
().
put
(
2
,
"22"
);
builder
.
getMutableInt32ToStringField
().
put
(
3
,
"33"
);
builder
.
getMutableInt32ToBytesField
().
put
(
1
,
TestUtil
.
toBytes
(
"11"
));
builder
.
getMutableInt32ToBytesField
().
put
(
2
,
TestUtil
.
toBytes
(
"22"
));
builder
.
getMutableInt32ToBytesField
().
put
(
3
,
TestUtil
.
toBytes
(
"33"
));
builder
.
getMutableInt32ToEnumField
().
put
(
1
,
TestMap
.
EnumValue
.
FOO
);
builder
.
getMutableInt32ToEnumField
().
put
(
2
,
TestMap
.
EnumValue
.
BAR
);
builder
.
getMutableInt32ToEnumField
().
put
(
3
,
TestMap
.
EnumValue
.
BAZ
);
builder
.
getMutableInt32ToMessageField
().
put
(
1
,
MessageValue
.
newBuilder
().
setValue
(
11
).
build
());
builder
.
getMutableInt32ToMessageField
().
put
(
2
,
MessageValue
.
newBuilder
().
setValue
(
22
).
build
());
builder
.
getMutableInt32ToMessageField
().
put
(
3
,
MessageValue
.
newBuilder
().
setValue
(
33
).
build
());
builder
.
getMutableStringToInt32Field
().
put
(
"1"
,
11
);
builder
.
getMutableStringToInt32Field
().
put
(
"2"
,
22
);
builder
.
getMutableStringToInt32Field
().
put
(
"3"
,
33
);
...
...
@@ -88,22 +88,22 @@ public class MapTest extends TestCase {
assertEquals
(
"11"
,
message
.
getInt32ToStringField
().
get
(
1
));
assertEquals
(
"22"
,
message
.
getInt32ToStringField
().
get
(
2
));
assertEquals
(
"33"
,
message
.
getInt32ToStringField
().
get
(
3
));
assertEquals
(
3
,
message
.
getInt32ToBytesField
().
size
());
assertEquals
(
TestUtil
.
toBytes
(
"11"
),
message
.
getInt32ToBytesField
().
get
(
1
));
assertEquals
(
TestUtil
.
toBytes
(
"22"
),
message
.
getInt32ToBytesField
().
get
(
2
));
assertEquals
(
TestUtil
.
toBytes
(
"33"
),
message
.
getInt32ToBytesField
().
get
(
3
));
assertEquals
(
3
,
message
.
getInt32ToEnumField
().
size
());
assertEquals
(
TestMap
.
EnumValue
.
FOO
,
message
.
getInt32ToEnumField
().
get
(
1
));
assertEquals
(
TestMap
.
EnumValue
.
BAR
,
message
.
getInt32ToEnumField
().
get
(
2
));
assertEquals
(
TestMap
.
EnumValue
.
BAZ
,
message
.
getInt32ToEnumField
().
get
(
3
));
assertEquals
(
3
,
message
.
getInt32ToMessageField
().
size
());
assertEquals
(
11
,
message
.
getInt32ToMessageField
().
get
(
1
).
getValue
());
assertEquals
(
22
,
message
.
getInt32ToMessageField
().
get
(
2
).
getValue
());
assertEquals
(
33
,
message
.
getInt32ToMessageField
().
get
(
3
).
getValue
());
assertEquals
(
3
,
message
.
getStringToInt32Field
().
size
());
assertEquals
(
11
,
message
.
getStringToInt32Field
().
get
(
"1"
).
intValue
());
assertEquals
(
22
,
message
.
getStringToInt32Field
().
get
(
"2"
).
intValue
());
...
...
@@ -118,21 +118,21 @@ public class MapTest extends TestCase {
builder
.
getMutableInt32ToStringField
().
put
(
1
,
"111"
);
builder
.
getMutableInt32ToStringField
().
remove
(
2
);
builder
.
getMutableInt32ToStringField
().
put
(
4
,
"44"
);
builder
.
getMutableInt32ToBytesField
().
put
(
1
,
TestUtil
.
toBytes
(
"111"
));
builder
.
getMutableInt32ToBytesField
().
remove
(
2
);
builder
.
getMutableInt32ToBytesField
().
put
(
4
,
TestUtil
.
toBytes
(
"44"
));
builder
.
getMutableInt32ToEnumField
().
put
(
1
,
TestMap
.
EnumValue
.
BAR
);
builder
.
getMutableInt32ToEnumField
().
remove
(
2
);
builder
.
getMutableInt32ToEnumField
().
put
(
4
,
TestMap
.
EnumValue
.
QUX
);
builder
.
getMutableInt32ToMessageField
().
put
(
1
,
MessageValue
.
newBuilder
().
setValue
(
111
).
build
());
builder
.
getMutableInt32ToMessageField
().
remove
(
2
);
builder
.
getMutableInt32ToMessageField
().
put
(
4
,
MessageValue
.
newBuilder
().
setValue
(
44
).
build
());
builder
.
getMutableStringToInt32Field
().
put
(
"1"
,
111
);
builder
.
getMutableStringToInt32Field
().
remove
(
"2"
);
builder
.
getMutableStringToInt32Field
().
put
(
"4"
,
44
);
...
...
@@ -148,22 +148,22 @@ public class MapTest extends TestCase {
assertEquals
(
"111"
,
message
.
getInt32ToStringField
().
get
(
1
));
assertEquals
(
"33"
,
message
.
getInt32ToStringField
().
get
(
3
));
assertEquals
(
"44"
,
message
.
getInt32ToStringField
().
get
(
4
));
assertEquals
(
3
,
message
.
getInt32ToBytesField
().
size
());
assertEquals
(
TestUtil
.
toBytes
(
"111"
),
message
.
getInt32ToBytesField
().
get
(
1
));
assertEquals
(
TestUtil
.
toBytes
(
"33"
),
message
.
getInt32ToBytesField
().
get
(
3
));
assertEquals
(
TestUtil
.
toBytes
(
"44"
),
message
.
getInt32ToBytesField
().
get
(
4
));
assertEquals
(
3
,
message
.
getInt32ToEnumField
().
size
());
assertEquals
(
TestMap
.
EnumValue
.
BAR
,
message
.
getInt32ToEnumField
().
get
(
1
));
assertEquals
(
TestMap
.
EnumValue
.
BAZ
,
message
.
getInt32ToEnumField
().
get
(
3
));
assertEquals
(
TestMap
.
EnumValue
.
QUX
,
message
.
getInt32ToEnumField
().
get
(
4
));
assertEquals
(
3
,
message
.
getInt32ToMessageField
().
size
());
assertEquals
(
111
,
message
.
getInt32ToMessageField
().
get
(
1
).
getValue
());
assertEquals
(
33
,
message
.
getInt32ToMessageField
().
get
(
3
).
getValue
());
assertEquals
(
44
,
message
.
getInt32ToMessageField
().
get
(
4
).
getValue
());
assertEquals
(
3
,
message
.
getStringToInt32Field
().
size
());
assertEquals
(
111
,
message
.
getStringToInt32Field
().
get
(
"1"
).
intValue
());
assertEquals
(
33
,
message
.
getStringToInt32Field
().
get
(
"3"
).
intValue
());
...
...
@@ -183,17 +183,17 @@ public class MapTest extends TestCase {
TestMap
.
Builder
builder
=
TestMap
.
newBuilder
();
TestMap
message
=
builder
.
build
();
assertMapValuesCleared
(
message
);
builder
=
message
.
toBuilder
();
setMapValues
(
builder
);
message
=
builder
.
build
();
assertMapValuesSet
(
message
);
builder
=
message
.
toBuilder
();
updateMapValues
(
builder
);
message
=
builder
.
build
();
assertMapValuesUpdated
(
message
);
builder
=
message
.
toBuilder
();
builder
.
clear
();
message
=
builder
.
build
();
...
...
@@ -207,14 +207,14 @@ public class MapTest extends TestCase {
assertEquals
(
message
.
getSerializedSize
(),
message
.
toByteString
().
size
());
message
=
TestMap
.
PARSER
.
parseFrom
(
message
.
toByteString
());
assertMapValuesSet
(
message
);
builder
=
message
.
toBuilder
();
updateMapValues
(
builder
);
message
=
builder
.
build
();
assertEquals
(
message
.
getSerializedSize
(),
message
.
toByteString
().
size
());
message
=
TestMap
.
PARSER
.
parseFrom
(
message
.
toByteString
());
assertMapValuesUpdated
(
message
);
builder
=
message
.
toBuilder
();
builder
.
clear
();
message
=
builder
.
build
();
...
...
@@ -222,12 +222,12 @@ public class MapTest extends TestCase {
message
=
TestMap
.
PARSER
.
parseFrom
(
message
.
toByteString
());
assertMapValuesCleared
(
message
);
}
public
void
testMergeFrom
()
throws
Exception
{
TestMap
.
Builder
builder
=
TestMap
.
newBuilder
();
setMapValues
(
builder
);
TestMap
message
=
builder
.
build
();
TestMap
.
Builder
other
=
TestMap
.
newBuilder
();
other
.
mergeFrom
(
message
);
assertMapValuesSet
(
other
.
build
());
...
...
@@ -236,7 +236,7 @@ public class MapTest extends TestCase {
public
void
testEqualsAndHashCode
()
throws
Exception
{
// Test that generated equals() and hashCode() will disregard the order
// of map entries when comparing/hashing map fields.
// We can't control the order of elements in a HashMap. The best we can do
// here is to add elements in different order.
TestMap
.
Builder
b1
=
TestMap
.
newBuilder
();
...
...
@@ -244,23 +244,23 @@ public class MapTest extends TestCase {
b1
.
getMutableInt32ToInt32Field
().
put
(
3
,
4
);
b1
.
getMutableInt32ToInt32Field
().
put
(
5
,
6
);
TestMap
m1
=
b1
.
build
();
TestMap
.
Builder
b2
=
TestMap
.
newBuilder
();
b2
.
getMutableInt32ToInt32Field
().
put
(
5
,
6
);
b2
.
getMutableInt32ToInt32Field
().
put
(
1
,
2
);
b2
.
getMutableInt32ToInt32Field
().
put
(
3
,
4
);
TestMap
m2
=
b2
.
build
();
assertEquals
(
m1
,
m2
);
assertEquals
(
m1
.
hashCode
(),
m2
.
hashCode
());
// Make sure we did compare map fields.
b2
.
getMutableInt32ToInt32Field
().
put
(
1
,
0
);
m2
=
b2
.
build
();
assertFalse
(
m1
.
equals
(
m2
));
// Don't check m1.hashCode() != m2.hashCode() because it's not guaranteed
// to be different.
// Regression test for b/18549190: if a map is a subset of the other map,
// equals() should return false.
b2
.
getMutableInt32ToInt32Field
().
remove
(
1
);
...
...
@@ -268,57 +268,96 @@ public class MapTest extends TestCase {
assertFalse
(
m1
.
equals
(
m2
));
assertFalse
(
m2
.
equals
(
m1
));
}
public
void
testNestedBuilderOnChangeEventPropagation
()
{
TestOnChangeEventPropagation
.
Builder
parent
=
TestOnChangeEventPropagation
.
newBuilder
();
parent
.
getOptionalMessageBuilder
().
getMutableInt32ToInt32Field
().
put
(
1
,
2
);
TestOnChangeEventPropagation
message
=
parent
.
build
();
assertEquals
(
2
,
message
.
getOptionalMessage
().
getInt32ToInt32Field
().
get
(
1
).
intValue
());
// Make a change using nested builder.
parent
.
getOptionalMessageBuilder
().
getMutableInt32ToInt32Field
().
put
(
1
,
3
);
// Should be able to observe the change.
message
=
parent
.
build
();
assertEquals
(
3
,
message
.
getOptionalMessage
().
getInt32ToInt32Field
().
get
(
1
).
intValue
());
// Make another change using mergeFrom()
TestMap
.
Builder
other
=
TestMap
.
newBuilder
();
other
.
getMutableInt32ToInt32Field
().
put
(
1
,
4
);
parent
.
getOptionalMessageBuilder
().
mergeFrom
(
other
.
build
());
// Should be able to observe the change.
message
=
parent
.
build
();
assertEquals
(
4
,
message
.
getOptionalMessage
().
getInt32ToInt32Field
().
get
(
1
).
intValue
());
// Make yet another change by clearing the nested builder.
parent
.
getOptionalMessageBuilder
().
clear
();
// Should be able to observe the change.
message
=
parent
.
build
();
assertEquals
(
0
,
message
.
getOptionalMessage
().
getInt32ToInt32Field
().
size
());
}
public
void
testNestedBuilderOnChangeEventPropagationReflection
()
{
FieldDescriptor
intMapField
=
f
(
"int32_to_int32_field"
);
// Create an outer message builder with nested builder.
TestOnChangeEventPropagation
.
Builder
parentBuilder
=
TestOnChangeEventPropagation
.
newBuilder
();
TestMap
.
Builder
testMapBuilder
=
parentBuilder
.
getOptionalMessageBuilder
();
// Create a map entry message.
TestMap
.
Builder
entryBuilder
=
TestMap
.
newBuilder
();
entryBuilder
.
getMutableInt32ToInt32Field
().
put
(
1
,
1
);
// Put the entry into the nested builder.
testMapBuilder
.
addRepeatedField
(
intMapField
,
entryBuilder
.
getRepeatedField
(
intMapField
,
0
));
// Should be able to observe the change.
TestOnChangeEventPropagation
message
=
parentBuilder
.
build
();
assertEquals
(
1
,
message
.
getOptionalMessage
().
getInt32ToInt32Field
().
size
());
// Change the entry value.
entryBuilder
.
getMutableInt32ToInt32Field
().
put
(
1
,
4
);
testMapBuilder
=
parentBuilder
.
getOptionalMessageBuilder
();
testMapBuilder
.
setRepeatedField
(
intMapField
,
0
,
entryBuilder
.
getRepeatedField
(
intMapField
,
0
));
// Should be able to observe the change.
message
=
parentBuilder
.
build
();
assertEquals
(
4
,
message
.
getOptionalMessage
().
getInt32ToInt32Field
().
get
(
1
).
intValue
());
// Clear the nested builder.
testMapBuilder
=
parentBuilder
.
getOptionalMessageBuilder
();
testMapBuilder
.
clearField
(
intMapField
);
// Should be able to observe the change.
message
=
parentBuilder
.
build
();
assertEquals
(
0
,
message
.
getOptionalMessage
().
getInt32ToInt32Field
().
size
());
}
// The following methods are used to test reflection API.
private
static
FieldDescriptor
f
(
String
name
)
{
return
TestMap
.
getDescriptor
().
findFieldByName
(
name
);
}
private
static
Object
getFieldValue
(
Message
mapEntry
,
String
name
)
{
FieldDescriptor
field
=
mapEntry
.
getDescriptorForType
().
findFieldByName
(
name
);
return
mapEntry
.
getField
(
field
);
}
private
static
Message
.
Builder
setFieldValue
(
Message
.
Builder
mapEntry
,
String
name
,
Object
value
)
{
FieldDescriptor
field
=
mapEntry
.
getDescriptorForType
().
findFieldByName
(
name
);
mapEntry
.
setField
(
field
,
value
);
return
mapEntry
;
}
private
static
void
assertHasMapValues
(
Message
message
,
String
name
,
Map
<?,
?>
values
)
{
FieldDescriptor
field
=
f
(
name
);
for
(
Object
entry
:
(
List
<?>)
message
.
getField
(
field
))
{
...
...
@@ -337,7 +376,7 @@ public class MapTest extends TestCase {
assertEquals
(
value
,
values
.
get
(
key
));
}
}
private
static
<
KeyType
,
ValueType
>
Message
newMapEntry
(
Message
.
Builder
builder
,
String
name
,
KeyType
key
,
ValueType
value
)
{
FieldDescriptor
field
=
builder
.
getDescriptorForType
().
findFieldByName
(
name
);
...
...
@@ -348,7 +387,7 @@ public class MapTest extends TestCase {
entryBuilder
.
setField
(
valueField
,
value
);
return
entryBuilder
.
build
();
}
private
static
void
setMapValues
(
Message
.
Builder
builder
,
String
name
,
Map
<?,
?>
values
)
{
List
<
Message
>
entryList
=
new
ArrayList
<
Message
>();
for
(
Map
.
Entry
<?,
?>
entry
:
values
.
entrySet
())
{
...
...
@@ -357,7 +396,7 @@ public class MapTest extends TestCase {
FieldDescriptor
field
=
builder
.
getDescriptorForType
().
findFieldByName
(
name
);
builder
.
setField
(
field
,
entryList
);
}
private
static
<
KeyType
,
ValueType
>
Map
<
KeyType
,
ValueType
>
mapForValues
(
KeyType
key1
,
ValueType
value1
,
KeyType
key2
,
ValueType
value2
)
{
...
...
@@ -385,14 +424,14 @@ public class MapTest extends TestCase {
mapForValues
(
11
,
MessageValue
.
newBuilder
().
setValue
(
22
).
build
(),
33
,
MessageValue
.
newBuilder
().
setValue
(
44
).
build
()));
// Test clearField()
builder
.
clearField
(
f
(
"int32_to_int32_field"
));
builder
.
clearField
(
f
(
"int32_to_message_field"
));
message
=
builder
.
build
();
assertEquals
(
0
,
message
.
getInt32ToInt32Field
().
size
());
assertEquals
(
0
,
message
.
getInt32ToMessageField
().
size
());
// Test setField()
setMapValues
(
builder
,
"int32_to_int32_field"
,
mapForValues
(
11
,
22
,
33
,
44
));
...
...
@@ -405,7 +444,7 @@ public class MapTest extends TestCase {
assertEquals
(
44
,
message
.
getInt32ToInt32Field
().
get
(
33
).
intValue
());
assertEquals
(
222
,
message
.
getInt32ToMessageField
().
get
(
111
).
getValue
());
assertEquals
(
444
,
message
.
getInt32ToMessageField
().
get
(
333
).
getValue
());
// Test addRepeatedField
builder
.
addRepeatedField
(
f
(
"int32_to_int32_field"
),
newMapEntry
(
builder
,
"int32_to_int32_field"
,
55
,
66
));
...
...
@@ -425,7 +464,7 @@ public class MapTest extends TestCase {
message
=
builder
.
build
();
assertEquals
(
55
,
message
.
getInt32ToInt32Field
().
get
(
55
).
intValue
());
assertEquals
(
555
,
message
.
getInt32ToMessageField
().
get
(
555
).
getValue
());
// Test setRepeatedField
for
(
int
i
=
0
;
i
<
builder
.
getRepeatedFieldCount
(
f
(
"int32_to_int32_field"
));
i
++)
{
Message
mapEntry
=
(
Message
)
builder
.
getRepeatedField
(
f
(
"int32_to_int32_field"
),
i
);
...
...
@@ -442,35 +481,35 @@ public class MapTest extends TestCase {
assertEquals
(
33
,
message
.
getInt32ToInt32Field
().
get
(
44
).
intValue
());
assertEquals
(
55
,
message
.
getInt32ToInt32Field
().
get
(
55
).
intValue
());
}
public
void
testTextFormat
()
throws
Exception
{
TestMap
.
Builder
builder
=
TestMap
.
newBuilder
();
setMapValues
(
builder
);
TestMap
message
=
builder
.
build
();
String
textData
=
TextFormat
.
printToString
(
message
);
builder
=
TestMap
.
newBuilder
();
TextFormat
.
merge
(
textData
,
builder
);
message
=
builder
.
build
();
assertMapValuesSet
(
message
);
}
public
void
testDynamicMessage
()
throws
Exception
{
TestMap
.
Builder
builder
=
TestMap
.
newBuilder
();
setMapValues
(
builder
);
TestMap
message
=
builder
.
build
();
Message
dynamicDefaultInstance
=
DynamicMessage
.
getDefaultInstance
(
TestMap
.
getDescriptor
());
Message
dynamicMessage
=
dynamicDefaultInstance
.
newBuilderForType
().
mergeFrom
(
message
.
toByteString
()).
build
();
assertEquals
(
message
,
dynamicMessage
);
assertEquals
(
message
.
hashCode
(),
dynamicMessage
.
hashCode
());
}
public
void
testReflectionEqualsAndHashCode
()
throws
Exception
{
// Test that generated equals() and hashCode() will disregard the order
// of map entries when comparing/hashing map fields.
...
...
@@ -479,22 +518,22 @@ public class MapTest extends TestCase {
Message
dynamicDefaultInstance
=
DynamicMessage
.
getDefaultInstance
(
TestMap
.
getDescriptor
());
FieldDescriptor
field
=
f
(
"int32_to_int32_field"
);
Message
.
Builder
b1
=
dynamicDefaultInstance
.
newBuilderForType
();
b1
.
addRepeatedField
(
field
,
newMapEntry
(
b1
,
"int32_to_int32_field"
,
1
,
2
));
b1
.
addRepeatedField
(
field
,
newMapEntry
(
b1
,
"int32_to_int32_field"
,
3
,
4
));
b1
.
addRepeatedField
(
field
,
newMapEntry
(
b1
,
"int32_to_int32_field"
,
5
,
6
));
Message
m1
=
b1
.
build
();
Message
.
Builder
b2
=
dynamicDefaultInstance
.
newBuilderForType
();
b2
.
addRepeatedField
(
field
,
newMapEntry
(
b2
,
"int32_to_int32_field"
,
5
,
6
));
b2
.
addRepeatedField
(
field
,
newMapEntry
(
b2
,
"int32_to_int32_field"
,
1
,
2
));
b2
.
addRepeatedField
(
field
,
newMapEntry
(
b2
,
"int32_to_int32_field"
,
3
,
4
));
Message
m2
=
b2
.
build
();
assertEquals
(
m1
,
m2
);
assertEquals
(
m1
.
hashCode
(),
m2
.
hashCode
());
// Make sure we did compare map fields.
b2
.
setRepeatedField
(
field
,
0
,
newMapEntry
(
b1
,
"int32_to_int32_field"
,
0
,
0
));
m2
=
b2
.
build
();
...
...
@@ -502,7 +541,7 @@ public class MapTest extends TestCase {
// Don't check m1.hashCode() != m2.hashCode() because it's not guaranteed
// to be different.
}
public
void
testUnknownEnumValues
()
throws
Exception
{
TestMap
.
Builder
builder
=
TestMap
.
newBuilder
();
builder
.
getMutableInt32ToEnumFieldValue
().
put
(
0
,
0
);
...
...
@@ -517,7 +556,7 @@ public class MapTest extends TestCase {
assertEquals
(
TestMap
.
EnumValue
.
UNRECOGNIZED
,
message
.
getInt32ToEnumField
().
get
(
2
));
assertEquals
(
1000
,
message
.
getInt32ToEnumFieldValue
().
get
(
2
).
intValue
());
// Unknown enum values should be preserved after:
// 1. Serialization and parsing.
// 2. toBuild().
...
...
@@ -528,7 +567,7 @@ public class MapTest extends TestCase {
assertEquals
(
1000
,
builder
.
getInt32ToEnumFieldValue
().
get
(
2
).
intValue
());
builder
=
TestMap
.
newBuilder
().
mergeFrom
(
message
);
assertEquals
(
1000
,
builder
.
getInt32ToEnumFieldValue
().
get
(
2
).
intValue
());
// hashCode()/equals() should take unknown enum values into account.
builder
.
getMutableInt32ToEnumFieldValue
().
put
(
2
,
1001
);
TestMap
message2
=
builder
.
build
();
...
...
@@ -538,17 +577,17 @@ public class MapTest extends TestCase {
// should be the same.
assertTrue
(
message
.
getInt32ToEnumField
().
equals
(
message2
.
getInt32ToEnumField
()));
}
public
void
testUnknownEnumValuesInReflectionApi
()
throws
Exception
{
Descriptor
descriptor
=
TestMap
.
getDescriptor
();
EnumDescriptor
enumDescriptor
=
TestMap
.
EnumValue
.
getDescriptor
();
FieldDescriptor
field
=
descriptor
.
findFieldByName
(
"int32_to_enum_field"
);
Map
<
Integer
,
Integer
>
data
=
new
HashMap
<
Integer
,
Integer
>();
data
.
put
(
0
,
0
);
data
.
put
(
1
,
1
);
data
.
put
(
2
,
1000
);
// unknown value.
TestMap
.
Builder
builder
=
TestMap
.
newBuilder
();
for
(
Map
.
Entry
<
Integer
,
Integer
>
entry
:
data
.
entrySet
())
{
builder
.
getMutableInt32ToEnumFieldValue
().
put
(
entry
.
getKey
(),
entry
.
getValue
());
...
...
javanano/README.txt
View file @
581be246
...
...
@@ -68,18 +68,20 @@ running unit tests.
Nano version
============================
Nano is a special code generator and runtime library designed specially
for Android, and is very resource-friendly in both the amount of code
and the runtime overhead. An overview of Nano features:
JavaNano is a special code generator and runtime library designed specially for
resource-restricted systems, like Android. It is very resource-friendly in both
the amount of code and the runtime overhead. Here is an overview of JavaNano
features compared with the official Java protobuf:
- No descriptors or message builders.
- All messages are mutable; fields are public Java fields.
- For optional fields only, encapsulation behind setter/getter/hazzer/
clearer functions is opt-in, which provide proper 'has' state support.
- If not opted in, has state is not available. Serialization outputs
all fields not equal to their defaults (see important implications
below).
- Required fields are always serialized.
- For proto2, if not opted in, has state (field presence) is not available.
Serialization outputs all fields not equal to their defaults
(see important implications below).
The behavior is consistent with proto3 semantics.
- Required fields (proto2 only) are always serialized.
- Enum constants are integers; protection against invalid values only
when parsing from the wire.
- Enum constants can be generated into container interfaces bearing
...
...
@@ -88,8 +90,8 @@ and the runtime overhead. An overview of Nano features:
- Similarly CodedOutputByteBufferNano can only write to byte[].
- Repeated fields are in arrays, not ArrayList or Vector. Null array
elements are allowed and silently ignored.
- Full support
of
serializing/deserializing repeated packed fields.
- Support
of extensions
.
- Full support
for
serializing/deserializing repeated packed fields.
- Support
extensions (in proto2)
.
- Unset messages/groups are null, not an immutable empty default
instance.
- toByteArray(...) and mergeFrom(...) are now static functions of
...
...
@@ -200,7 +202,7 @@ optional_field_style={default,accessors,reftypes} (default: default)
In the default style, optional fields translate into public mutable
Java fields, and the serialization process is as discussed in the
"IMPORTANT" section above.
"IMPORTANT" section above.
* accessors *
...
...
javanano/pom.xml
View file @
581be246
...
...
@@ -10,7 +10,7 @@
</parent>
<groupId>
com.google.protobuf.nano
</groupId>
<artifactId>
protobuf-javanano
</artifactId>
<version>
2.6.2-pre
</version>
<version>
3.0.0-alpha-2
</version>
<packaging>
bundle
</packaging>
<name>
Protocol Buffer JavaNano API
</name>
<description>
...
...
@@ -156,7 +156,7 @@
<instructions>
<Bundle-DocURL>
https://developers.google.com/protocol-buffers/
</Bundle-DocURL>
<Bundle-SymbolicName>
com.google.protobuf
</Bundle-SymbolicName>
<Export-Package>
com.google.protobuf;version=
2.6.2-pre
</Export-Package>
<Export-Package>
com.google.protobuf;version=
3.0.0-alpha-2
</Export-Package>
</instructions>
</configuration>
</plugin>
...
...
post_process_dist.sh
View file @
581be246
...
...
@@ -27,7 +27,7 @@ fi
set
-ex
LANGUAGES
=
"cpp java
python
"
LANGUAGES
=
"cpp java
javanano python ruby
"
BASENAME
=
`
basename
$1
.tar.gz
`
VERSION
=
${
BASENAME
:9
}
...
...
python/setup.py
View file @
581be246
...
...
@@ -163,7 +163,7 @@ if __name__ == '__main__':
))
setup
(
name
=
'protobuf'
,
version
=
'3.0.0-
pre
'
,
version
=
'3.0.0-
alpha-2
'
,
packages
=
[
'google'
],
namespace_packages
=
[
'google'
],
test_suite
=
'setup.MakeTestSuite'
,
...
...
ruby/README.md
View file @
581be246
...
...
@@ -7,8 +7,51 @@ we recommend using protoc's Ruby generation support with .proto files. The
build process in this directory only installs the extension; you need to
install protoc as well to have Ruby code generation functionality.
Installation
------------
Installation from Gem
---------------------
When we release a version of Protocol Buffers, we will upload a Gem to
[
RubyGems
](
https://www.rubygems.org/
)
. To use this pre-packaged gem, simply
install it as you would any other gem:
$ gem install [--prerelease] google-protobuf
The
`--pre`
flag is necessary if we have not yet made a non-alpha/beta release
of the Ruby extension; it allows
`gem`
to consider these "pre-release"
alpha/beta versions.
Once the gem is installed, you may or may not need
`protoc`
. If you write your
message type descriptions directly in the Ruby DSL, you do not need it.
However, if you wish to generate the Ruby DSL from a
`.proto`
file, you will
also want to install Protocol Buffers itself, as described in this repository's
main
`README`
file. The version of
`protoc`
included in the latest release
supports the
`--ruby_out`
option to generate Ruby code.
A simple example of using the Ruby extension follows. More extensive
documentation may be found in the RubyDoc comments (
`call-seq`
tags) in the
source, and we plan to release separate, more detailed, documentation at a
later date.
require 'google/protobuf'
# generated from my_proto_types.proto with protoc:
# $ protoc --ruby_out=. my_proto_types.proto
require 'my_proto_types'
mymessage = MyTestMessage.new(:field1 => 42, :field2 => ["a", "b", "c"])
mymessage.field1 = 43
mymessage.field2.push("d")
mymessage.field3 = SubMessage.new(:foo => 100)
encoded_data = MyTestMessage.encode(mymessage)
decoded = MyTestMessage.decode(encoded_data)
assert decoded == mymessage
puts "JSON:"
puts MyTestMessage.encode_json(mymessage)
Installation from Source (Building Gem)
---------------------------------------
To build this Ruby extension, you will need:
...
...
@@ -16,7 +59,6 @@ To build this Ruby extension, you will need:
*
Bundler
*
Ruby development headers
*
a C compiler
*
the upb submodule
First, install the required Ruby gems:
...
...
ruby/google-protobuf.gemspec
View file @
581be246
...
...
@@ -7,7 +7,7 @@ end
Gem
::
Specification
.
new
do
|
s
|
s
.
name
=
"google-protobuf"
s
.
version
=
"3.0.0.alpha.2"
s
.
version
=
"3.0.0.alpha.2
.0
"
s
.
licenses
=
[
"BSD"
]
s
.
summary
=
"Protocol Buffers"
s
.
description
=
"Protocol Buffers are Google's data interchange format."
...
...
src/google/protobuf/compiler/command_line_interface_unittest.cc
View file @
581be246
...
...
@@ -64,6 +64,10 @@
#include <gtest/gtest.h>
// Disable the whole test when we use tcmalloc for "draconian" heap checks, in
// which case tcmalloc will print warnings that fail the plugin tests.
#if !GOOGLE_PROTOBUF_HEAP_CHECK_DRACONIAN
namespace
google
{
namespace
protobuf
{
namespace
compiler
{
...
...
@@ -1663,3 +1667,5 @@ TEST_F(EncodeDecodeTest, ProtoParseError) {
}
// namespace compiler
}
// namespace protobuf
}
// namespace google
#endif // !GOOGLE_PROTOBUF_HEAP_CHECK_DRACONIAN
src/google/protobuf/compiler/java/java_message_field.cc
View file @
581be246
...
...
@@ -718,6 +718,7 @@ GenerateBuilderMembers(io::Printer* printer) const {
" $oneof_name$_ = null;
\n
"
" }
\n
"
" $set_oneof_case_message$;
\n
"
" $on_changed$;
\n
"
" return $name$Builder_;
\n
"
"}
\n
"
);
}
...
...
src/google/protobuf/generated_message_reflection.cc
View file @
581be246
...
...
@@ -247,8 +247,14 @@ namespace {
UnknownFieldSet
*
empty_unknown_field_set_
=
NULL
;
GOOGLE_PROTOBUF_DECLARE_ONCE
(
empty_unknown_field_set_once_
);
void
DeleteEmptyUnknownFieldSet
()
{
delete
empty_unknown_field_set_
;
empty_unknown_field_set_
=
NULL
;
}
void
InitEmptyUnknownFieldSet
()
{
empty_unknown_field_set_
=
new
UnknownFieldSet
;
internal
::
OnShutdown
(
&
DeleteEmptyUnknownFieldSet
);
}
const
UnknownFieldSet
&
GetEmptyUnknownFieldSet
()
{
...
...
src/google/protobuf/message.cc
View file @
581be246
...
...
@@ -440,6 +440,30 @@ const internal::RepeatedFieldAccessor* Reflection::RepeatedFieldAccessor(
return
NULL
;
}
namespace
internal
{
namespace
{
void
ShutdownRepeatedFieldAccessor
()
{
Singleton
<
internal
::
RepeatedFieldPrimitiveAccessor
<
int32
>
>::
ShutDown
();
Singleton
<
internal
::
RepeatedFieldPrimitiveAccessor
<
uint32
>
>::
ShutDown
();
Singleton
<
internal
::
RepeatedFieldPrimitiveAccessor
<
int64
>
>::
ShutDown
();
Singleton
<
internal
::
RepeatedFieldPrimitiveAccessor
<
uint64
>
>::
ShutDown
();
Singleton
<
internal
::
RepeatedFieldPrimitiveAccessor
<
float
>
>::
ShutDown
();
Singleton
<
internal
::
RepeatedFieldPrimitiveAccessor
<
double
>
>::
ShutDown
();
Singleton
<
internal
::
RepeatedFieldPrimitiveAccessor
<
bool
>
>::
ShutDown
();
Singleton
<
internal
::
RepeatedPtrFieldStringAccessor
>::
ShutDown
();
Singleton
<
internal
::
RepeatedPtrFieldMessageAccessor
>::
ShutDown
();
Singleton
<
internal
::
MapFieldAccessor
>::
ShutDown
();
};
struct
ShutdownRepeatedFieldRegister
{
ShutdownRepeatedFieldRegister
()
{
OnShutdown
(
&
ShutdownRepeatedFieldAccessor
);
}
}
shutdown_
;
}
// namesapce
}
// namespace internal
namespace
internal
{
// Macro defined in repeated_field.h. We can only define the Message-specific
// GenericTypeHandler specializations here because we depend on Message, which
...
...
src/google/protobuf/stubs/singleton.h
View file @
581be246
...
...
@@ -44,6 +44,10 @@ class Singleton {
GoogleOnceInit
(
&
once_
,
&
Singleton
<
T
>::
Init
);
return
instance_
;
}
static
void
ShutDown
()
{
delete
instance_
;
instance_
=
NULL
;
}
private
:
static
void
Init
()
{
instance_
=
new
T
();
...
...
@@ -56,7 +60,7 @@ template<typename T>
ProtobufOnceType
Singleton
<
T
>::
once_
;
template
<
typename
T
>
T
*
Singleton
<
T
>::
instance_
;
T
*
Singleton
<
T
>::
instance_
=
NULL
;
}
// namespace internal
}
// namespace protobuf
}
// namespace google
...
...
vsprojects/extract_includes.bat
View file @
581be246
...
...
@@ -6,7 +6,9 @@ md include\google\protobuf\io
md include\google\protobuf\compiler
md include\google\protobuf\compiler\cpp
md include\google\protobuf\compiler\java
md include\google\protobuf\compiler\javanano
md include\google\protobuf\compiler\python
md include\google\protobuf\compiler\ruby
copy ..\src\google\protobuf\arena.h include\google\protobuf\arena.h
copy ..\src\google\protobuf\arenastring.h include\google\protobuf\arenastring.h
copy ..\src\google\protobuf\compiler\code_generator.h include\google\protobuf\compiler\code_generator.h
...
...
@@ -14,10 +16,12 @@ copy ..\src\google\protobuf\compiler\command_line_interface.h include\google\pro
copy ..\src\google\protobuf\compiler\cpp\cpp_generator.h include\google\protobuf\compiler\cpp\cpp_generator.h
copy ..\src\google\protobuf\compiler\importer.h include\google\protobuf\compiler\importer.h
copy ..\src\google\protobuf\compiler\java\java_generator.h include\google\protobuf\compiler\java\java_generator.h
copy ..\src\google\protobuf\compiler\javanano\javanano_generator.h include\google\protobuf\compiler\javanano\javanano_generator.h
copy ..\src\google\protobuf\compiler\parser.h include\google\protobuf\compiler\parser.h
copy ..\src\google\protobuf\compiler\plugin.h include\google\protobuf\compiler\plugin.h
copy ..\src\google\protobuf\compiler\plugin.pb.h include\google\protobuf\compiler\plugin.pb.h
copy ..\src\google\protobuf\compiler\python\python_generator.h include\google\protobuf\compiler\python\python_generator.h
copy ..\src\google\protobuf\compiler\ruby\ruby_generator.h include\google\protobuf\compiler\ruby\ruby_generator.h
copy ..\src\google\protobuf\descriptor_database.h include\google\protobuf\descriptor_database.h
copy ..\src\google\protobuf\descriptor.h include\google\protobuf\descriptor.h
copy ..\src\google\protobuf\descriptor.pb.h include\google\protobuf\descriptor.pb.h
...
...
vsprojects/libprotoc.vcproj
View file @
581be246
<?xml version="1.0" encoding="UTF-8"?>
<VisualStudioProject
ProjectType=
"Visual C++"
Version=
"9.00"
Name=
"libprotoc"
ProjectGUID=
"{B84FF31A-5F9A-46F8-AB22-DBFC9BECE3BE}"
Keyword=
"Win32Proj"
TargetFrameworkVersion=
"0"
>
<Platforms>
<Platform
Name=
"Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name=
"Debug|Win32"
OutputDirectory=
"Debug"
IntermediateDirectory=
"$(OutDir)\$(ProjectName)"
ConfigurationType=
"4"
>
<Tool
Name=
"VCPreBuildEventTool"
/>
<Tool
Name=
"VCCustomBuildTool"
/>
<Tool
Name=
"VCXMLDataGeneratorTool"
/>
<Tool
Name=
"VCWebServiceProxyGeneratorTool"
/>
<Tool
Name=
"VCMIDLTool"
/>
<Tool
Name=
"VCCLCompilerTool"
AdditionalOptions=
"/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305"
Optimization=
"0"
AdditionalIncludeDirectories=
"../src;."
PreprocessorDefinitions=
"WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;"
MinimalRebuild=
"true"
BasicRuntimeChecks=
"3"
RuntimeLibrary=
"3"
UsePrecompiledHeader=
"0"
WarningLevel=
"3"
Detect64BitPortabilityProblems=
"true"
DebugInformationFormat=
"4"
/>
<Tool
Name=
"VCManagedResourceCompilerTool"
/>
<Tool
Name=
"VCResourceCompilerTool"
/>
<Tool
Name=
"VCPreLinkEventTool"
/>
<Tool
Name=
"VCLibrarianTool"
/>
<Tool
Name=
"VCALinkTool"
/>
<Tool
Name=
"VCXDCMakeTool"
/>
<Tool
Name=
"VCBscMakeTool"
/>
<Tool
Name=
"VCFxCopTool"
/>
<Tool
Name=
"VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name=
"Release|Win32"
OutputDirectory=
"Release"
IntermediateDirectory=
"$(OutDir)\$(ProjectName)"
ConfigurationType=
"4"
>
<Tool
Name=
"VCPreBuildEventTool"
/>
<Tool
Name=
"VCCustomBuildTool"
/>
<Tool
Name=
"VCXMLDataGeneratorTool"
/>
<Tool
Name=
"VCWebServiceProxyGeneratorTool"
/>
<Tool
Name=
"VCMIDLTool"
/>
<Tool
Name=
"VCCLCompilerTool"
AdditionalOptions=
"/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305"
AdditionalIncludeDirectories=
"../src;."
PreprocessorDefinitions=
"WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;"
RuntimeLibrary=
"2"
UsePrecompiledHeader=
"0"
WarningLevel=
"3"
Detect64BitPortabilityProblems=
"true"
DebugInformationFormat=
"3"
/>
<Tool
Name=
"VCManagedResourceCompilerTool"
/>
<Tool
Name=
"VCResourceCompilerTool"
/>
<Tool
Name=
"VCPreLinkEventTool"
/>
<Tool
Name=
"VCLibrarianTool"
/>
<Tool
Name=
"VCALinkTool"
/>
<Tool
Name=
"VCXDCMakeTool"
/>
<Tool
Name=
"VCBscMakeTool"
/>
<Tool
Name=
"VCFxCopTool"
/>
<Tool
Name=
"VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name=
"Header Files"
Filter=
"h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier=
"{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath=
"..\src\google\protobuf\compiler\code_generator.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\command_line_interface.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\subprocess.h"
>
</File>
ProjectType=
"Visual C++"
Version=
"9.00"
Name=
"libprotoc"
ProjectGUID=
"{B84FF31A-5F9A-46F8-AB22-DBFC9BECE3BE}"
Keyword=
"Win32Proj"
TargetFrameworkVersion=
"0"
>
<Platforms>
<Platform
Name=
"Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name=
"Debug|Win32"
OutputDirectory=
"Debug"
IntermediateDirectory=
"$(OutDir)\$(ProjectName)"
ConfigurationType=
"4"
>
<Tool
Name=
"VCPreBuildEventTool"
/>
<Tool
Name=
"VCCustomBuildTool"
/>
<Tool
Name=
"VCXMLDataGeneratorTool"
/>
<Tool
Name=
"VCWebServiceProxyGeneratorTool"
/>
<Tool
Name=
"VCMIDLTool"
/>
<Tool
Name=
"VCCLCompilerTool"
AdditionalOptions=
"/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305"
Optimization=
"0"
AdditionalIncludeDirectories=
"../src;."
PreprocessorDefinitions=
"WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;"
MinimalRebuild=
"true"
BasicRuntimeChecks=
"3"
RuntimeLibrary=
"3"
UsePrecompiledHeader=
"0"
WarningLevel=
"3"
Detect64BitPortabilityProblems=
"true"
DebugInformationFormat=
"4"
/>
<Tool
Name=
"VCManagedResourceCompilerTool"
/>
<Tool
Name=
"VCResourceCompilerTool"
/>
<Tool
Name=
"VCPreLinkEventTool"
/>
<Tool
Name=
"VCLibrarianTool"
/>
<Tool
Name=
"VCALinkTool"
/>
<Tool
Name=
"VCXDCMakeTool"
/>
<Tool
Name=
"VCBscMakeTool"
/>
<Tool
Name=
"VCFxCopTool"
/>
<Tool
Name=
"VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name=
"Release|Win32"
OutputDirectory=
"Release"
IntermediateDirectory=
"$(OutDir)\$(ProjectName)"
ConfigurationType=
"4"
>
<Tool
Name=
"VCPreBuildEventTool"
/>
<Tool
Name=
"VCCustomBuildTool"
/>
<Tool
Name=
"VCXMLDataGeneratorTool"
/>
<Tool
Name=
"VCWebServiceProxyGeneratorTool"
/>
<Tool
Name=
"VCMIDLTool"
/>
<Tool
Name=
"VCCLCompilerTool"
AdditionalOptions=
"/wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305"
AdditionalIncludeDirectories=
"../src;."
PreprocessorDefinitions=
"WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBPROTOC_EXPORTS;"
RuntimeLibrary=
"2"
UsePrecompiledHeader=
"0"
WarningLevel=
"3"
Detect64BitPortabilityProblems=
"true"
DebugInformationFormat=
"3"
/>
<Tool
Name=
"VCManagedResourceCompilerTool"
/>
<Tool
Name=
"VCResourceCompilerTool"
/>
<Tool
Name=
"VCPreLinkEventTool"
/>
<Tool
Name=
"VCLibrarianTool"
/>
<Tool
Name=
"VCALinkTool"
/>
<Tool
Name=
"VCXDCMakeTool"
/>
<Tool
Name=
"VCBscMakeTool"
/>
<Tool
Name=
"VCFxCopTool"
/>
<Tool
Name=
"VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name=
"Header Files"
Filter=
"h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier=
"{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath=
"..\src\google\protobuf\compiler\code_generator.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\command_line_interface.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\subprocess.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\zip_writer.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\plugin.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\plugin.pb.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_enum.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_enum_field.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_extension.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_field.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_file.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_generator.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_helpers.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_message.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_message_field.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_options.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_primitive_field.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_service.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_string_field.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\ruby\ruby_generator.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_context.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_enum.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_enum_field.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_extension.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_field.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_file.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_generator.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_generator_factory.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_helpers.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_lazy_message_field.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_message.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_message_field.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_name_resolver.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_primitive_field.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_service.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_shared_code_generator.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_string_field.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_doc_comment.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_doc_comment.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\python\python_generator.h"
>
</File>
</Filter>
<Filter
Name=
"Resource Files"
Filter=
"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
UniqueIdentifier=
"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
</Filter>
<Filter
Name=
"Source Files"
Filter=
"cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier=
"{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath=
"..\src\google\protobuf\compiler\code_generator.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\command_line_interface.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_enum.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_enum_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_extension.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_file.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_generator.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_helpers.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_map_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_message.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_message_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_primitive_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_service.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_string_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\ruby\ruby_generator.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_context.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_doc_comment.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_enum.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_enum_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_extension.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_file.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_generator.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_generator_factory.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_helpers.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_lazy_message_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_map_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_message.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_message_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_name_resolver.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_primitive_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_service.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_shared_code_generator.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_string_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_enum.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_enum_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_extension.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_file.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_generator.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_helpers.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_message.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_message_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_primitive_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\plugin.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\plugin.pb.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\python\python_generator.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\subprocess.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\zip_writer.cc"
>
</File>
</Filter>
</Files>
<Globals>
</Globals>
<File
RelativePath=
"..\src\google\protobuf\compiler\plugin.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\plugin.pb.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_enum.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_enum_field.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_extension.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_field.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_file.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_generator.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_helpers.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_message.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_message_field.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_options.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_primitive_field.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_service.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_string_field.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_context.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_enum.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_enum_field.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_extension.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_field.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_file.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_generator.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_generator_factory.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_helpers.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_lazy_message_field.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_message.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_message_field.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_name_resolver.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_primitive_field.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_service.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_shared_code_generator.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_string_field.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_doc_comment.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_doc_comment.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_enum_field.h"
></File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_enum.h"
></File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_extension.h"
></File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_field.h"
></File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_file.h"
></File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_generator.h"
></File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_helpers.h"
></File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_map_field.h"
></File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_message_field.h"
></File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_message.h"
></File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_params.h"
></File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_primitive_field.h"
></File>
<File
RelativePath=
"..\src\google\protobuf\compiler\python\python_generator.h"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\ruby\ruby_generator.h"
>
</File>
</Filter>
<Filter
Name=
"Resource Files"
Filter=
"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
UniqueIdentifier=
"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
</Filter>
<Filter
Name=
"Source Files"
Filter=
"cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier=
"{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath=
"..\src\google\protobuf\compiler\code_generator.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\command_line_interface.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_enum.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_enum_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_extension.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_file.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_generator.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_helpers.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_map_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_message.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_message_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_primitive_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_service.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\cpp\cpp_string_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\ruby\ruby_generator.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_context.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_doc_comment.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_enum.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_enum_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_extension.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_file.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_generator.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_generator_factory.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_helpers.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_lazy_message_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_map_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_message.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_message_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_name_resolver.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_primitive_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_service.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_shared_code_generator.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\java\java_string_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_enum.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_enum_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_extension.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_file.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_generator.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_helpers.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_map_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_message.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_message_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\javanano\javanano_primitive_field.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\plugin.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\plugin.pb.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\python\python_generator.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\subprocess.cc"
>
</File>
<File
RelativePath=
"..\src\google\protobuf\compiler\zip_writer.cc"
>
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>
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