注: このサイトは非推奨になりました。このサイトは 2023 年 1 月 31 日を過ぎると停止され、トラフィックは https://protobuf.dev の新しいサイトにリダイレクトされます。その間、更新は protobuf.dev のみに行われます。

code_generator.h

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

#include <google/protobuf/compiler/code_generator.h>
namespace google::protobuf::compiler

言語固有のコード生成ツールごとに実装される抽象インターフェースを定義します。

このファイルのクラス

特定のプロトコルを特定の言語で実装するコードを生成する、クラスへの抽象インターフェースです。
CodeGenerator は特定のディレクトリに 1 つ以上のファイルを生成します。

ファイルのメンバー

これらの定義はクラスには含まれません。
typedef
GeneratorContext OutputDirectory
GeneratorContext 型は、以前は OutputDirectory という名前でした。その他
void
ParseGeneratorParameter(const std::string & , std::vector< std::pair< std::string, std::string > > * )
一部のコード生成ツールでは、パラメータ引数をカンマで区切られたオプションのリストを保持するものとして扱っています。その他...
std::string
StripProto(const std::string & filename)
ファイル名の末尾から「.proto」または「.protodevel」を削除します。

typedef compiler::OutputDirectory

GeneratorContext 型は、以前は OutputDirectory という名前でした。

この typedef は下位互換性を提供します。


void compiler::ParseGeneratorParameter(
        const std::string & ,
        std::vector< std::pair< std::string, std::string > > * )

一部のコード生成ツールでは、パラメータ引数をカンマで区切られたオプションのリストを保持するものとして扱っています。

このヘルパー関数は、名前と値のペアのカンマ区切りのセットを解析します。例:"foo=bar,baz,qux=corge" はペアに解析する:

("foo", "bar"), ("baz", ""), ("qux", "corge")

CodeCodeGenerator クラス

#include <google/protobuf/compiler/code_generator.h>
namespace google::protobuf::compiler

特定のプロトコルを特定の言語で実装するコードを生成する、クラスへの抽象インターフェースです。

いくつかの言語は、CommandLineInterface を使用してさまざまな言語をサポートするように登録できます。

既知のサブクラス:

メンバー

enum
Feature
plugin.proto と同期する。その他...
CodeGenerator()
virtual
~CodeGenerator()
virtual bool
Generate(const FileDescriptor * file, const std::string & parameter, GeneratorContext * generator_context, std::string * error) const = 0
指定された proto ファイルのコードを生成し、指定された出力ディレクトリに 1 つ以上のファイルを生成します。その他...
virtual bool
GenerateAll(const std::vector< const FileDescriptor * > & files, const std::string & parameter, GeneratorContext * generator_context, std::string * error) const
指定されたすべての proto ファイルのコードを生成します。その他...
virtual uint64_t
GetSupportedFeatures() const
このコード生成ツールがサポートする機能を示すために実装します。その他...
virtual bool
HasGenerateAll() const
現在は使用されていませんが、このクラスはオープンソースの protobuf ライブラリの一部であるため、現在のライブラリの vtables はそのままにしておく必要があります。その他...

enum CodeGenerator::Feature {
  FEATURE_PROTO3_OPTIONAL = = 1
}

plugin.proto と同期する。

FEATURE_PROTO3_省略可

virtual bool CodeGenerator::Generate(
        const FileDescriptor * file,
        const std::string & parameter,
        GeneratorContext * generator_context,
        std::string * error) const = 0

指定された proto ファイルのコードを生成し、指定された出力ディレクトリに 1 つ以上のファイルを生成します。

ジェネレータに渡すパラメータは、コマンドラインで指定できます。これは、ジェネレータ固有のパラメータを渡すために使用されます。パラメータが指定されていない場合は空になります。以下の ParseGeneratorParameter を使用すると、1 つのパラメータ コマンドライン フラグ内で複数のパラメータを指定できます。

成功すると true を返します。それ以外の場合は、*error を問題の説明(「無効なパラメータ」など)に設定し、false を返します。


virtual bool CodeGenerator::GenerateAll(
        const std::vector< const FileDescriptor * > & files,
        const std::string & parameter,
        GeneratorContext * generator_context,
        std::string * error) const

指定されたすべての proto ファイルのコードを生成します。

警告: 正規のコード生成ツールの設計では、入力 .proto ファイルごとに 1 つまたは 2 つの出力ファイルが生成されますが、代替デザインの使用はおすすめしません。

パラメータは、上記の |Generate()| のように、コマンドラインで渡されます。

