Class ExtensionRegistry (3.19.4)

  public 
  
 class 
 ExtensionRegistry 
  
 extends 
  
 ExtensionRegistryLite 
 

A table of known extensions, searchable by name or field number. When parsing a protocol message that might have extensions, you must provide an ExtensionRegistry in which you have registered any extensions that you want to be able to parse. Otherwise, those extensions will just be treated like unknown fields.

For example, if you had the .proto file:

option java_class = "MyProto";

message Foo { extensions 1000 to max; }

extend Foo { optional int32 bar; }

Then you might write code like:

ExtensionRegistry registry = ExtensionRegistry.newInstance(); registry.add(MyProto.bar); MyProto.Foo message = MyProto.Foo.parseFrom(input, registry);

Background:

You might wonder why this is necessary. Two alternatives might come to mind. First, you might imagine a system where generated extensions are automatically registered when their containing classes are loaded. This is a popular technique, but is bad design; among other things, it creates a situation where behavior can change depending on what classes happen to be loaded. It also introduces a security vulnerability, because an unprivileged class could cause its code to be called unexpectedly from a privileged class by registering itself as an extension of the right type.

Another option you might consider is lazy parsing: do not parse an extension until it is first requested, at which point the caller must provide a type to use. This introduces a different set of problems. First, it would require a mutex lock any time an extension was accessed, which would be slow. Second, corrupt data would not be detected until first access, at which point it would be much harder to deal with it. Third, it could violate the expectation that message objects are immutable, since the type provided could be any arbitrary message class. An unprivileged user could take advantage of this to inject a mutable object into a message belonging to privileged code and create mischief.

Inheritance

java.lang.Object > ExtensionRegistryLite > ExtensionRegistry

Static Methods

getEmptyRegistry()

  public 
  
 static 
  
 ExtensionRegistry 
  
 getEmptyRegistry 
 () 
 

Get the unmodifiable singleton empty instance.

Returns
Type
Description

newInstance()

  public 
  
 static 
  
 ExtensionRegistry 
  
 newInstance 
 () 
 

Construct a new, empty instance.

Returns
Type
Description

Methods

add(Descriptors.FieldDescriptor type)

  public 
  
 void 
  
 add 
 ( 
 Descriptors 
 . 
 FieldDescriptor 
  
 type 
 ) 
 

Add a non-message-type extension to the registry by descriptor.

Parameter
Name
Description

add(Descriptors.FieldDescriptor type, Message defaultInstance)

  public 
  
 void 
  
 add 
 ( 
 Descriptors 
 . 
 FieldDescriptor 
  
 type 
 , 
  
 Message 
  
 defaultInstance 
 ) 
 

Add a message-type extension to the registry by descriptor.

Parameters
Name
Description
defaultInstance

add(Extension<?,?> extension)

  public 
  
 void 
  
 add 
 ( 
 Extension 
< ? 
 , 
 ? 
>  
 extension 
 ) 
 

Add an extension from a generated file to the registry.

Parameter
Name
Description
extension
Extension < ? , ? >

add(GeneratedMessage.GeneratedExtension<?,?> extension)

  public 
  
 void 
  
 add 
 ( 
 GeneratedMessage 
 . 
 GeneratedExtension 
< ? 
 , 
 ? 
>  
 extension 
 ) 
 

Add an extension from a generated file to the registry.

Parameter
Name
Description
extension
GeneratedExtension < ? , ? >

findExtensionByName(String fullName)

  public 
  
 ExtensionRegistry 
 . 
 ExtensionInfo 
  
 findExtensionByName 
 ( 
 String 
  
 fullName 
 ) 
 

Deprecated. Use #findImmutableExtensionByName(String) instead.

Parameter
Name
Description
fullName
Returns
Type
Description

findExtensionByNumber(Descriptors.Descriptor containingType, int fieldNumber)

  public 
  
 ExtensionRegistry 
 . 
 ExtensionInfo 
  
 findExtensionByNumber 
 ( 
 Descriptors 
 . 
 Descriptor 
  
 containingType 
 , 
  
 int 
  
 fieldNumber 
 ) 
 
Parameters
Name
Description
containingType
fieldNumber
int
Returns
Type
Description

findImmutableExtensionByName(String fullName)

  public 
  
 ExtensionRegistry 
 . 
 ExtensionInfo 
  
 findImmutableExtensionByName 
 ( 
 String 
  
 fullName 
 ) 
 

Find an extension for immutable APIs by fully-qualified field name, in the proto namespace. i.e. result.descriptor.fullName() will match fullName if a match is found.

Parameter
Name
Description
fullName
Returns
Type
Description

Information about the extension if found, or null otherwise.

findImmutableExtensionByNumber(Descriptors.Descriptor containingType, int fieldNumber)

  public 
  
 ExtensionRegistry 
 . 
 ExtensionInfo 
  
 findImmutableExtensionByNumber 
 ( 
 Descriptors 
 . 
 Descriptor 
  
 containingType 
 , 
  
 int 
  
 fieldNumber 
 ) 
 

Find an extension by containing type and field number for immutable APIs.

Parameters
Name
Description
containingType
fieldNumber
int
Returns
Type
Description

Information about the extension if found, or null otherwise.

findMutableExtensionByName(String fullName)

  public 
  
 ExtensionRegistry 
 . 
 ExtensionInfo 
  
 findMutableExtensionByName 
 ( 
 String 
  
 fullName 
 ) 
 

Find an extension for mutable APIs by fully-qualified field name, in the proto namespace. i.e. result.descriptor.fullName() will match fullName if a match is found.

Parameter
Name
Description
fullName
Returns
Type
Description

Information about the extension if found, or null otherwise.

findMutableExtensionByNumber(Descriptors.Descriptor containingType, int fieldNumber)

  public 
  
 ExtensionRegistry 
 . 
 ExtensionInfo 
  
 findMutableExtensionByNumber 
 ( 
 Descriptors 
 . 
 Descriptor 
  
 containingType 
 , 
  
 int 
  
 fieldNumber 
 ) 
 

Find an extension by containing type and field number for mutable APIs.

Parameters
Name
Description
containingType
fieldNumber
int
Returns
Type
Description

Information about the extension if found, or null otherwise.

getAllImmutableExtensionsByExtendedType(String fullName)

  public 
  
 Set<ExtensionRegistry 
 . 
 ExtensionInfo 
>  
 getAllImmutableExtensionsByExtendedType 
 ( 
 String 
  
 fullName 
 ) 
 

Find all extensions for immutable APIs by fully-qualified name of extended class. Note that this method is more computationally expensive than getting a single extension by name or number.

Parameter
Name
Description
fullName
Returns
Type
Description

Information about the extensions found, or null if there are none.

getAllMutableExtensionsByExtendedType(String fullName)

  public 
  
 Set<ExtensionRegistry 
 . 
 ExtensionInfo 
>  
 getAllMutableExtensionsByExtendedType 
 ( 
 String 
  
 fullName 
 ) 
 

Find all extensions for mutable APIs by fully-qualified name of extended class. Note that this method is more computationally expensive than getting a single extension by name or number.

Parameter
Name
Description
fullName
Returns
Type
Description

Information about the extensions found, or null if there are none.

getUnmodifiable()

  public 
  
 ExtensionRegistry 
  
 getUnmodifiable 
 () 
 

Returns an unmodifiable view of the registry.

Returns
Type
Description
Overrides
Create a Mobile Website
View Site in Mobile | Classic
Share by: