Source File
extension.go
Belonging Package
google.golang.org/protobuf/internal/impl
// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package impl
import (
)
// ExtensionInfo implements ExtensionType.
//
// This type contains a number of exported fields for legacy compatibility.
// The only non-deprecated use of this type is through the methods of the
// ExtensionType interface.
type ExtensionInfo struct {
// An ExtensionInfo may exist in several stages of initialization.
//
// extensionInfoUninitialized: Some or all of the legacy exported
// fields may be set, but none of the unexported fields have been
// initialized. This is the starting state for an ExtensionInfo
// in legacy generated code.
//
// extensionInfoDescInit: The desc field is set, but other unexported fields
// may not be initialized. Legacy exported fields may or may not be set.
// This is the starting state for an ExtensionInfo in newly generated code.
//
// extensionInfoFullInit: The ExtensionInfo is fully initialized.
// This state is only entered after lazy initialization is complete.
init uint32
mu sync.Mutex
goType reflect.Type
desc extensionTypeDescriptor
conv Converter
info *extensionFieldInfo // for fast-path method implementations
// ExtendedType is a typed nil-pointer to the parent message type that
// is being extended. It is possible for this to be unpopulated in v2
// since the message may no longer implement the MessageV1 interface.
//
// Deprecated: Use the ExtendedType method instead.
ExtendedType protoiface.MessageV1
// ExtensionType is the zero value of the extension type.
//
// For historical reasons, reflect.TypeOf(ExtensionType) and the
// type returned by InterfaceOf may not be identical.
//
// Deprecated: Use InterfaceOf(xt.Zero()) instead.
ExtensionType interface{}
// Field is the field number of the extension.
//
// Deprecated: Use the Descriptor().Number method instead.
Field int32
// Name is the fully qualified name of extension.
//
// Deprecated: Use the Descriptor().FullName method instead.
Name string
// Tag is the protobuf struct tag used in the v1 API.
//
// Deprecated: Do not use.
Tag string
// Filename is the proto filename in which the extension is defined.
//
// Deprecated: Use Descriptor().ParentFile().Path() instead.
Filename string
}
// Stages of initialization: See the ExtensionInfo.init field.
const (
extensionInfoUninitialized = 0
extensionInfoDescInit = 1
extensionInfoFullInit = 2
)
func ( *ExtensionInfo, protoreflect.ExtensionDescriptor, reflect.Type) {
.goType =
.desc = extensionTypeDescriptor{, }
.init = extensionInfoDescInit
}
func ( *ExtensionInfo) () protoreflect.Value {
return .lazyInit().New()
}
func ( *ExtensionInfo) () protoreflect.Value {
return .lazyInit().Zero()
}
func ( *ExtensionInfo) ( interface{}) protoreflect.Value {
return .lazyInit().PBValueOf(reflect.ValueOf())
}
func ( *ExtensionInfo) ( protoreflect.Value) interface{} {
return .lazyInit().GoValueOf().Interface()
}
func ( *ExtensionInfo) ( protoreflect.Value) bool {
return .lazyInit().IsValidPB()
}
func ( *ExtensionInfo) ( interface{}) bool {
return .lazyInit().IsValidGo(reflect.ValueOf())
}
func ( *ExtensionInfo) () protoreflect.ExtensionTypeDescriptor {
if atomic.LoadUint32(&.init) < extensionInfoDescInit {
.lazyInitSlow()
}
return &.desc
}
func ( *ExtensionInfo) () Converter {
if atomic.LoadUint32(&.init) < extensionInfoFullInit {
.lazyInitSlow()
}
return .conv
}
func ( *ExtensionInfo) () {
.mu.Lock()
defer .mu.Unlock()
if .init == extensionInfoFullInit {
return
}
defer atomic.StoreUint32(&.init, extensionInfoFullInit)
if .desc.ExtensionDescriptor == nil {
.initFromLegacy()
}
if !.desc.ExtensionDescriptor.IsPlaceholder() {
if .ExtensionType == nil {
.initToLegacy()
}
.conv = NewConverter(.goType, .desc.ExtensionDescriptor)
.info = makeExtensionFieldInfo(.desc.ExtensionDescriptor)
.info.validation = newValidationInfo(.desc.ExtensionDescriptor, .goType)
}
}
type extensionTypeDescriptor struct {
protoreflect.ExtensionDescriptor
xi *ExtensionInfo
}
func ( *extensionTypeDescriptor) () protoreflect.ExtensionType {
return .xi
}
func ( *extensionTypeDescriptor) () protoreflect.ExtensionDescriptor {
return .ExtensionDescriptor
}
The pages are generated with Golds v0.4.9. (GOOS=linux GOARCH=amd64)