成功すると true を返します。それ以外の場合は、*error を問題の説明(「無効なパラメータ」など)に設定し、false を返します。


virtual uint64_t CodeGenerator::GetSupportedFeatures() const

このコード生成ツールがサポートする機能を示すために実装します。

これは、plugin.proto の Features 列挙型の特徴のビット和(OR)である必要があります。


virtual bool CodeGenerator::HasGenerateAll() const

現在は使用されていませんが、このクラスはオープンソースの protobuf ライブラリの一部であるため、現在のライブラリの vtables はそのままにしておく必要があります。

protobuf が API の互換性を破る変更を行った場合、メソッドを削除できます。

GeneratorContext クラス

#include <google/protobuf/compiler/code_generator.h>
namespace google::protobuf::compiler

CodeGenerator は特定のディレクトリに 1 つ以上のファイルを生成します。

この抽象インターフェースは、CodeGenerator が書き込みを行うディレクトリと、Generator が実行されるコンテキストに関するその他の情報を表します。

メンバー

GeneratorContext()
virtual
~GeneratorContext()
virtual io::ZeroCopyOutputStream *
Open(const std::string & filename) = 0
指定されたファイルを開いて、存在する場合は切り捨て、ファイルに書き込む ZeroCopyOutputStream を返します。その他...
virtual io::ZeroCopyOutputStream *
OpenForAppend(const std::string & filename)
Open() に似ていますが、存在する場合、出力はファイルに追加されます。
virtual io::ZeroCopyOutputStream *
OpenForInsert(const std::string & filename, const std::string & insertion_point)
特定の挿入ポイントで特定のファイルにコードを挿入する ZeroCopyOutputStream を作成します。その他...
virtual io::ZeroCopyOutputStream *
OpenForInsertWithGeneratedCodeInfo(const std::string & filename, const std::string & insertion_point, const google::protobuf::GeneratedCodeInfo & info)
OpenForInsert に似ていますが、info が空でない場合、filename.pb.meta をオープン(作成)し、必要なシフトを適用して適切な場所に情報を挿入します。その他
virtual void
ListParsedFiles(std::vector< const FileDescriptor * > * output)
この実行でコンパイルされているすべてのファイルの FileDescriptors のベクトルを返します。その他...
virtual void
GetCompilerVersion(Version * version) const
この GeneratorContext に関連付けられているプロトコル コンパイラのバージョン番号を取得します。

virtual io::ZeroCopyOutputStream *
    GeneratorContext::Open(
        const std::string & filename) = 0

指定されたファイルを開いて、存在する場合は切り捨て、ファイルに書き込む ZeroCopyOutputStream を返します。

返されたオブジェクトは呼び出し元が所有します。このメソッドは失敗しません(代わりにダミー ストリームが返されます)。

ファイル名はソースツリーのルートからの相対パスにする必要があります。たとえば、C++ 生成ツールで、「foo/bar.proto」のコードを生成すると、「foo/bar.pb.h」と「foo/bar.pb.cc」というファイルが生成されます。「foo/」はそれらのファイル名に含まれることに留意してください。ファイル名に「.」や「.」のコンポーネントを含めることはできません。


virtual io::ZeroCopyOutputStream *
    GeneratorContext::OpenForInsert(
        const std::string & filename,
        const std::string & insertion_point)

特定の挿入ポイントで特定のファイルにコードを挿入する ZeroCopyOutputStream を作成します。

挿入ポイントの詳細については、plugin.proto(plugin.pb.h)をご覧ください。デフォルトの実装である assert-fails は、下位互換性のためにのみ存在します。

警告: この機能は現在試験運用版であり、変更される可能性があります。


virtual io::ZeroCopyOutputStream *
    GeneratorContext::OpenForInsertWithGeneratedCodeInfo(
        const std::string & filename,
        const std::string & insertion_point,
        const google::protobuf::GeneratedCodeInfo & info)

OpenForInsert に似ていますが、info が空でない場合、filename.pb.meta をオープン(作成)し、必要なシフトを適用して適切な場所に情報を挿入します。

デフォルトの実装では info は無視されます。

警告: この機能は、まもなく削除されます。


virtual void GeneratorContext::ListParsedFiles(
        std::vector< const FileDescriptor * > * output)

この実行でコンパイルされているすべてのファイルの FileDescriptors のベクトルを返します。

Go などの言語では、ファイルをセットとしてコンパイルする場合に、個別ではなくセットとして扱う場合に役立ちます。