1 // Protocol Buffers - Google's data interchange format 2 // Copyright 2008 Google Inc. All rights reserved. 3 // https://developers.google.com/protocol-buffers/ 4 // 5 // Redistribution and use in source and binary forms, with or without 6 // modification, are permitted provided that the following conditions are 7 // met: 8 // 9 // * Redistributions of source code must retain the above copyright 10 // notice, this list of conditions and the following disclaimer. 11 // * Redistributions in binary form must reproduce the above 12 // copyright notice, this list of conditions and the following disclaimer 13 // in the documentation and/or other materials provided with the 14 // distribution. 15 // * Neither the name of Google Inc. nor the names of its 16 // contributors may be used to endorse or promote products derived from 17 // this software without specific prior written permission. 18 // 19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 31 package com.google.protobuf; 32 33 import java.io.IOException; 34 import java.util.Map; 35 36 abstract class ExtensionSchema<T extends FieldSet.FieldDescriptorLite<T>> { 37 38 /** Returns true for messages that support extensions. */ hasExtensions(MessageLite prototype)39 abstract boolean hasExtensions(MessageLite prototype); 40 41 /** Returns the extension {@link FieldSet} for the message instance. */ getExtensions(Object message)42 abstract FieldSet<T> getExtensions(Object message); 43 44 /** Replaces the extension {@link FieldSet} for the message instance. */ setExtensions(Object message, FieldSet<T> extensions)45 abstract void setExtensions(Object message, FieldSet<T> extensions); 46 47 /** Returns the extension {@link FieldSet} and ensures it's mutable. */ getMutableExtensions(Object message)48 abstract FieldSet<T> getMutableExtensions(Object message); 49 50 /** Marks the extension {@link FieldSet} as immutable. */ makeImmutable(Object message)51 abstract void makeImmutable(Object message); 52 53 /** 54 * Parses an extension. Returns the passed-in unknownFields parameter if no unknown enum value is 55 * found or a modified unknownFields (a new instance if the passed-in unknownFields is null) 56 * containing unknown enum values found while parsing. 57 * 58 * @param <UT> The type used to store unknown fields. It's either UnknownFieldSet in full runtime 59 * or UnknownFieldSetLite in lite runtime. 60 */ parseExtension( Reader reader, Object extension, ExtensionRegistryLite extensionRegistry, FieldSet<T> extensions, UB unknownFields, UnknownFieldSchema<UT, UB> unknownFieldSchema)61 abstract <UT, UB> UB parseExtension( 62 Reader reader, 63 Object extension, 64 ExtensionRegistryLite extensionRegistry, 65 FieldSet<T> extensions, 66 UB unknownFields, 67 UnknownFieldSchema<UT, UB> unknownFieldSchema) 68 throws IOException; 69 70 /** Gets the field number of an extension entry. */ extensionNumber(Map.Entry<?, ?> extension)71 abstract int extensionNumber(Map.Entry<?, ?> extension); 72 73 /** Serializes one extension entry. */ serializeExtension(Writer writer, Map.Entry<?, ?> extension)74 abstract void serializeExtension(Writer writer, Map.Entry<?, ?> extension) throws IOException; 75 76 /** Finds an extension by field number. */ findExtensionByNumber( ExtensionRegistryLite extensionRegistry, MessageLite defaultInstance, int number)77 abstract Object findExtensionByNumber( 78 ExtensionRegistryLite extensionRegistry, MessageLite defaultInstance, int number); 79 80 /** Parses a length-prefixed MessageSet item from the reader. */ parseLengthPrefixedMessageSetItem( Reader reader, Object extension, ExtensionRegistryLite extensionRegistry, FieldSet<T> extensions)81 abstract void parseLengthPrefixedMessageSetItem( 82 Reader reader, 83 Object extension, 84 ExtensionRegistryLite extensionRegistry, 85 FieldSet<T> extensions) 86 throws IOException; 87 88 /** 89 * Parses the entire content of a {@link ByteString} as one MessageSet item. Unlike {@link 90 * #parseLengthPrefixedMessageSetItem}, there isn't a length-prefix. 91 */ parseMessageSetItem( ByteString data, Object extension, ExtensionRegistryLite extensionRegistry, FieldSet<T> extensions)92 abstract void parseMessageSetItem( 93 ByteString data, 94 Object extension, 95 ExtensionRegistryLite extensionRegistry, 96 FieldSet<T> extensions) 97 throws IOException; 98 } 99