Merge pull request #1349 from gvaish/master
Added CLI option internal_access for types (C#)
This commit is contained in:
commit
89719f07a3
@ -23,6 +23,7 @@ copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\command_line_
|
||||
copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\cpp\cpp_generator.h include\google\protobuf\compiler\cpp\cpp_generator.h
|
||||
copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\csharp\csharp_generator.h include\google\protobuf\compiler\csharp\csharp_generator.h
|
||||
copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\csharp\csharp_names.h include\google\protobuf\compiler\csharp\csharp_names.h
|
||||
copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\csharp\csharp_options.h include\google\protobuf\compiler\csharp\csharp_options.h
|
||||
copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\importer.h include\google\protobuf\compiler\importer.h
|
||||
copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\java\java_generator.h include\google\protobuf\compiler\java\java_generator.h
|
||||
copy ${PROTOBUF_SOURCE_WIN32_PATH}\..\src\google\protobuf\compiler\java\java_names.h include\google\protobuf\compiler\java\java_names.h
|
||||
|
@ -455,6 +455,7 @@ libprotoc_la_SOURCES = \
|
||||
google/protobuf/compiler/csharp/csharp_message.h \
|
||||
google/protobuf/compiler/csharp/csharp_message_field.cc \
|
||||
google/protobuf/compiler/csharp/csharp_message_field.h \
|
||||
google/protobuf/compiler/csharp/csharp_options.h \
|
||||
google/protobuf/compiler/csharp/csharp_primitive_field.cc \
|
||||
google/protobuf/compiler/csharp/csharp_primitive_field.h \
|
||||
google/protobuf/compiler/csharp/csharp_reflection_class.cc \
|
||||
|
@ -49,8 +49,8 @@ namespace protobuf {
|
||||
namespace compiler {
|
||||
namespace csharp {
|
||||
|
||||
EnumGenerator::EnumGenerator(const EnumDescriptor* descriptor) :
|
||||
SourceGeneratorBase(descriptor->file()),
|
||||
EnumGenerator::EnumGenerator(const EnumDescriptor* descriptor, const Options* options) :
|
||||
SourceGeneratorBase(descriptor->file(), options),
|
||||
descriptor_(descriptor) {
|
||||
}
|
||||
|
||||
|
@ -43,7 +43,7 @@ namespace csharp {
|
||||
|
||||
class EnumGenerator : public SourceGeneratorBase {
|
||||
public:
|
||||
EnumGenerator(const EnumDescriptor* descriptor);
|
||||
EnumGenerator(const EnumDescriptor* descriptor, const Options* options);
|
||||
~EnumGenerator();
|
||||
|
||||
void Generate(io::Printer* printer);
|
||||
|
@ -38,6 +38,7 @@
|
||||
#include <google/protobuf/io/zero_copy_stream.h>
|
||||
|
||||
#include <google/protobuf/compiler/csharp/csharp_helpers.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_options.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_enum_field.h>
|
||||
|
||||
namespace google {
|
||||
@ -46,8 +47,8 @@ namespace compiler {
|
||||
namespace csharp {
|
||||
|
||||
EnumFieldGenerator::EnumFieldGenerator(const FieldDescriptor* descriptor,
|
||||
int fieldOrdinal)
|
||||
: PrimitiveFieldGenerator(descriptor, fieldOrdinal) {
|
||||
int fieldOrdinal, const Options *options)
|
||||
: PrimitiveFieldGenerator(descriptor, fieldOrdinal, options) {
|
||||
}
|
||||
|
||||
EnumFieldGenerator::~EnumFieldGenerator() {
|
||||
@ -81,8 +82,8 @@ void EnumFieldGenerator::GenerateCodecCode(io::Printer* printer) {
|
||||
}
|
||||
|
||||
EnumOneofFieldGenerator::EnumOneofFieldGenerator(const FieldDescriptor* descriptor,
|
||||
int fieldOrdinal)
|
||||
: PrimitiveOneofFieldGenerator(descriptor, fieldOrdinal) {
|
||||
int fieldOrdinal, const Options *options)
|
||||
: PrimitiveOneofFieldGenerator(descriptor, fieldOrdinal, options) {
|
||||
}
|
||||
|
||||
EnumOneofFieldGenerator::~EnumOneofFieldGenerator() {
|
||||
|
@ -43,7 +43,7 @@ namespace csharp {
|
||||
|
||||
class EnumFieldGenerator : public PrimitiveFieldGenerator {
|
||||
public:
|
||||
EnumFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal);
|
||||
EnumFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal, const Options *options);
|
||||
~EnumFieldGenerator();
|
||||
|
||||
virtual void GenerateCodecCode(io::Printer* printer);
|
||||
@ -57,7 +57,7 @@ class EnumFieldGenerator : public PrimitiveFieldGenerator {
|
||||
|
||||
class EnumOneofFieldGenerator : public PrimitiveOneofFieldGenerator {
|
||||
public:
|
||||
EnumOneofFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal);
|
||||
EnumOneofFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal, const Options *options);
|
||||
~EnumOneofFieldGenerator();
|
||||
|
||||
virtual void GenerateParsingCode(io::Printer* printer);
|
||||
|
@ -100,8 +100,8 @@ void FieldGeneratorBase::SetCommonOneofFieldVariables(
|
||||
}
|
||||
|
||||
FieldGeneratorBase::FieldGeneratorBase(const FieldDescriptor* descriptor,
|
||||
int fieldOrdinal)
|
||||
: SourceGeneratorBase(descriptor->file()),
|
||||
int fieldOrdinal, const Options* options)
|
||||
: SourceGeneratorBase(descriptor->file(), options),
|
||||
descriptor_(descriptor),
|
||||
fieldOrdinal_(fieldOrdinal) {
|
||||
SetCommonFieldVariables(&variables_);
|
||||
|
@ -44,7 +44,7 @@ namespace csharp {
|
||||
|
||||
class FieldGeneratorBase : public SourceGeneratorBase {
|
||||
public:
|
||||
FieldGeneratorBase(const FieldDescriptor* descriptor, int fieldOrdinal);
|
||||
FieldGeneratorBase(const FieldDescriptor* descriptor, int fieldOrdinal, const Options* options);
|
||||
~FieldGeneratorBase();
|
||||
|
||||
virtual void GenerateCloningCode(io::Printer* printer) = 0;
|
||||
|
@ -41,6 +41,7 @@
|
||||
#include <google/protobuf/compiler/csharp/csharp_generator.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_helpers.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_names.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_options.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_reflection_class.h>
|
||||
|
||||
using google::protobuf::internal::scoped_ptr;
|
||||
@ -51,8 +52,9 @@ namespace compiler {
|
||||
namespace csharp {
|
||||
|
||||
void GenerateFile(const google::protobuf::FileDescriptor* file,
|
||||
io::Printer* printer) {
|
||||
ReflectionClassGenerator reflectionClassGenerator(file);
|
||||
io::Printer* printer,
|
||||
const Options* options) {
|
||||
ReflectionClassGenerator reflectionClassGenerator(file, options);
|
||||
reflectionClassGenerator.Generate(printer);
|
||||
}
|
||||
|
||||
@ -71,15 +73,14 @@ bool Generator::Generate(
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string file_extension = ".cs";
|
||||
std::string base_namespace = "";
|
||||
bool generate_directories = false;
|
||||
struct Options cli_options;
|
||||
|
||||
for (int i = 0; i < options.size(); i++) {
|
||||
if (options[i].first == "file_extension") {
|
||||
file_extension = options[i].second;
|
||||
cli_options.file_extension = options[i].second;
|
||||
} else if (options[i].first == "base_namespace") {
|
||||
base_namespace = options[i].second;
|
||||
generate_directories = true;
|
||||
cli_options.base_namespace = options[i].second;
|
||||
cli_options.generate_directories = true;
|
||||
} else {
|
||||
*error = "Unknown generator option: " + options[i].first;
|
||||
return false;
|
||||
@ -87,7 +88,12 @@ bool Generator::Generate(
|
||||
}
|
||||
|
||||
string filename_error = "";
|
||||
std::string filename = GetOutputFile(file, file_extension, generate_directories, base_namespace, &filename_error);
|
||||
std::string filename = GetOutputFile(file,
|
||||
cli_options.file_extension,
|
||||
cli_options.generate_directories,
|
||||
cli_options.base_namespace,
|
||||
&filename_error);
|
||||
|
||||
if (filename.empty()) {
|
||||
*error = filename_error;
|
||||
return false;
|
||||
@ -96,7 +102,7 @@ bool Generator::Generate(
|
||||
generator_context->Open(filename));
|
||||
io::Printer printer(output.get(), '$');
|
||||
|
||||
GenerateFile(file, &printer);
|
||||
GenerateFile(file, &printer, &cli_options);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -48,6 +48,7 @@
|
||||
#include <google/protobuf/compiler/csharp/csharp_enum_field.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_map_field.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_message_field.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_options.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_primitive_field.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_repeated_enum_field.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_repeated_message_field.h>
|
||||
@ -351,49 +352,49 @@ std::string FileDescriptorToBase64(const FileDescriptor* descriptor) {
|
||||
}
|
||||
|
||||
FieldGeneratorBase* CreateFieldGenerator(const FieldDescriptor* descriptor,
|
||||
int fieldOrdinal) {
|
||||
int fieldOrdinal, const Options* options) {
|
||||
switch (descriptor->type()) {
|
||||
case FieldDescriptor::TYPE_GROUP:
|
||||
case FieldDescriptor::TYPE_MESSAGE:
|
||||
if (descriptor->is_repeated()) {
|
||||
if (descriptor->is_map()) {
|
||||
return new MapFieldGenerator(descriptor, fieldOrdinal);
|
||||
return new MapFieldGenerator(descriptor, fieldOrdinal, options);
|
||||
} else {
|
||||
return new RepeatedMessageFieldGenerator(descriptor, fieldOrdinal);
|
||||
return new RepeatedMessageFieldGenerator(descriptor, fieldOrdinal, options);
|
||||
}
|
||||
} else {
|
||||
if (IsWrapperType(descriptor)) {
|
||||
if (descriptor->containing_oneof()) {
|
||||
return new WrapperOneofFieldGenerator(descriptor, fieldOrdinal);
|
||||
return new WrapperOneofFieldGenerator(descriptor, fieldOrdinal, options);
|
||||
} else {
|
||||
return new WrapperFieldGenerator(descriptor, fieldOrdinal);
|
||||
return new WrapperFieldGenerator(descriptor, fieldOrdinal, options);
|
||||
}
|
||||
} else {
|
||||
if (descriptor->containing_oneof()) {
|
||||
return new MessageOneofFieldGenerator(descriptor, fieldOrdinal);
|
||||
return new MessageOneofFieldGenerator(descriptor, fieldOrdinal, options);
|
||||
} else {
|
||||
return new MessageFieldGenerator(descriptor, fieldOrdinal);
|
||||
return new MessageFieldGenerator(descriptor, fieldOrdinal, options);
|
||||
}
|
||||
}
|
||||
}
|
||||
case FieldDescriptor::TYPE_ENUM:
|
||||
if (descriptor->is_repeated()) {
|
||||
return new RepeatedEnumFieldGenerator(descriptor, fieldOrdinal);
|
||||
return new RepeatedEnumFieldGenerator(descriptor, fieldOrdinal, options);
|
||||
} else {
|
||||
if (descriptor->containing_oneof()) {
|
||||
return new EnumOneofFieldGenerator(descriptor, fieldOrdinal);
|
||||
return new EnumOneofFieldGenerator(descriptor, fieldOrdinal, options);
|
||||
} else {
|
||||
return new EnumFieldGenerator(descriptor, fieldOrdinal);
|
||||
return new EnumFieldGenerator(descriptor, fieldOrdinal, options);
|
||||
}
|
||||
}
|
||||
default:
|
||||
if (descriptor->is_repeated()) {
|
||||
return new RepeatedPrimitiveFieldGenerator(descriptor, fieldOrdinal);
|
||||
return new RepeatedPrimitiveFieldGenerator(descriptor, fieldOrdinal, options);
|
||||
} else {
|
||||
if (descriptor->containing_oneof()) {
|
||||
return new PrimitiveOneofFieldGenerator(descriptor, fieldOrdinal);
|
||||
return new PrimitiveOneofFieldGenerator(descriptor, fieldOrdinal, options);
|
||||
} else {
|
||||
return new PrimitiveFieldGenerator(descriptor, fieldOrdinal);
|
||||
return new PrimitiveFieldGenerator(descriptor, fieldOrdinal, options);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -46,6 +46,7 @@ namespace protobuf {
|
||||
namespace compiler {
|
||||
namespace csharp {
|
||||
|
||||
struct Options;
|
||||
class FieldGeneratorBase;
|
||||
|
||||
// TODO: start using this enum.
|
||||
@ -95,7 +96,7 @@ std::string StringToBase64(const std::string& input);
|
||||
|
||||
std::string FileDescriptorToBase64(const FileDescriptor* descriptor);
|
||||
|
||||
FieldGeneratorBase* CreateFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal);
|
||||
FieldGeneratorBase* CreateFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal, const Options* options);
|
||||
|
||||
// Determines whether the given message is a map entry message, i.e. one implicitly created
|
||||
// by protoc due to a map<key, value> field.
|
||||
|
@ -48,8 +48,9 @@ namespace compiler {
|
||||
namespace csharp {
|
||||
|
||||
MapFieldGenerator::MapFieldGenerator(const FieldDescriptor* descriptor,
|
||||
int fieldOrdinal)
|
||||
: FieldGeneratorBase(descriptor, fieldOrdinal) {
|
||||
int fieldOrdinal,
|
||||
const Options* options)
|
||||
: FieldGeneratorBase(descriptor, fieldOrdinal, options) {
|
||||
}
|
||||
|
||||
MapFieldGenerator::~MapFieldGenerator() {
|
||||
@ -62,8 +63,8 @@ void MapFieldGenerator::GenerateMembers(io::Printer* printer) {
|
||||
descriptor_->message_type()->FindFieldByName("value");
|
||||
variables_["key_type_name"] = type_name(key_descriptor);
|
||||
variables_["value_type_name"] = type_name(value_descriptor);
|
||||
scoped_ptr<FieldGeneratorBase> key_generator(CreateFieldGenerator(key_descriptor, 1));
|
||||
scoped_ptr<FieldGeneratorBase> value_generator(CreateFieldGenerator(value_descriptor, 2));
|
||||
scoped_ptr<FieldGeneratorBase> key_generator(CreateFieldGenerator(key_descriptor, 1, this->options()));
|
||||
scoped_ptr<FieldGeneratorBase> value_generator(CreateFieldGenerator(value_descriptor, 2, this->options()));
|
||||
|
||||
printer->Print(
|
||||
variables_,
|
||||
|
@ -43,7 +43,7 @@ namespace csharp {
|
||||
|
||||
class MapFieldGenerator : public FieldGeneratorBase {
|
||||
public:
|
||||
MapFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal);
|
||||
MapFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal, const Options* options);
|
||||
~MapFieldGenerator();
|
||||
|
||||
virtual void GenerateCloningCode(io::Printer* printer);
|
||||
|
@ -60,8 +60,8 @@ bool CompareFieldNumbers(const FieldDescriptor* d1, const FieldDescriptor* d2) {
|
||||
return d1->number() < d2->number();
|
||||
}
|
||||
|
||||
MessageGenerator::MessageGenerator(const Descriptor* descriptor)
|
||||
: SourceGeneratorBase(descriptor->file()),
|
||||
MessageGenerator::MessageGenerator(const Descriptor* descriptor, const Options* options)
|
||||
: SourceGeneratorBase(descriptor->file(), options),
|
||||
descriptor_(descriptor) {
|
||||
|
||||
// sorted field names
|
||||
@ -214,13 +214,13 @@ void MessageGenerator::Generate(io::Printer* printer) {
|
||||
printer->Print("public static partial class Types {\n");
|
||||
printer->Indent();
|
||||
for (int i = 0; i < descriptor_->enum_type_count(); i++) {
|
||||
EnumGenerator enumGenerator(descriptor_->enum_type(i));
|
||||
EnumGenerator enumGenerator(descriptor_->enum_type(i), this->options());
|
||||
enumGenerator.Generate(printer);
|
||||
}
|
||||
for (int i = 0; i < descriptor_->nested_type_count(); i++) {
|
||||
// Don't generate nested types for maps...
|
||||
if (!IsMapEntryMessage(descriptor_->nested_type(i))) {
|
||||
MessageGenerator messageGenerator(descriptor_->nested_type(i));
|
||||
MessageGenerator messageGenerator(descriptor_->nested_type(i), this->options());
|
||||
messageGenerator.Generate(printer);
|
||||
}
|
||||
}
|
||||
@ -490,7 +490,7 @@ int MessageGenerator::GetFieldOrdinal(const FieldDescriptor* descriptor) {
|
||||
|
||||
FieldGeneratorBase* MessageGenerator::CreateFieldGeneratorInternal(
|
||||
const FieldDescriptor* descriptor) {
|
||||
return CreateFieldGenerator(descriptor, GetFieldOrdinal(descriptor));
|
||||
return CreateFieldGenerator(descriptor, GetFieldOrdinal(descriptor), this->options());
|
||||
}
|
||||
|
||||
} // namespace csharp
|
||||
|
@ -47,7 +47,7 @@ class FieldGeneratorBase;
|
||||
|
||||
class MessageGenerator : public SourceGeneratorBase {
|
||||
public:
|
||||
MessageGenerator(const Descriptor* descriptor);
|
||||
MessageGenerator(const Descriptor* descriptor, const Options* options);
|
||||
~MessageGenerator();
|
||||
|
||||
void GenerateCloningCode(io::Printer* printer);
|
||||
|
@ -41,6 +41,7 @@
|
||||
#include <google/protobuf/compiler/csharp/csharp_doc_comment.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_helpers.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_message_field.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_options.h>
|
||||
|
||||
namespace google {
|
||||
namespace protobuf {
|
||||
@ -48,8 +49,8 @@ namespace compiler {
|
||||
namespace csharp {
|
||||
|
||||
MessageFieldGenerator::MessageFieldGenerator(const FieldDescriptor* descriptor,
|
||||
int fieldOrdinal)
|
||||
: FieldGeneratorBase(descriptor, fieldOrdinal) {
|
||||
int fieldOrdinal, const Options *options)
|
||||
: FieldGeneratorBase(descriptor, fieldOrdinal, options) {
|
||||
variables_["has_property_check"] = name() + "_ != null";
|
||||
variables_["has_not_property_check"] = name() + "_ == null";
|
||||
}
|
||||
@ -144,8 +145,8 @@ void MessageFieldGenerator::GenerateCodecCode(io::Printer* printer) {
|
||||
}
|
||||
|
||||
MessageOneofFieldGenerator::MessageOneofFieldGenerator(const FieldDescriptor* descriptor,
|
||||
int fieldOrdinal)
|
||||
: MessageFieldGenerator(descriptor, fieldOrdinal) {
|
||||
int fieldOrdinal, const Options *options)
|
||||
: MessageFieldGenerator(descriptor, fieldOrdinal, options) {
|
||||
SetCommonOneofFieldVariables(&variables_);
|
||||
}
|
||||
|
||||
|
@ -43,7 +43,7 @@ namespace csharp {
|
||||
|
||||
class MessageFieldGenerator : public FieldGeneratorBase {
|
||||
public:
|
||||
MessageFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal);
|
||||
MessageFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal, const Options *options);
|
||||
~MessageFieldGenerator();
|
||||
|
||||
virtual void GenerateCodecCode(io::Printer* printer);
|
||||
@ -65,7 +65,7 @@ class MessageFieldGenerator : public FieldGeneratorBase {
|
||||
|
||||
class MessageOneofFieldGenerator : public MessageFieldGenerator {
|
||||
public:
|
||||
MessageOneofFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal);
|
||||
MessageOneofFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal, const Options *options);
|
||||
~MessageOneofFieldGenerator();
|
||||
|
||||
virtual void GenerateCloningCode(io::Printer* printer);
|
||||
|
60
src/google/protobuf/compiler/csharp/csharp_options.h
Normal file
60
src/google/protobuf/compiler/csharp/csharp_options.h
Normal file
@ -0,0 +1,60 @@
|
||||
// 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.
|
||||
|
||||
#ifndef GOOGLE_PROTOBUF_COMPILER_CSHARP_OPTIONS_H__
|
||||
#define GOOGLE_PROTOBUF_COMPILER_CSHARP_OPTIONS_H__
|
||||
|
||||
#include <string>
|
||||
|
||||
#include <google/protobuf/stubs/common.h>
|
||||
namespace google {
|
||||
namespace protobuf {
|
||||
namespace compiler {
|
||||
namespace csharp {
|
||||
|
||||
// Generator options (used by csharp_generator.cc):
|
||||
struct Options {
|
||||
Options() : file_extension(".cs"), base_namespace(""), generate_directories(false) {
|
||||
}
|
||||
// Extension of the generated file. Defaults to ".cs"
|
||||
string file_extension;
|
||||
// Base namespace to use to create directory hierarchy. Defaults to ""
|
||||
string base_namespace;
|
||||
// Whether or not to generate directory hierarchy. Defaults to false
|
||||
bool generate_directories;
|
||||
};
|
||||
|
||||
} // namespace csharp
|
||||
} // namespace compiler
|
||||
} // namespace protobuf
|
||||
|
||||
|
||||
} // namespace google
|
||||
#endif // GOOGLE_PROTOBUF_COMPILER_CSHARP_OPTIONS_H__
|
@ -40,6 +40,7 @@
|
||||
|
||||
#include <google/protobuf/compiler/csharp/csharp_doc_comment.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_helpers.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_options.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_primitive_field.h>
|
||||
|
||||
namespace google {
|
||||
@ -48,8 +49,8 @@ namespace compiler {
|
||||
namespace csharp {
|
||||
|
||||
PrimitiveFieldGenerator::PrimitiveFieldGenerator(
|
||||
const FieldDescriptor* descriptor, int fieldOrdinal)
|
||||
: FieldGeneratorBase(descriptor, fieldOrdinal) {
|
||||
const FieldDescriptor* descriptor, int fieldOrdinal, const Options *options)
|
||||
: FieldGeneratorBase(descriptor, fieldOrdinal, options) {
|
||||
// TODO(jonskeet): Make this cleaner...
|
||||
is_value_type = descriptor->type() != FieldDescriptor::TYPE_STRING
|
||||
&& descriptor->type() != FieldDescriptor::TYPE_BYTES;
|
||||
@ -163,8 +164,8 @@ void PrimitiveFieldGenerator::GenerateCodecCode(io::Printer* printer) {
|
||||
}
|
||||
|
||||
PrimitiveOneofFieldGenerator::PrimitiveOneofFieldGenerator(
|
||||
const FieldDescriptor* descriptor, int fieldOrdinal)
|
||||
: PrimitiveFieldGenerator(descriptor, fieldOrdinal) {
|
||||
const FieldDescriptor* descriptor, int fieldOrdinal, const Options *options)
|
||||
: PrimitiveFieldGenerator(descriptor, fieldOrdinal, options) {
|
||||
SetCommonOneofFieldVariables(&variables_);
|
||||
}
|
||||
|
||||
|
@ -41,9 +41,11 @@ namespace protobuf {
|
||||
namespace compiler {
|
||||
namespace csharp {
|
||||
|
||||
struct Options;
|
||||
|
||||
class PrimitiveFieldGenerator : public FieldGeneratorBase {
|
||||
public:
|
||||
PrimitiveFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal);
|
||||
PrimitiveFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal, const Options *options);
|
||||
~PrimitiveFieldGenerator();
|
||||
|
||||
virtual void GenerateCodecCode(io::Printer* printer);
|
||||
@ -67,7 +69,7 @@ class PrimitiveFieldGenerator : public FieldGeneratorBase {
|
||||
|
||||
class PrimitiveOneofFieldGenerator : public PrimitiveFieldGenerator {
|
||||
public:
|
||||
PrimitiveOneofFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal);
|
||||
PrimitiveOneofFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal, const Options *options);
|
||||
~PrimitiveOneofFieldGenerator();
|
||||
|
||||
virtual void GenerateCloningCode(io::Printer* printer);
|
||||
|
@ -43,6 +43,7 @@
|
||||
#include <google/protobuf/compiler/csharp/csharp_helpers.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_message.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_names.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_options.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_reflection_class.h>
|
||||
|
||||
namespace google {
|
||||
@ -50,8 +51,9 @@ namespace protobuf {
|
||||
namespace compiler {
|
||||
namespace csharp {
|
||||
|
||||
ReflectionClassGenerator::ReflectionClassGenerator(const FileDescriptor* file)
|
||||
: SourceGeneratorBase(file),
|
||||
ReflectionClassGenerator::ReflectionClassGenerator(const FileDescriptor* file,
|
||||
const Options* options)
|
||||
: SourceGeneratorBase(file, options),
|
||||
file_(file) {
|
||||
namespace_ = GetFileNamespace(file);
|
||||
reflectionClassname_ = GetReflectionClassUnqualifiedName(file);
|
||||
@ -72,7 +74,7 @@ void ReflectionClassGenerator::Generate(io::Printer* printer) {
|
||||
if (file_->enum_type_count() > 0) {
|
||||
printer->Print("#region Enums\n");
|
||||
for (int i = 0; i < file_->enum_type_count(); i++) {
|
||||
EnumGenerator enumGenerator(file_->enum_type(i));
|
||||
EnumGenerator enumGenerator(file_->enum_type(i), this->options());
|
||||
enumGenerator.Generate(printer);
|
||||
}
|
||||
printer->Print("#endregion\n");
|
||||
@ -83,7 +85,7 @@ void ReflectionClassGenerator::Generate(io::Printer* printer) {
|
||||
if (file_->message_type_count() > 0) {
|
||||
printer->Print("#region Messages\n");
|
||||
for (int i = 0; i < file_->message_type_count(); i++) {
|
||||
MessageGenerator messageGenerator(file_->message_type(i));
|
||||
MessageGenerator messageGenerator(file_->message_type(i), this->options());
|
||||
messageGenerator.Generate(printer);
|
||||
}
|
||||
printer->Print("#endregion\n");
|
||||
|
@ -43,7 +43,7 @@ namespace csharp {
|
||||
|
||||
class ReflectionClassGenerator : public SourceGeneratorBase {
|
||||
public:
|
||||
ReflectionClassGenerator(const FileDescriptor* file);
|
||||
ReflectionClassGenerator(const FileDescriptor* file, const Options* options);
|
||||
~ReflectionClassGenerator();
|
||||
|
||||
void Generate(io::Printer* printer);
|
||||
|
@ -48,8 +48,8 @@ namespace compiler {
|
||||
namespace csharp {
|
||||
|
||||
RepeatedEnumFieldGenerator::RepeatedEnumFieldGenerator(
|
||||
const FieldDescriptor* descriptor, int fieldOrdinal)
|
||||
: FieldGeneratorBase(descriptor, fieldOrdinal) {
|
||||
const FieldDescriptor* descriptor, int fieldOrdinal, const Options *options)
|
||||
: FieldGeneratorBase(descriptor, fieldOrdinal, options) {
|
||||
}
|
||||
|
||||
RepeatedEnumFieldGenerator::~RepeatedEnumFieldGenerator() {
|
||||
|
@ -45,7 +45,7 @@ namespace csharp {
|
||||
// should probably have a RepeatedFieldGeneratorBase.
|
||||
class RepeatedEnumFieldGenerator : public FieldGeneratorBase {
|
||||
public:
|
||||
RepeatedEnumFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal);
|
||||
RepeatedEnumFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal, const Options *options);
|
||||
~RepeatedEnumFieldGenerator();
|
||||
|
||||
virtual void GenerateCloningCode(io::Printer* printer);
|
||||
|
@ -49,8 +49,8 @@ namespace compiler {
|
||||
namespace csharp {
|
||||
|
||||
RepeatedMessageFieldGenerator::RepeatedMessageFieldGenerator(
|
||||
const FieldDescriptor* descriptor, int fieldOrdinal)
|
||||
: FieldGeneratorBase(descriptor, fieldOrdinal) {
|
||||
const FieldDescriptor* descriptor, int fieldOrdinal, const Options *options)
|
||||
: FieldGeneratorBase(descriptor, fieldOrdinal, options) {
|
||||
}
|
||||
|
||||
RepeatedMessageFieldGenerator::~RepeatedMessageFieldGenerator() {
|
||||
@ -66,10 +66,10 @@ void RepeatedMessageFieldGenerator::GenerateMembers(io::Printer* printer) {
|
||||
// "create single field generator for this repeated field"
|
||||
// function, but it doesn't seem worth it for just this.
|
||||
if (IsWrapperType(descriptor_)) {
|
||||
scoped_ptr<FieldGeneratorBase> single_generator(new WrapperFieldGenerator(descriptor_, fieldOrdinal_));
|
||||
scoped_ptr<FieldGeneratorBase> single_generator(new WrapperFieldGenerator(descriptor_, fieldOrdinal_, this->options()));
|
||||
single_generator->GenerateCodecCode(printer);
|
||||
} else {
|
||||
scoped_ptr<FieldGeneratorBase> single_generator(new MessageFieldGenerator(descriptor_, fieldOrdinal_));
|
||||
scoped_ptr<FieldGeneratorBase> single_generator(new MessageFieldGenerator(descriptor_, fieldOrdinal_, this->options()));
|
||||
single_generator->GenerateCodecCode(printer);
|
||||
}
|
||||
printer->Print(";\n");
|
||||
|
@ -41,9 +41,11 @@ namespace protobuf {
|
||||
namespace compiler {
|
||||
namespace csharp {
|
||||
|
||||
struct Options;
|
||||
|
||||
class RepeatedMessageFieldGenerator : public FieldGeneratorBase {
|
||||
public:
|
||||
RepeatedMessageFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal);
|
||||
RepeatedMessageFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal, const Options *options);
|
||||
~RepeatedMessageFieldGenerator();
|
||||
|
||||
virtual void GenerateCloningCode(io::Printer* printer);
|
||||
|
@ -48,8 +48,8 @@ namespace compiler {
|
||||
namespace csharp {
|
||||
|
||||
RepeatedPrimitiveFieldGenerator::RepeatedPrimitiveFieldGenerator(
|
||||
const FieldDescriptor* descriptor, int fieldOrdinal)
|
||||
: FieldGeneratorBase(descriptor, fieldOrdinal) {
|
||||
const FieldDescriptor* descriptor, int fieldOrdinal, const Options *options)
|
||||
: FieldGeneratorBase(descriptor, fieldOrdinal, options) {
|
||||
}
|
||||
|
||||
RepeatedPrimitiveFieldGenerator::~RepeatedPrimitiveFieldGenerator() {
|
||||
|
@ -43,7 +43,7 @@ namespace csharp {
|
||||
|
||||
class RepeatedPrimitiveFieldGenerator : public FieldGeneratorBase {
|
||||
public:
|
||||
RepeatedPrimitiveFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal);
|
||||
RepeatedPrimitiveFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal, const Options *options);
|
||||
~RepeatedPrimitiveFieldGenerator();
|
||||
|
||||
virtual void GenerateCloningCode(io::Printer* printer);
|
||||
|
@ -39,14 +39,16 @@
|
||||
|
||||
#include <google/protobuf/compiler/csharp/csharp_source_generator_base.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_helpers.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_names.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_options.h>
|
||||
|
||||
namespace google {
|
||||
namespace protobuf {
|
||||
namespace compiler {
|
||||
namespace csharp {
|
||||
|
||||
SourceGeneratorBase::SourceGeneratorBase(const FileDescriptor* descriptor)
|
||||
: descriptor_(descriptor) {
|
||||
SourceGeneratorBase::SourceGeneratorBase(const FileDescriptor* descriptor, const Options *options)
|
||||
: descriptor_(descriptor), options_(options) {
|
||||
}
|
||||
|
||||
SourceGeneratorBase::~SourceGeneratorBase() {
|
||||
@ -60,6 +62,10 @@ std::string SourceGeneratorBase::class_access_level() {
|
||||
return IsDescriptorProto(descriptor_) ? "internal" : "public"; // public_classes is always on.
|
||||
}
|
||||
|
||||
const Options* SourceGeneratorBase::options() {
|
||||
return this->options_;
|
||||
}
|
||||
|
||||
} // namespace csharp
|
||||
} // namespace compiler
|
||||
} // namespace protobuf
|
||||
|
@ -40,17 +40,21 @@ namespace protobuf {
|
||||
namespace compiler {
|
||||
namespace csharp {
|
||||
|
||||
struct Options;
|
||||
|
||||
class SourceGeneratorBase {
|
||||
protected:
|
||||
SourceGeneratorBase(const FileDescriptor* descriptor);
|
||||
SourceGeneratorBase(const FileDescriptor* descriptor, const Options* options);
|
||||
virtual ~SourceGeneratorBase();
|
||||
|
||||
std::string class_access_level();
|
||||
const Options* options();
|
||||
|
||||
void WriteGeneratedCodeAttributes(io::Printer* printer);
|
||||
|
||||
private:
|
||||
const FileDescriptor* descriptor_;
|
||||
const Options *options_;
|
||||
|
||||
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(SourceGeneratorBase);
|
||||
};
|
||||
|
@ -39,6 +39,7 @@
|
||||
|
||||
#include <google/protobuf/compiler/csharp/csharp_doc_comment.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_helpers.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_options.h>
|
||||
#include <google/protobuf/compiler/csharp/csharp_wrapper_field.h>
|
||||
|
||||
namespace google {
|
||||
@ -47,8 +48,8 @@ namespace compiler {
|
||||
namespace csharp {
|
||||
|
||||
WrapperFieldGenerator::WrapperFieldGenerator(const FieldDescriptor* descriptor,
|
||||
int fieldOrdinal)
|
||||
: FieldGeneratorBase(descriptor, fieldOrdinal) {
|
||||
int fieldOrdinal, const Options *options)
|
||||
: FieldGeneratorBase(descriptor, fieldOrdinal, options) {
|
||||
variables_["has_property_check"] = name() + "_ != null";
|
||||
variables_["has_not_property_check"] = name() + "_ == null";
|
||||
const FieldDescriptor* wrapped_field = descriptor->message_type()->field(0);
|
||||
@ -152,8 +153,8 @@ void WrapperFieldGenerator::GenerateCodecCode(io::Printer* printer) {
|
||||
}
|
||||
|
||||
WrapperOneofFieldGenerator::WrapperOneofFieldGenerator(const FieldDescriptor* descriptor,
|
||||
int fieldOrdinal)
|
||||
: WrapperFieldGenerator(descriptor, fieldOrdinal) {
|
||||
int fieldOrdinal, const Options *options)
|
||||
: WrapperFieldGenerator(descriptor, fieldOrdinal, options) {
|
||||
SetCommonOneofFieldVariables(&variables_);
|
||||
}
|
||||
|
||||
|
@ -41,9 +41,11 @@ namespace protobuf {
|
||||
namespace compiler {
|
||||
namespace csharp {
|
||||
|
||||
struct Options;
|
||||
|
||||
class WrapperFieldGenerator : public FieldGeneratorBase {
|
||||
public:
|
||||
WrapperFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal);
|
||||
WrapperFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal, const Options *options);
|
||||
~WrapperFieldGenerator();
|
||||
|
||||
virtual void GenerateCodecCode(io::Printer* printer);
|
||||
@ -65,7 +67,7 @@ class WrapperFieldGenerator : public FieldGeneratorBase {
|
||||
|
||||
class WrapperOneofFieldGenerator : public WrapperFieldGenerator {
|
||||
public:
|
||||
WrapperOneofFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal);
|
||||
WrapperOneofFieldGenerator(const FieldDescriptor* descriptor, int fieldOrdinal, const Options *options);
|
||||
~WrapperOneofFieldGenerator();
|
||||
|
||||
virtual void GenerateMembers(io::Printer* printer);
|
||||
|
Loading…
Reference in New Issue
Block a user