Package com.google.protobuf
Class Descriptors.FieldDescriptor
java.lang.Object
com.google.protobuf.Descriptors.GenericDescriptor
com.google.protobuf.Descriptors.FieldDescriptor
- All Implemented Interfaces:
FieldSet.FieldDescriptorLite<Descriptors.FieldDescriptor>
,Comparable<Descriptors.FieldDescriptor>
- Enclosing class:
Descriptors
public static final class Descriptors.FieldDescriptor
extends Descriptors.GenericDescriptor
implements Comparable<Descriptors.FieldDescriptor>, FieldSet.FieldDescriptorLite<Descriptors.FieldDescriptor>
Describes a field of a message type.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enum
static enum
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate Descriptors.OneofDescriptor
private Descriptors.Descriptor
private Object
private Descriptors.EnumDescriptor
private final Descriptors.Descriptor
private final Descriptors.FileDescriptor
private final String
private final int
private final boolean
private String
private Descriptors.Descriptor
private static final Descriptors.NumberGetter
<Descriptors.FieldDescriptor> private DescriptorProtos.FieldOptions
private static final WireFormat.FieldType[]
private Descriptors.FieldDescriptor.Type
Fields inherited from class com.google.protobuf.Descriptors.GenericDescriptor
features, parent
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprivate
FieldDescriptor
(DescriptorProtos.FieldDescriptorProto proto, Descriptors.FileDescriptor file, Descriptors.Descriptor parent, int index, boolean isExtension) -
Method Summary
Modifier and TypeMethodDescriptionint
Compare with anotherFieldDescriptor
.private void
Look up and cross-link all field types, etc.private static String
fieldNameToJsonName
(String name) Get the field's containing oneof.Get the field's containing type.Returns the field's default value.For enum fields, gets the field's type.For extensions defined nested within message types, gets the outer type.getFile()
Get theFileDescriptor
containing this descriptor.Get the field's fully-qualified name.int
getIndex()
Get the index of this descriptor within its parent.Get the field's java type.Get the JSON name of this field.For internal use only.For internal use only.For embedded message and group fields, gets the field's type.getName()
Get the field's unqualified name.int
Get the field's number.Get theFieldOptions
, defined indescriptor.proto
.Get the field's containing oneof, only if non-synthetic.getType()
Get the field's declared type.boolean
Returns true if the field had an explicitly-defined default value.(package private) boolean
(package private) boolean
Returns true if this field was syntactically written with "optional" in the .proto file.boolean
Returns true if this field tracks presence, ie.(package private) DescriptorProtos.FeatureSet
internalMergeFrom
(MessageLite.Builder to, MessageLite from) For internal use only.boolean
Is this field an extension?(package private) boolean
Returns true if this field is structured like the synthetic field of a proto2 group.boolean
boolean
Is this field declared optional?boolean
Can this field be packed? That is, is it a repeated primitive field?boolean
isPacked()
Does this field have the[packed = true]
option or is this field packable in proto3 and not explicitly set to unpacked?boolean
Is this field declared repeated?boolean
Is this field declared required?boolean
Determines if the given enum field is treated as closed based on legacy non-conformant behavior.boolean
For internal use only.private void
Seeinvalid reference
FileDescriptor#resolveAllFeatures
private void
toProto()
Convert the descriptor to its protocol message representation.toString()
(package private) void
Methods inherited from class com.google.protobuf.Descriptors.GenericDescriptor
getFeatures, resolveFeatures
-
Field Details
-
NUMBER_GETTER
-
table
-
index
private final int index -
proto
-
options
-
fullName
-
jsonName
-
file
-
extensionScope
-
isProto3Optional
private final boolean isProto3Optional -
type
-
containingType
-
messageType
-
containingOneof
-
enumType
-
defaultValue
-
-
Constructor Details
-
FieldDescriptor
private FieldDescriptor(DescriptorProtos.FieldDescriptorProto proto, Descriptors.FileDescriptor file, Descriptors.Descriptor parent, int index, boolean isExtension) throws Descriptors.DescriptorValidationException
-
-
Method Details
-
getIndex
public int getIndex()Get the index of this descriptor within its parent.- See Also:
-
toProto
Convert the descriptor to its protocol message representation.- Specified by:
toProto
in classDescriptors.GenericDescriptor
-
getName
Get the field's unqualified name.- Specified by:
getName
in classDescriptors.GenericDescriptor
-
getNumber
public int getNumber()Get the field's number.- Specified by:
getNumber
in interfaceFieldSet.FieldDescriptorLite<Descriptors.FieldDescriptor>
-
getFullName
Get the field's fully-qualified name.- Specified by:
getFullName
in classDescriptors.GenericDescriptor
- See Also:
-
getJsonName
Get the JSON name of this field. -
getJavaType
Get the field's java type. This is just for convenience. EveryFieldDescriptorProto.Type
maps to exactly one Java type. -
getLiteJavaType
For internal use only.- Specified by:
getLiteJavaType
in interfaceFieldSet.FieldDescriptorLite<Descriptors.FieldDescriptor>
-
getFile
Get theFileDescriptor
containing this descriptor.- Specified by:
getFile
in classDescriptors.GenericDescriptor
-
getType
Get the field's declared type. -
getLiteType
For internal use only.- Specified by:
getLiteType
in interfaceFieldSet.FieldDescriptorLite<Descriptors.FieldDescriptor>
-
needsUtf8Check
public boolean needsUtf8Check()For internal use only. -
isMapField
public boolean isMapField() -
isRequired
public boolean isRequired()Is this field declared required? -
isOptional
public boolean isOptional()Is this field declared optional? -
isRepeated
public boolean isRepeated()Is this field declared repeated?- Specified by:
isRepeated
in interfaceFieldSet.FieldDescriptorLite<Descriptors.FieldDescriptor>
-
isPacked
public boolean isPacked()Does this field have the[packed = true]
option or is this field packable in proto3 and not explicitly set to unpacked?- Specified by:
isPacked
in interfaceFieldSet.FieldDescriptorLite<Descriptors.FieldDescriptor>
-
isPackable
public boolean isPackable()Can this field be packed? That is, is it a repeated primitive field? -
hasDefaultValue
public boolean hasDefaultValue()Returns true if the field had an explicitly-defined default value. -
getDefaultValue
Returns the field's default value. Valid for all types except for messages and groups. For all other types, the object returned is of the same class that would returned by Message.getField(this). -
getOptions
Get theFieldOptions
, defined indescriptor.proto
. -
isExtension
public boolean isExtension()Is this field an extension? -
getContainingType
Get the field's containing type. For extensions, this is the type being extended, not the location where the extension was defined. SeegetExtensionScope()
. -
getContainingOneof
Get the field's containing oneof. -
getRealContainingOneof
Get the field's containing oneof, only if non-synthetic. -
hasOptionalKeyword
boolean hasOptionalKeyword()Returns true if this field was syntactically written with "optional" in the .proto file. Excludes singular proto3 fields that do not have a label. -
hasPresence
public boolean hasPresence()Returns true if this field tracks presence, ie. does the field distinguish between "unset" and "present with default value."This includes required, optional, and oneof fields. It excludes maps, repeated fields, and singular proto3 fields without "optional".
For fields where hasPresence() == true, the return value of msg.hasField() is semantically meaningful.
-
isGroupLike
boolean isGroupLike()Returns true if this field is structured like the synthetic field of a proto2 group. This allows us to expand our treatment of delimited fields without breaking proto2 files that have been upgraded to editions. -
getExtensionScope
For extensions defined nested within message types, gets the outer type. Not valid for non-extension fields. For example, consider this.proto
file:message Foo { extensions 1000 to max; } extend Foo { optional int32 baz = 1234; } message Bar { extend Foo { optional int32 moo = 4321; } }
Bothbaz
's andmoo
's containing type isFoo
. However,baz
's extension scope isnull
whilemoo
's extension scope isBar
. -
getMessageType
For embedded message and group fields, gets the field's type. -
getEnumType
For enum fields, gets the field's type.- Specified by:
getEnumType
in interfaceFieldSet.FieldDescriptorLite<Descriptors.FieldDescriptor>
-
legacyEnumFieldTreatedAsClosed
public boolean legacyEnumFieldTreatedAsClosed()Determines if the given enum field is treated as closed based on legacy non-conformant behavior.Conformant behavior determines closedness based on the enum and can be queried using
EnumDescriptor.isClosed()
.Some runtimes currently have a quirk where non-closed enums are treated as closed when used as the type of fields defined in a `syntax = proto2;` file. This quirk is not present in all runtimes; as of writing, we know that:
- C++, Java, and C++-based Python share this quirk.
- UPB and UPB-based Python do not.
- PHP and Ruby treat all enums as open regardless of declaration.
Care should be taken when using this function to respect the target runtime's enum handling quirks.
-
compareTo
Compare with anotherFieldDescriptor
. This orders fields in "canonical" order, which simply means ascending order by field number.other
must be a field of the same type. That is,getContainingType()
must return the sameDescriptor
for both fields.- Specified by:
compareTo
in interfaceComparable<Descriptors.FieldDescriptor>
- Returns:
- negative, zero, or positive if
this
is less than, equal to, or greater thanother
, respectively
-
toString
-
fieldNameToJsonName
-
resolveAllFeatures
Seeinvalid reference
FileDescriptor#resolveAllFeatures
-
inferLegacyProtoFeatures
DescriptorProtos.FeatureSet inferLegacyProtoFeatures()- Overrides:
inferLegacyProtoFeatures
in classDescriptors.GenericDescriptor
-
hasInferredLegacyProtoFeatures
boolean hasInferredLegacyProtoFeatures()- Overrides:
hasInferredLegacyProtoFeatures
in classDescriptors.GenericDescriptor
-
validateFeatures
- Overrides:
validateFeatures
in classDescriptors.GenericDescriptor
- Throws:
Descriptors.DescriptorValidationException
-
crossLink
Look up and cross-link all field types, etc. -
setProto
private void setProto(DescriptorProtos.FieldDescriptorProto proto) throws Descriptors.DescriptorValidationException -
internalMergeFrom
For internal use only. This is to satisfy the FieldDescriptorLite interface.- Specified by:
internalMergeFrom
in interfaceFieldSet.FieldDescriptorLite<Descriptors.FieldDescriptor>
-