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.
| Modifier and Type | Class and Description |
|---|---|
| private static class | ExtensionRegistry.DescriptorIntPair
A (GenericDescriptor, int) pair, used as a map key. |
| public static class | ExtensionRegistry.ExtensionInfo
A (Descriptor, Message) pair, returned by lookup methods. |
| Modifier and Type | Field and Description |
|---|---|
| pack-priv static final ExtensionRegistry | |
| private final Map | |
| private final Map | |
| private final Map | |
| private final Map |
| Access | Constructor and Description |
|---|---|
| private | |
| private | |
| pack-priv |
| Modifier and Type | Method and Description |
|---|---|
| public void | |
| public void | add(final GeneratedMessage.
Add an extension from a generated file to the registry. |
| public void | add(final Descriptors.
Add a non-message-type extension to the registry by descriptor. |
| public void | add(final Descriptors.
Add a message-type extension to the registry by descriptor. |
| private void | |
| public ExtensionRegistry. | |
| public ExtensionRegistry. | findExtensionByNumber(final Descriptors.
Deprecated
Deprecated.
|
| public ExtensionRegistry. | Returns: Information about the extension if found, ornull otherwise.Find an extension for immutable APIs by fully-qualified field name, in the proto namespace. |
| public ExtensionRegistry. | Returns: Information about the extension if found, ornull otherwise.Find an extension by containing type and field number for immutable APIs. |
| public ExtensionRegistry. | Returns: Information about the extension if found, ornull otherwise.Find an extension for mutable APIs by fully-qualified field name, in the proto namespace. |
| public ExtensionRegistry. | Returns: Information about the extension if found, ornull otherwise.Find an extension by containing type and field number for mutable APIs. |
| public Set | Returns: Information about the extensions found, ornull if there are none.Find all extensions for immutable APIs by fully-qualified name of extended class. |
| public Set | Returns: Information about the extensions found, ornull if there are none.Find all extensions for mutable APIs by fully-qualified name of extended class. |
| public static ExtensionRegistry | getEmptyRegistry()
Hides com. |
| public ExtensionRegistry | getUnmodifiable()
Overrides com. |
| pack-priv static ExtensionRegistry. | |
| public static ExtensionRegistry | newInstance()
Hides com. |
| EMPTY_REGISTRY | back to summary |
|---|---|
| pack-priv static final ExtensionRegistry EMPTY_REGISTRY | |
| immutableExtensionsByName | back to summary |
|---|---|
| private final Map<String, ExtensionRegistry. | |
| immutableExtensionsByNumber | back to summary |
|---|---|
| private final Map<ExtensionRegistry. | |
| mutableExtensionsByName | back to summary |
|---|---|
| private final Map<String, ExtensionRegistry. | |
| mutableExtensionsByNumber | back to summary |
|---|---|
| private final Map<ExtensionRegistry. | |
| ExtensionRegistry | back to summary |
|---|---|
| private ExtensionRegistry() | |
| ExtensionRegistry | back to summary |
|---|---|
| private ExtensionRegistry(ExtensionRegistry other) | |
| ExtensionRegistry | back to summary |
|---|---|
| pack-priv ExtensionRegistry(boolean empty) | |
| add | back to summary |
|---|---|
| public void add(final Extension<?, ?> extension) Add an extension from a generated file to the registry. | |
| add | back to summary |
|---|---|
| public void add(final GeneratedMessage. Add an extension from a generated file to the registry. | |
| add | back to summary |
|---|---|
| public void add(final Descriptors. Add a non-message-type extension to the registry by descriptor. | |
| add | back to summary |
|---|---|
| public void add(final Descriptors. Add a message-type extension to the registry by descriptor. | |
| add | back to summary |
|---|---|
| private void add(final ExtensionRegistry. | |
| findExtensionByName | back to summary |
|---|---|
| public ExtensionRegistry. Deprecated
Deprecated. Use
| |
| findExtensionByNumber | back to summary |
|---|---|
| public ExtensionRegistry. Deprecated
Deprecated. Use
| |
| findImmutableExtensionByName | back to summary |
|---|---|
| public ExtensionRegistry. Find an extension for immutable APIs by fully-qualified field name, in the proto namespace.
i.e.
| |
| findImmutableExtensionByNumber | back to summary |
|---|---|
| public ExtensionRegistry. Find an extension by containing type and field number for immutable APIs.
| |
| findMutableExtensionByName | back to summary |
|---|---|
| public ExtensionRegistry. Find an extension for mutable APIs by fully-qualified field name, in the proto namespace. i.e.
| |
| findMutableExtensionByNumber | back to summary |
|---|---|
| public ExtensionRegistry. Find an extension by containing type and field number for mutable APIs.
| |
| getAllImmutableExtensionsByExtendedType | back to summary |
|---|---|
| public Set 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.
| |
| getAllMutableExtensionsByExtendedType | back to summary |
|---|---|
| public Set 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.
| |
| getEmptyRegistry | back to summary |
|---|---|
| public static ExtensionRegistry getEmptyRegistry() Hides com. Get the unmodifiable singleton empty instance. | |
| getUnmodifiable | back to summary |
|---|---|
| public ExtensionRegistry getUnmodifiable() Overrides com. Returns an unmodifiable view of the registry.
| |
| newExtensionInfo | back to summary |
|---|---|
| pack-priv static ExtensionRegistry. | |
| newInstance | back to summary |
|---|---|
| public static ExtensionRegistry newInstance() Hides com. Construct a new, empty instance. | |
| Modifier and Type | Field and Description |
|---|---|
| private final Descriptors. | |
| private final int |
| Access | Constructor and Description |
|---|---|
| pack-priv |
| Modifier and Type | Method and Description |
|---|---|
| public boolean | equals(final Object
the reference object with which to compare. obj)Overrides java. |
| public int |
| descriptor | back to summary |
|---|---|
| private final Descriptors. | |
| number | back to summary |
|---|---|
| private final int number | |
| DescriptorIntPair | back to summary |
|---|---|
| pack-priv DescriptorIntPair(final Descriptors. | |
| equals | back to summary |
|---|---|
| public boolean equals(final Object obj) Overrides java. Doc from java. Indicates whether some other object is "equal to" this one.
The
An equivalence relation partitions the elements it operates on into equivalence classes; all the members of an equivalence class are equal to each other. Members of an equivalence class are substitutable for each other, at least for some purposes. | |
| hashCode | back to summary |
|---|---|
| public int hashCode() Overrides java. Doc from java. Returns a hash code value for the object. This method is
supported for the benefit of hash tables such as those provided by
The general contract of
| |
| Modifier and Type | Field and Description |
|---|---|
| public final Message | defaultInstance
A default instance of the extension's type, if it has a message type. |
| public final Descriptors. | descriptor
The extension's descriptor. |
| Access | Constructor and Description |
|---|---|
| private | |
| private |
| defaultInstance | back to summary |
|---|---|
| public final Message defaultInstance A default instance of the extension's type, if it has a message type. Otherwise, | |
| descriptor | back to summary |
|---|---|
| public final Descriptors. The extension's descriptor. | |
| ExtensionInfo | back to summary |
|---|---|
| private ExtensionInfo(final Descriptors. | |
| ExtensionInfo | back to summary |
|---|---|
| private ExtensionInfo(final Descriptors. | |