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( Object containerMessage, Reader reader, Object extension, ExtensionRegistryLite extensionRegistry, FieldSet<T> extensions, UB unknownFields, UnknownFieldSchema<UT, UB> unknownFieldSchema)61 abstract <UT, UB> UB parseExtension( 62 Object containerMessage, 63 Reader reader, 64 Object extension, 65 ExtensionRegistryLite extensionRegistry, 66 FieldSet<T> extensions, 67 UB unknownFields, 68 UnknownFieldSchema<UT, UB> unknownFieldSchema) 69 throws IOException; 70 71 /** Gets the field number of an extension entry. */ extensionNumber(Map.Entry<?, ?> extension)72 abstract int extensionNumber(Map.Entry<?, ?> extension); 73 74 /** Serializes one extension entry. */ serializeExtension(Writer writer, Map.Entry<?, ?> extension)75 abstract void serializeExtension(Writer writer, Map.Entry<?, ?> extension) throws IOException; 76 77 /** Finds an extension by field number. */ findExtensionByNumber( ExtensionRegistryLite extensionRegistry, MessageLite defaultInstance, int number)78 abstract Object findExtensionByNumber( 79 ExtensionRegistryLite extensionRegistry, MessageLite defaultInstance, int number); 80 81 /** Parses a length-prefixed MessageSet item from the reader. */ parseLengthPrefixedMessageSetItem( Reader reader, Object extension, ExtensionRegistryLite extensionRegistry, FieldSet<T> extensions)82 abstract void parseLengthPrefixedMessageSetItem( 83 Reader reader, 84 Object extension, 85 ExtensionRegistryLite extensionRegistry, 86 FieldSet<T> extensions) 87 throws IOException; 88 89 /** 90 * Parses the entire content of a {@link ByteString} as one MessageSet item. Unlike {@link 91 * #parseLengthPrefixedMessageSetItem}, there isn't a length-prefix. 92 */ parseMessageSetItem( ByteString data, Object extension, ExtensionRegistryLite extensionRegistry, FieldSet<T> extensions)93 abstract void parseMessageSetItem( 94 ByteString data, 95 Object extension, 96 ExtensionRegistryLite extensionRegistry, 97 FieldSet<T> extensions) 98 throws IOException; 99 } 100