vendor/google.golang.org/protobuf/internal/filedesc/build.go
changeset 260 445e01aede7e
parent 256 6d9efbef00a9
equal deleted inserted replaced
259:db4911b0c721 260:445e01aede7e
    10 
    10 
    11 import (
    11 import (
    12 	"google.golang.org/protobuf/encoding/protowire"
    12 	"google.golang.org/protobuf/encoding/protowire"
    13 	"google.golang.org/protobuf/internal/genid"
    13 	"google.golang.org/protobuf/internal/genid"
    14 	"google.golang.org/protobuf/reflect/protoreflect"
    14 	"google.golang.org/protobuf/reflect/protoreflect"
    15 	pref "google.golang.org/protobuf/reflect/protoreflect"
    15 	"google.golang.org/protobuf/reflect/protoregistry"
    16 	preg "google.golang.org/protobuf/reflect/protoregistry"
       
    17 )
    16 )
    18 
    17 
    19 // Builder construct a protoreflect.FileDescriptor from the raw descriptor.
    18 // Builder construct a protoreflect.FileDescriptor from the raw descriptor.
    20 type Builder struct {
    19 type Builder struct {
    21 	// GoPackagePath is the Go package path that is invoking this builder.
    20 	// GoPackagePath is the Go package path that is invoking this builder.
    36 	NumServices int32
    35 	NumServices int32
    37 
    36 
    38 	// TypeResolver resolves extension field types for descriptor options.
    37 	// TypeResolver resolves extension field types for descriptor options.
    39 	// If nil, it uses protoregistry.GlobalTypes.
    38 	// If nil, it uses protoregistry.GlobalTypes.
    40 	TypeResolver interface {
    39 	TypeResolver interface {
    41 		preg.ExtensionTypeResolver
    40 		protoregistry.ExtensionTypeResolver
    42 	}
    41 	}
    43 
    42 
    44 	// FileRegistry is use to lookup file, enum, and message dependencies.
    43 	// FileRegistry is use to lookup file, enum, and message dependencies.
    45 	// Once constructed, the file descriptor is registered here.
    44 	// Once constructed, the file descriptor is registered here.
    46 	// If nil, it uses protoregistry.GlobalFiles.
    45 	// If nil, it uses protoregistry.GlobalFiles.
    47 	FileRegistry interface {
    46 	FileRegistry interface {
    48 		FindFileByPath(string) (protoreflect.FileDescriptor, error)
    47 		FindFileByPath(string) (protoreflect.FileDescriptor, error)
    49 		FindDescriptorByName(pref.FullName) (pref.Descriptor, error)
    48 		FindDescriptorByName(protoreflect.FullName) (protoreflect.Descriptor, error)
    50 		RegisterFile(pref.FileDescriptor) error
    49 		RegisterFile(protoreflect.FileDescriptor) error
    51 	}
    50 	}
    52 }
    51 }
    53 
    52 
    54 // resolverByIndex is an interface Builder.FileRegistry may implement.
    53 // resolverByIndex is an interface Builder.FileRegistry may implement.
    55 // If so, it permits looking up an enum or message dependency based on the
    54 // If so, it permits looking up an enum or message dependency based on the
    56 // sub-list and element index into filetype.Builder.DependencyIndexes.
    55 // sub-list and element index into filetype.Builder.DependencyIndexes.
    57 type resolverByIndex interface {
    56 type resolverByIndex interface {
    58 	FindEnumByIndex(int32, int32, []Enum, []Message) pref.EnumDescriptor
    57 	FindEnumByIndex(int32, int32, []Enum, []Message) protoreflect.EnumDescriptor
    59 	FindMessageByIndex(int32, int32, []Enum, []Message) pref.MessageDescriptor
    58 	FindMessageByIndex(int32, int32, []Enum, []Message) protoreflect.MessageDescriptor
    60 }
    59 }
    61 
    60 
    62 // Indexes of each sub-list in filetype.Builder.DependencyIndexes.
    61 // Indexes of each sub-list in filetype.Builder.DependencyIndexes.
    63 const (
    62 const (
    64 	listFieldDeps int32 = iota
    63 	listFieldDeps int32 = iota
    68 	listMethOutDeps
    67 	listMethOutDeps
    69 )
    68 )
    70 
    69 
    71 // Out is the output of the Builder.
    70 // Out is the output of the Builder.
    72 type Out struct {
    71 type Out struct {
    73 	File pref.FileDescriptor
    72 	File protoreflect.FileDescriptor
    74 
    73 
    75 	// Enums is all enum descriptors in "flattened ordering".
    74 	// Enums is all enum descriptors in "flattened ordering".
    76 	Enums []Enum
    75 	Enums []Enum
    77 	// Messages is all message descriptors in "flattened ordering".
    76 	// Messages is all message descriptors in "flattened ordering".
    78 	// It includes the implicit message declarations for map entries.
    77 	// It includes the implicit message declarations for map entries.
    95 		db.unmarshalCounts(db.RawDescriptor, true)
    94 		db.unmarshalCounts(db.RawDescriptor, true)
    96 	}
    95 	}
    97 
    96 
    98 	// Initialize resolvers and registries if unpopulated.
    97 	// Initialize resolvers and registries if unpopulated.
    99 	if db.TypeResolver == nil {
    98 	if db.TypeResolver == nil {
   100 		db.TypeResolver = preg.GlobalTypes
    99 		db.TypeResolver = protoregistry.GlobalTypes
   101 	}
   100 	}
   102 	if db.FileRegistry == nil {
   101 	if db.FileRegistry == nil {
   103 		db.FileRegistry = preg.GlobalFiles
   102 		db.FileRegistry = protoregistry.GlobalFiles
   104 	}
   103 	}
   105 
   104 
   106 	fd := newRawFile(db)
   105 	fd := newRawFile(db)
   107 	out.File = fd
   106 	out.File = fd
   108 	out.Enums = fd.allEnums
   107 	out.Enums = fd.allEnums