parent
c3bc155ace
commit
eee38b0c01
226 changed files with 8484 additions and 3661 deletions
@ -0,0 +1,73 @@ |
||||
// Protocol Buffers - Google's data interchange format |
||||
// Copyright 2008 Google Inc. All rights reserved. |
||||
// https://developers.google.com/protocol-buffers/ |
||||
// |
||||
// 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. |
||||
|
||||
syntax = "proto3"; |
||||
|
||||
package google.protobuf.python.internal; |
||||
|
||||
message TestPackedTypes { |
||||
enum NestedEnum { |
||||
FOO = 0; |
||||
BAR = 1; |
||||
BAZ = 2; |
||||
} |
||||
|
||||
repeated int32 repeated_int32 = 1; |
||||
repeated int64 repeated_int64 = 2; |
||||
repeated uint32 repeated_uint32 = 3; |
||||
repeated uint64 repeated_uint64 = 4; |
||||
repeated sint32 repeated_sint32 = 5; |
||||
repeated sint64 repeated_sint64 = 6; |
||||
repeated fixed32 repeated_fixed32 = 7; |
||||
repeated fixed64 repeated_fixed64 = 8; |
||||
repeated sfixed32 repeated_sfixed32 = 9; |
||||
repeated sfixed64 repeated_sfixed64 = 10; |
||||
repeated float repeated_float = 11; |
||||
repeated double repeated_double = 12; |
||||
repeated bool repeated_bool = 13; |
||||
repeated NestedEnum repeated_nested_enum = 14; |
||||
} |
||||
|
||||
message TestUnpackedTypes { |
||||
repeated int32 repeated_int32 = 1 [packed = false]; |
||||
repeated int64 repeated_int64 = 2 [packed = false]; |
||||
repeated uint32 repeated_uint32 = 3 [packed = false]; |
||||
repeated uint64 repeated_uint64 = 4 [packed = false]; |
||||
repeated sint32 repeated_sint32 = 5 [packed = false]; |
||||
repeated sint64 repeated_sint64 = 6 [packed = false]; |
||||
repeated fixed32 repeated_fixed32 = 7 [packed = false]; |
||||
repeated fixed64 repeated_fixed64 = 8 [packed = false]; |
||||
repeated sfixed32 repeated_sfixed32 = 9 [packed = false]; |
||||
repeated sfixed64 repeated_sfixed64 = 10 [packed = false]; |
||||
repeated float repeated_float = 11 [packed = false]; |
||||
repeated double repeated_double = 12 [packed = false]; |
||||
repeated bool repeated_bool = 13 [packed = false]; |
||||
repeated TestPackedTypes.NestedEnum repeated_nested_enum = 14 [packed = false]; |
||||
} |
@ -0,0 +1,226 @@ |
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// https://developers.google.com/protocol-buffers/
|
||||
//
|
||||
// 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: kenton@google.com (Kenton Varda)
|
||||
// Based on original Protocol Buffers design by
|
||||
// Sanjay Ghemawat, Jeff Dean, and others.
|
||||
|
||||
#include <map> |
||||
#include <string> |
||||
|
||||
#include <google/protobuf/compiler/java/java_context.h> |
||||
#include <google/protobuf/compiler/java/java_enum_lite.h> |
||||
#include <google/protobuf/compiler/java/java_doc_comment.h> |
||||
#include <google/protobuf/compiler/java/java_helpers.h> |
||||
#include <google/protobuf/compiler/java/java_name_resolver.h> |
||||
#include <google/protobuf/io/printer.h> |
||||
#include <google/protobuf/descriptor.pb.h> |
||||
#include <google/protobuf/stubs/strutil.h> |
||||
|
||||
namespace google { |
||||
namespace protobuf { |
||||
namespace compiler { |
||||
namespace java { |
||||
|
||||
namespace { |
||||
bool EnumHasCustomOptions(const EnumDescriptor* descriptor) { |
||||
if (descriptor->options().unknown_fields().field_count() > 0) return true; |
||||
for (int i = 0; i < descriptor->value_count(); ++i) { |
||||
const EnumValueDescriptor* value = descriptor->value(i); |
||||
if (value->options().unknown_fields().field_count() > 0) return true; |
||||
} |
||||
return false; |
||||
} |
||||
} // namespace
|
||||
|
||||
EnumLiteGenerator::EnumLiteGenerator(const EnumDescriptor* descriptor, |
||||
bool immutable_api, |
||||
Context* context) |
||||
: descriptor_(descriptor), immutable_api_(immutable_api), |
||||
name_resolver_(context->GetNameResolver()) { |
||||
for (int i = 0; i < descriptor_->value_count(); i++) { |
||||
const EnumValueDescriptor* value = descriptor_->value(i); |
||||
const EnumValueDescriptor* canonical_value = |
||||
descriptor_->FindValueByNumber(value->number()); |
||||
|
||||
if (value == canonical_value) { |
||||
canonical_values_.push_back(value); |
||||
} else { |
||||
Alias alias; |
||||
alias.value = value; |
||||
alias.canonical_value = canonical_value; |
||||
aliases_.push_back(alias); |
||||
} |
||||
} |
||||
} |
||||
|
||||
EnumLiteGenerator::~EnumLiteGenerator() {} |
||||
|
||||
void EnumLiteGenerator::Generate(io::Printer* printer) { |
||||
WriteEnumDocComment(printer, descriptor_); |
||||
if (HasDescriptorMethods(descriptor_)) { |
||||
printer->Print( |
||||
"public enum $classname$\n" |
||||
" implements com.google.protobuf.ProtocolMessageEnum {\n", |
||||
"classname", descriptor_->name()); |
||||
} else { |
||||
printer->Print( |
||||
"public enum $classname$\n" |
||||
" implements com.google.protobuf.Internal.EnumLite {\n", |
||||
"classname", descriptor_->name()); |
||||
} |
||||
printer->Indent(); |
||||
|
||||
for (int i = 0; i < canonical_values_.size(); i++) { |
||||
map<string, string> vars; |
||||
vars["name"] = canonical_values_[i]->name(); |
||||
vars["index"] = SimpleItoa(canonical_values_[i]->index()); |
||||
vars["number"] = SimpleItoa(canonical_values_[i]->number()); |
||||
WriteEnumValueDocComment(printer, canonical_values_[i]); |
||||
if (canonical_values_[i]->options().deprecated()) { |
||||
printer->Print("@java.lang.Deprecated\n"); |
||||
} |
||||
printer->Print(vars, |
||||
"$name$($index$, $number$),\n"); |
||||
} |
||||
|
||||
if (SupportUnknownEnumValue(descriptor_->file())) { |
||||
printer->Print("UNRECOGNIZED(-1, -1),\n"); |
||||
} |
||||
|
||||
printer->Print( |
||||
";\n" |
||||
"\n"); |
||||
|
||||
// -----------------------------------------------------------------
|
||||
|
||||
for (int i = 0; i < aliases_.size(); i++) { |
||||
map<string, string> vars; |
||||
vars["classname"] = descriptor_->name(); |
||||
vars["name"] = aliases_[i].value->name(); |
||||
vars["canonical_name"] = aliases_[i].canonical_value->name(); |
||||
WriteEnumValueDocComment(printer, aliases_[i].value); |
||||
printer->Print(vars, |
||||
"public static final $classname$ $name$ = $canonical_name$;\n"); |
||||
} |
||||
|
||||
for (int i = 0; i < descriptor_->value_count(); i++) { |
||||
map<string, string> vars; |
||||
vars["name"] = descriptor_->value(i)->name(); |
||||
vars["number"] = SimpleItoa(descriptor_->value(i)->number()); |
||||
WriteEnumValueDocComment(printer, descriptor_->value(i)); |
||||
printer->Print(vars, |
||||
"public static final int $name$_VALUE = $number$;\n"); |
||||
} |
||||
printer->Print("\n"); |
||||
|
||||
// -----------------------------------------------------------------
|
||||
|
||||
printer->Print( |
||||
"\n" |
||||
"public final int getNumber() {\n"); |
||||
if (SupportUnknownEnumValue(descriptor_->file())) { |
||||
printer->Print( |
||||
" if (index == -1) {\n" |
||||
" throw new java.lang.IllegalArgumentException(\n" |
||||
" \"Can't get the number of an unknown enum value.\");\n" |
||||
" }\n"); |
||||
} |
||||
printer->Print( |
||||
" return value;\n" |
||||
"}\n" |
||||
"\n" |
||||
"public static $classname$ valueOf(int value) {\n" |
||||
" switch (value) {\n", |
||||
"classname", descriptor_->name()); |
||||
printer->Indent(); |
||||
printer->Indent(); |
||||
|
||||
for (int i = 0; i < canonical_values_.size(); i++) { |
||||
printer->Print( |
||||
"case $number$: return $name$;\n", |
||||
"name", canonical_values_[i]->name(), |
||||
"number", SimpleItoa(canonical_values_[i]->number())); |
||||
} |
||||
|
||||
printer->Outdent(); |
||||
printer->Outdent(); |
||||
printer->Print( |
||||
" default: return null;\n" |
||||
" }\n" |
||||
"}\n" |
||||
"\n" |
||||
"public static com.google.protobuf.Internal.EnumLiteMap<$classname$>\n" |
||||
" internalGetValueMap() {\n" |
||||
" return internalValueMap;\n" |
||||
"}\n" |
||||
"private static final com.google.protobuf.Internal.EnumLiteMap<\n" |
||||
" $classname$> internalValueMap =\n" |
||||
" new com.google.protobuf.Internal.EnumLiteMap<$classname$>() {\n" |
||||
" public $classname$ findValueByNumber(int number) {\n" |
||||
" return $classname$.valueOf(number);\n" |
||||
" }\n" |
||||
" };\n" |
||||
"\n", |
||||
"classname", descriptor_->name()); |
||||
|
||||
printer->Print( |
||||
"private final int value;\n\n" |
||||
"private $classname$(int index, int value) {\n", |
||||
"classname", descriptor_->name()); |
||||
printer->Print( |
||||
" this.value = value;\n" |
||||
"}\n"); |
||||
|
||||
printer->Print( |
||||
"\n" |
||||
"// @@protoc_insertion_point(enum_scope:$full_name$)\n", |
||||
"full_name", descriptor_->full_name()); |
||||
|
||||
printer->Outdent(); |
||||
printer->Print("}\n\n"); |
||||
} |
||||
|
||||
bool EnumLiteGenerator::CanUseEnumValues() { |
||||
if (canonical_values_.size() != descriptor_->value_count()) { |
||||
return false; |
||||
} |
||||
for (int i = 0; i < descriptor_->value_count(); i++) { |
||||
if (descriptor_->value(i)->name() != canonical_values_[i]->name()) { |
||||
return false; |
||||
} |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
} // namespace java
|
||||
} // namespace compiler
|
||||
} // namespace protobuf
|
||||
} // namespace google
|
@ -0,0 +1,99 @@ |
||||
// Protocol Buffers - Google's data interchange format
|
||||
// Copyright 2008 Google Inc. All rights reserved.
|
||||
// https://developers.google.com/protocol-buffers/
|
||||
//
|
||||
// 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: kenton@google.com (Kenton Varda)
|
||||
// Based on original Protocol Buffers design by
|
||||
// Sanjay Ghemawat, Jeff Dean, and others.
|
||||
|
||||
#ifndef GOOGLE_PROTOBUF_COMPILER_JAVA_ENUM_LITE_H__ |
||||
#define GOOGLE_PROTOBUF_COMPILER_JAVA_ENUM_LITE_H__ |
||||
|
||||
#include <string> |
||||
#include <vector> |
||||
#include <google/protobuf/descriptor.h> |
||||
|
||||
namespace google { |
||||
namespace protobuf { |
||||
namespace compiler { |
||||
namespace java { |
||||
class Context; // context.h
|
||||
class ClassNameResolver; // name_resolver.h
|
||||
} |
||||
} |
||||
namespace io { |
||||
class Printer; // printer.h
|
||||
} |
||||
} |
||||
|
||||
namespace protobuf { |
||||
namespace compiler { |
||||
namespace java { |
||||
|
||||
class EnumLiteGenerator { |
||||
public: |
||||
explicit EnumLiteGenerator(const EnumDescriptor* descriptor, |
||||
bool immutable_api, |
||||
Context* context); |
||||
~EnumLiteGenerator(); |
||||
|
||||
void Generate(io::Printer* printer); |
||||
|
||||
private: |
||||
const EnumDescriptor* descriptor_; |
||||
|
||||
// The proto language allows multiple enum constants to have the same numeric
|
||||
// value. Java, however, does not allow multiple enum constants to be
|
||||
// considered equivalent. We treat the first defined constant for any
|
||||
// given numeric value as "canonical" and the rest as aliases of that
|
||||
// canonical value.
|
||||
vector<const EnumValueDescriptor*> canonical_values_; |
||||
|
||||
struct Alias { |
||||
const EnumValueDescriptor* value; |
||||
const EnumValueDescriptor* canonical_value; |
||||
}; |
||||
vector<Alias> aliases_; |
||||
|
||||
bool immutable_api_; |
||||
|
||||
Context* context_; |
||||
ClassNameResolver* name_resolver_; |
||||
|
||||
bool CanUseEnumValues(); |
||||
|
||||
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(EnumLiteGenerator); |
||||
}; |
||||
|
||||
} // namespace java
|
||||
} // namespace compiler
|
||||
} // namespace protobuf
|
||||
|
||||
} // namespace google
|
||||
#endif // GOOGLE_PROTOBUF_COMPILER_JAVA_ENUM_LITE_H__
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue