#include <google/protobuf/compiler/importer.h>
namespace google::protobuf::compiler
Esse arquivo é a interface pública para o analisador de arquivos .proto.
Turmas neste arquivo | |
---|---|
Uma implementação de DescriptorDatabase que carrega arquivos de uma SourceTree e os analisa. | |
Interface simples para analisar arquivos .proto. | |
Se o importador encontrar problemas ao tentar importar os arquivos proto, ele o informará como um MultiFileError Collector. | |
Interface abstrata que representa uma árvore de diretórios contendo arquivos proto. | |
Uma implementação de SourceTree que carrega arquivos dos locais no disco. |
classe SourceTreeDescriptorDatabase: público do DescriptorDatabase
#include <google/protobuf/compiler/importer.h>
namespace google::protobuf::compiler
Uma implementação de DescriptorDatabase que carrega arquivos de uma SourceTree e os analisa.
Observação: essa classe não é thread-safe, porque mantém uma tabela de locais de código-fonte para relatar erros. No entanto, quando um DescriptorPool encapsula um DescriptorDatabase, ele usa o bloqueio multiplex para garantir que apenas um método do banco de dados seja chamado por vez, mesmo que o DescriptorPool seja usado de várias linhas de execução. Portanto, só há um problema se você criar vários DescriptorPools unindo o mesmo SourceTreeDescriptorDatabase e os usar de várias linhas de execução.
Observação: essa classe não implementa FindFileContainingSymbol() ou FindFileContainingExtension(); elas sempre retornarão false.
Participantes | |
---|---|
| SourceTreeDescriptorDatabase(SourceTree * source_tree) |
| SourceTreeDescriptorDatabase(SourceTree * source_tree, DescriptorDatabase * fallback_database) Se non-NULL, o fallback_database será verificado se um arquivo não existir na source_tree especificada. |
| ~SourceTreeDescriptorDatabase() |
void | RecordErrorsTo(MultiFileErrorCollector * error_collector) Instrui o SourceTreeDescriptorDatabase para informar erros de análise ao MultiFileErrorcollector fornecido. mais... |
DescriptorPool::ErrorCollector * | GetValidationErrorCollector() Recebe um DescriptorPool::Errorcollector que registra erros no MultiFileError Collector especificado com RecordErrorsTo(). mais... |
implementa DescriptorDatabase | |
virtual bool | FindFileByName(const std::string & filename, FileDescriptorProto * output) Encontre um arquivo pelo nome dele. mais… |
virtual bool | FindFileContainingSymbol(const std::string & symbol_name, FileDescriptorProto * output) Encontre o arquivo que declara o nome do símbolo totalmente qualificado. mais… |
virtual bool | FindFileContainingExtension(const std::string & containing_type, int field_number, FileDescriptorProto * output) Encontre o arquivo que define uma extensão que estende o tipo de mensagem informado com o número de campo especificado. mais… |
void SourceTreeDescriptorDatabase::RecordErrorsTo(
MultiFileErrorCollector * error_collector)
MultiFileErrorCollector * error_collector)
Instrui o SourceTreeDescriptorDatabase para informar erros de análise ao MultiFileErrorcollector fornecido.
Precisa ser chamado antes da análise. O error_collector precisa permanecer válido até que esse método seja chamado novamente ou que o SourceTreeDescriptorDatabase seja destruído.
DescriptorPool::ErrorCollector *
SourceTreeDescriptorDatabase::GetValidationErrorCollector()
SourceTreeDescriptorDatabase::GetValidationErrorCollector()
Recebe um DescriptorPool::Errorcollector que registra erros no MultiFileErrorcollector especificado com RecordErrorsTo().
Esse coletor pode determinar os números exatos de linhas e colunas de erros com base nas informações fornecidas a ele pelo DescriptorPool.
virtual bool SourceTreeDescriptorDatabase::FindFileByName(
const std::string & filename,
FileDescriptorProto * output)
const std::string & filename,
FileDescriptorProto * output)
Encontre um arquivo pelo nome dele.
Preenche *na saída e retorna verdadeiro se encontrado. Caso contrário, retorna "false", deixando o conteúdo da *saída indefinida.
virtual bool SourceTreeDescriptorDatabase::FindFileContainingSymbol(
const std::string & symbol_name,
FileDescriptorProto * output)
const std::string & symbol_name,
FileDescriptorProto * output)
Encontre o arquivo que declara o nome do símbolo totalmente qualificado.
Se encontrada, preenche a *saída e retorna "true". Caso contrário, retorna "false" e deixa *output indefinida.
virtual bool SourceTreeDescriptorDatabase::FindFileContainingExtension(
const std::string & containing_type,
int field_number,
FileDescriptorProto * output)
const std::string & containing_type,
int field_number,
FileDescriptorProto * output)
Encontre o arquivo que define uma extensão que estende o tipo de mensagem informado com o número de campo especificado.
Se encontrada, preenche *output e retorna true. Caso contrário, retorna false e deixa *output indefinida. container_type deve ser um nome de tipo totalmente qualificado.
classe Importer
#include <google/protobuf/compiler/importer.h>
namespace google::protobuf::compiler
Interface simples para analisar arquivos .proto.
Isso envolve o processo de abrir o arquivo, analisá-lo com um analisador, analisar todas as importações recursivamente e depois vincular os resultados para produzir um FileDescriptor.
Isso é apenas um wrapper fino em torno de SourceTreeDescriptorDatabase. O SourceTreeDescriptorDatabase é mais flexível.
TODO(kenton): Acho que essa classe não tem um bom nome.
Participantes | |
---|---|
| Importer(SourceTree * source_tree, MultiFileErrorCollector * error_collector) |
| ~Importer() |
const FileDescriptor * | Import(const std::string & filename) Importe o arquivo fornecido e crie um FileDescriptor que o represente. mais... |
const DescriptorPool * | pool() const O DescriptorPool em que todos os FileDescriptors importados e o conteúdo são armazenados. |
void | AddUnusedImportTrackFile(const std::string & file_name, bool is_error = false) |
void | ClearUnusedImportTrackFiles() |
const FileDescriptor *
Importer::Import(
const std::string & filename)
Importer::Import(
const std::string & filename)
Importe o arquivo fornecido e crie um FileDescriptor que o represente.
Se o arquivo já estiver no DescriptorPool, o FileDescriptor existente será retornado. O FileDescriptor é uma propriedade do DescriptorPool e permanecerá válido até ser destruído. Se ocorrer algum erro, ele será informado ao coletor de erros, e Import() retornará NULL.
Um objeto Importador específico só informará erros de um arquivo específico. Todas as tentativas futuras de importar o mesmo arquivo retornarão NULL sem relatar erros. A ideia é importar muitos arquivos sem ver os mesmos erros várias vezes. Se você quiser ver erros dos mesmos arquivos repetidamente, use um objeto Importer separado para importar cada um, mas use o mesmo DescriptorPool para que eles possam ser vinculados.
classe MultiFileError Collector
#include <google/protobuf/compiler/importer.h>
namespace google::protobuf::compiler
Se o importador encontrar problemas ao tentar importar os arquivos proto, ele o informará como um MultiFileError Collector.
Participantes | |
---|---|
| MultiFileErrorCollector() |
virtual | ~MultiFileErrorCollector() |
virtual void | AddError(const std::string & filename, int line, int column, const std::string & message) = 0 Os números de linha e coluna são baseados em zero. mais… |
virtual void | AddWarning(const std::string & , int , int , const std::string & ) |
virtual void MultiFileErrorCollector::AddError(
const std::string & filename,
int line,
int column,
const std::string & message) = 0
const std::string & filename,
int line,
int column,
const std::string & message) = 0
Os números de linha e coluna são baseados em zero.
Um número de linha de -1 indica um erro no arquivo inteiro (por exemplo, "não encontrado").
classe SourceTree
#include <google/protobuf/compiler/importer.h>
namespace google::protobuf::compiler
Interface abstrata que representa uma árvore de diretórios contendo arquivos proto.
Usada pela implementação padrão do importador para resolver instruções de importação. A maioria dos usuários provavelmente vai querer usar a implementação DiskSourceTree, abaixo.
Subclasses conhecidas:
Participantes | |
---|---|
| SourceTree() |
virtual | ~SourceTree() |
virtual io::ZeroCopyInputStream * | Open(const std::string & filename) = 0 Abra o arquivo fornecido e retorne um stream que o leia ou NULL se ele não for encontrado. mais… |
virtual std::string | GetLastErrorMessage() |
virtual io::ZeroCopyInputStream *
SourceTree::Open(
const std::string & filename) = 0
SourceTree::Open(
const std::string & filename) = 0
Abra o arquivo fornecido e retorne um stream que o leia ou NULL se ele não for encontrado.
O autor da chamada se torna o proprietário do objeto retornado. O nome do arquivo precisa ser um caminho relativo à raiz da árvore de origem e não pode conter componentes "." ou "..".
virtual std::string SourceTree::GetLastErrorMessage()
Se Open() retornar NULL, chamar esse método imediatamente retornará uma descrição do erro.
As subclasses precisam implementar esse método e retornar um valor significativo para melhorar a geração de relatórios de erros. TODO(xiaofeng): altere para uma função virtual pura.
classe DiskSourceTree: SourceTree pública
#include <google/protobuf/compiler/importer.h>
namespace google::protobuf::compiler
Uma implementação de SourceTree que carrega arquivos dos locais no disco.
Vários mapeamentos podem ser configurados para mapear locais no DiskSourceTree para locais no sistema de arquivos físicos.
Participantes | |
---|---|
enum | DiskFileToVirtualFileResult Tipo de retorno para DiskFileToVirtualFile(). mais... |
| DiskSourceTree() |
| ~DiskSourceTree() |
void | MapPath(const std::string & virtual_path, const std::string & disk_path) |
DiskFileToVirtualFileResult | DiskFileToVirtualFile(const std::string & disk_file, std::string * virtual_file, std::string * shadowing_disk_file) Quando há um caminho para um arquivo no disco, é preciso encontrar um mapeamento de caminho virtual para esse arquivo. mais… |
bool | VirtualFileToDiskFile(const std::string & virtual_file, std::string * disk_file) Com um caminho virtual, encontre o caminho para o arquivo no disco. mais… |
implementa SourceTree | |
virtual io::ZeroCopyInputStream * | Open(const std::string & filename) Abra o arquivo fornecido e retorne um stream que o leia ou NULL se ele não for encontrado. mais… |
virtual std::string | GetLastErrorMessage() |
enum DiskSourceTree::DiskFileToVirtualFileResult {
SUCCESS,
SHADOWED,
CANNOT_OPEN,
NO_MAPPING
}
SUCCESS,
SHADOWED,
CANNOT_OPEN,
NO_MAPPING
}
Tipo de retorno para DiskFileToVirtualFile().
SUCESSO | |
SOLUCIONADO | |
CANNOT_OPEN | |
NENHUM MAPEAMENTO |
void DiskSourceTree::MapPath(
const std::string & virtual_path,
const std::string & disk_path)
const std::string & virtual_path,
const std::string & disk_path)
Mapeie um caminho no disco para um local na SourceTree.
O caminho pode ser um arquivo ou um diretório. Se for um diretório, toda a árvore abaixo dele será mapeada para o local virtual especificado. Para mapear um diretório para a raiz da árvore de origem, transmita uma string vazia para virtual_path.
Se vários caminhos mapeados forem aplicados ao abrir um arquivo, eles serão pesquisados na ordem. Por exemplo, se você fizer o seguinte:
MapPath("bar", "foo/bar"); MapPath("", "baz");
Em seguida, faça o seguinte:
Open("bar/qux");
Primeiro, o DiskSourceTree tentará abrir foo/bar/qux e depois baz/bar/qux, retornando o primeiro que for aberto.
Disco_path pode ser um caminho absoluto ou relativo ao diretório atual, assim como um caminho que você passaria para open().
DiskFileToVirtualFileResult
DiskSourceTree::DiskFileToVirtualFile(
const std::string & disk_file,
std::string * virtual_file,
std::string * shadowing_disk_file)
DiskSourceTree::DiskFileToVirtualFile(
const std::string & disk_file,
std::string * virtual_file,
std::string * shadowing_disk_file)
Quando há um caminho para um arquivo no disco, é preciso encontrar um mapeamento de caminho virtual para esse arquivo.
O primeiro mapeamento criado com MapPath() cujo disco_path contém o nome do arquivo é usado. No entanto, esse caminho virtual pode não ser utilizável para abrir o arquivo fornecido. Os possíveis valores de retorno são:
- SUCCESS: o mapeamento foi encontrado. *virtual_file é preenchido para que chamar Open(*virtual_file) abra o arquivo nomeado comodisk_file.
- SHADOWED: foi encontrado um mapeamento, mas o uso de Open() para abrir este caminho virtual retornará um arquivo diferente. Isso ocorre porque outro mapeamento com precedência maior também corresponde a esse caminho virtual e o mapeia para um arquivo diferente no disco. *virtual_file está preenchido como seria no caso SUCCESS. *shadowing_disk_file é preenchido com o caminho do disco do arquivo que seria aberto se você chamasse Open(*virtual_file).
- CANNOT_OPEN: o mapeamento foi encontrado e não está oculto, mas o arquivo especificado não pode ser aberto. Quando esse valor é retornado, errno indica por que o arquivo não pode ser aberto. *virtual_file será definido como o caminho virtual como no caso SUCCESS, mesmo que não seja útil.
- NO_MAPPING: indica que não foi encontrado nenhum mapeamento que contenha esse arquivo.
bool DiskSourceTree::VirtualFileToDiskFile(
const std::string & virtual_file,
std::string * disk_file)
const std::string & virtual_file,
std::string * disk_file)
Com um caminho virtual, encontre o caminho para o arquivo no disco.
Retorne true e atualize disco_file com o caminho no disco, se o arquivo existir. Retorne "false" e deixe o disco de disco intocado se o arquivo não existir.
virtual io::ZeroCopyInputStream *
DiskSourceTree::Open(
const std::string & filename)
DiskSourceTree::Open(
const std::string & filename)
Abra o arquivo fornecido e retorne um stream que o leia ou NULL se ele não for encontrado.
O autor da chamada se torna o proprietário do objeto retornado. O nome do arquivo precisa ser um caminho relativo à raiz da árvore de origem e não pode conter componentes "." ou "..".
virtual std::string DiskSourceTree::GetLastErrorMessage()
Se Open() retornar NULL, chamar esse método imediatamente retornará uma descrição do erro.
As subclasses precisam implementar esse método e retornar um valor significativo para melhorar a geração de relatórios de erros. TODO(xiaofeng): altere para uma função virtual pura.