Index: third_party/protobuf/java/src/main/java/com/google/protobuf/ExtensionRegistry.java |
diff --git a/third_party/protobuf/java/src/main/java/com/google/protobuf/ExtensionRegistry.java b/third_party/protobuf/java/src/main/java/com/google/protobuf/ExtensionRegistry.java |
deleted file mode 100644 |
index d4f6ba9e79d61b993aef4c4ec8d687ad4ca4f8f9..0000000000000000000000000000000000000000 |
--- a/third_party/protobuf/java/src/main/java/com/google/protobuf/ExtensionRegistry.java |
+++ /dev/null |
@@ -1,266 +0,0 @@ |
-// Protocol Buffers - Google's data interchange format |
-// Copyright 2008 Google Inc. All rights reserved. |
-// http://code.google.com/p/protobuf/ |
-// |
-// Redistribution and use in source and binary forms, with or without |
-// modification, are permitted provided that the following conditions are |
-// met: |
-// |
-// * Redistributions of source code must retain the above copyright |
-// notice, this list of conditions and the following disclaimer. |
-// * Redistributions in binary form must reproduce the above |
-// copyright notice, this list of conditions and the following disclaimer |
-// in the documentation and/or other materials provided with the |
-// distribution. |
-// * Neither the name of Google Inc. nor the names of its |
-// contributors may be used to endorse or promote products derived from |
-// this software without specific prior written permission. |
-// |
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
- |
-package com.google.protobuf; |
- |
-import com.google.protobuf.Descriptors.Descriptor; |
-import com.google.protobuf.Descriptors.FieldDescriptor; |
- |
-import java.util.Collections; |
-import java.util.HashMap; |
-import java.util.Map; |
- |
-/** |
- * A table of known extensions, searchable by name or field number. When |
- * parsing a protocol message that might have extensions, you must provide |
- * an {@code 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. |
- * |
- * <p>For example, if you had the {@code .proto} file: |
- * |
- * <pre> |
- * option java_class = "MyProto"; |
- * |
- * message Foo { |
- * extensions 1000 to max; |
- * } |
- * |
- * extend Foo { |
- * optional int32 bar; |
- * } |
- * </pre> |
- * |
- * Then you might write code like: |
- * |
- * <pre> |
- * ExtensionRegistry registry = ExtensionRegistry.newInstance(); |
- * registry.add(MyProto.bar); |
- * MyProto.Foo message = MyProto.Foo.parseFrom(input, registry); |
- * </pre> |
- * |
- * <p>Background: |
- * |
- * <p>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. |
- * |
- * <p>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. |
- * |
- * @author kenton@google.com Kenton Varda |
- */ |
-public final class ExtensionRegistry extends ExtensionRegistryLite { |
- /** Construct a new, empty instance. */ |
- public static ExtensionRegistry newInstance() { |
- return new ExtensionRegistry(); |
- } |
- |
- /** Get the unmodifiable singleton empty instance. */ |
- public static ExtensionRegistry getEmptyRegistry() { |
- return EMPTY; |
- } |
- |
- /** Returns an unmodifiable view of the registry. */ |
- @Override |
- public ExtensionRegistry getUnmodifiable() { |
- return new ExtensionRegistry(this); |
- } |
- |
- /** A (Descriptor, Message) pair, returned by lookup methods. */ |
- public static final class ExtensionInfo { |
- /** The extension's descriptor. */ |
- public final FieldDescriptor descriptor; |
- |
- /** |
- * A default instance of the extension's type, if it has a message type. |
- * Otherwise, {@code null}. |
- */ |
- public final Message defaultInstance; |
- |
- private ExtensionInfo(final FieldDescriptor descriptor) { |
- this.descriptor = descriptor; |
- defaultInstance = null; |
- } |
- private ExtensionInfo(final FieldDescriptor descriptor, |
- final Message defaultInstance) { |
- this.descriptor = descriptor; |
- this.defaultInstance = defaultInstance; |
- } |
- } |
- |
- /** |
- * Find an extension by fully-qualified field name, in the proto namespace. |
- * I.e. {@code result.descriptor.fullName()} will match {@code fullName} if |
- * a match is found. |
- * |
- * @return Information about the extension if found, or {@code null} |
- * otherwise. |
- */ |
- public ExtensionInfo findExtensionByName(final String fullName) { |
- return extensionsByName.get(fullName); |
- } |
- |
- /** |
- * Find an extension by containing type and field number. |
- * |
- * @return Information about the extension if found, or {@code null} |
- * otherwise. |
- */ |
- public ExtensionInfo findExtensionByNumber(final Descriptor containingType, |
- final int fieldNumber) { |
- return extensionsByNumber.get( |
- new DescriptorIntPair(containingType, fieldNumber)); |
- } |
- |
- /** Add an extension from a generated file to the registry. */ |
- public void add(final GeneratedMessage.GeneratedExtension<?, ?> extension) { |
- if (extension.getDescriptor().getJavaType() == |
- FieldDescriptor.JavaType.MESSAGE) { |
- if (extension.getMessageDefaultInstance() == null) { |
- throw new IllegalStateException( |
- "Registered message-type extension had null default instance: " + |
- extension.getDescriptor().getFullName()); |
- } |
- add(new ExtensionInfo(extension.getDescriptor(), |
- extension.getMessageDefaultInstance())); |
- } else { |
- add(new ExtensionInfo(extension.getDescriptor(), null)); |
- } |
- } |
- |
- /** Add a non-message-type extension to the registry by descriptor. */ |
- public void add(final FieldDescriptor type) { |
- if (type.getJavaType() == FieldDescriptor.JavaType.MESSAGE) { |
- throw new IllegalArgumentException( |
- "ExtensionRegistry.add() must be provided a default instance when " + |
- "adding an embedded message extension."); |
- } |
- add(new ExtensionInfo(type, null)); |
- } |
- |
- /** Add a message-type extension to the registry by descriptor. */ |
- public void add(final FieldDescriptor type, final Message defaultInstance) { |
- if (type.getJavaType() != FieldDescriptor.JavaType.MESSAGE) { |
- throw new IllegalArgumentException( |
- "ExtensionRegistry.add() provided a default instance for a " + |
- "non-message extension."); |
- } |
- add(new ExtensionInfo(type, defaultInstance)); |
- } |
- |
- // ================================================================= |
- // Private stuff. |
- |
- private ExtensionRegistry() { |
- this.extensionsByName = new HashMap<String, ExtensionInfo>(); |
- this.extensionsByNumber = new HashMap<DescriptorIntPair, ExtensionInfo>(); |
- } |
- |
- private ExtensionRegistry(ExtensionRegistry other) { |
- super(other); |
- this.extensionsByName = Collections.unmodifiableMap(other.extensionsByName); |
- this.extensionsByNumber = |
- Collections.unmodifiableMap(other.extensionsByNumber); |
- } |
- |
- private final Map<String, ExtensionInfo> extensionsByName; |
- private final Map<DescriptorIntPair, ExtensionInfo> extensionsByNumber; |
- |
- private ExtensionRegistry(boolean empty) { |
- super(ExtensionRegistryLite.getEmptyRegistry()); |
- this.extensionsByName = Collections.<String, ExtensionInfo>emptyMap(); |
- this.extensionsByNumber = |
- Collections.<DescriptorIntPair, ExtensionInfo>emptyMap(); |
- } |
- private static final ExtensionRegistry EMPTY = new ExtensionRegistry(true); |
- |
- private void add(final ExtensionInfo extension) { |
- if (!extension.descriptor.isExtension()) { |
- throw new IllegalArgumentException( |
- "ExtensionRegistry.add() was given a FieldDescriptor for a regular " + |
- "(non-extension) field."); |
- } |
- |
- extensionsByName.put(extension.descriptor.getFullName(), extension); |
- extensionsByNumber.put( |
- new DescriptorIntPair(extension.descriptor.getContainingType(), |
- extension.descriptor.getNumber()), |
- extension); |
- |
- final FieldDescriptor field = extension.descriptor; |
- if (field.getContainingType().getOptions().getMessageSetWireFormat() && |
- field.getType() == FieldDescriptor.Type.MESSAGE && |
- field.isOptional() && |
- field.getExtensionScope() == field.getMessageType()) { |
- // This is an extension of a MessageSet type defined within the extension |
- // type's own scope. For backwards-compatibility, allow it to be looked |
- // up by type name. |
- extensionsByName.put(field.getMessageType().getFullName(), extension); |
- } |
- } |
- |
- /** A (GenericDescriptor, int) pair, used as a map key. */ |
- private static final class DescriptorIntPair { |
- private final Descriptor descriptor; |
- private final int number; |
- |
- DescriptorIntPair(final Descriptor descriptor, final int number) { |
- this.descriptor = descriptor; |
- this.number = number; |
- } |
- |
- @Override |
- public int hashCode() { |
- return descriptor.hashCode() * ((1 << 16) - 1) + number; |
- } |
- @Override |
- public boolean equals(final Object obj) { |
- if (!(obj instanceof DescriptorIntPair)) { |
- return false; |
- } |
- final DescriptorIntPair other = (DescriptorIntPair)obj; |
- return descriptor == other.descriptor && number == other.number; |
- } |
- } |
-} |