OBSERVAÇÃO:este site foi descontinuado. O site será desativado após 31 de janeiro de 2023, e o tráfego será redirecionado para o novo site em https://protobuf.dev. Enquanto isso, as atualizações serão feitas apenas para protobuf.dev.

importer.h

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

#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)

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()

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)

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)

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)

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)

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

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()
Se Open() retornar NULL, chamar esse método imediatamente retornará uma descrição do erro. mais...

virtual io::ZeroCopyInputStream *
    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)
Mapeie um caminho no disco para um local na SourceTree. mais...
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()
Se Open() retornar NULL, chamar esse método imediatamente retornará uma descrição do erro. mais...

enum DiskSourceTree::DiskFileToVirtualFileResult {
  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)

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)

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)

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)

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.