1 // Protocol Buffers - Google's data interchange format 2 // Copyright 2008 Google Inc. All rights reserved. 3 // 4 // Use of this source code is governed by a BSD-style 5 // license that can be found in the LICENSE file or at 6 // https://developers.google.com/open-source/licenses/bsd 7 8 package com.google.protobuf; 9 10 import java.io.IOException; 11 import java.util.Map; 12 13 @CheckReturnValue 14 abstract class ExtensionSchema<T extends FieldSet.FieldDescriptorLite<T>> { 15 16 /** Returns true for messages that support extensions. */ hasExtensions(MessageLite prototype)17 abstract boolean hasExtensions(MessageLite prototype); 18 19 /** Returns the extension {@link FieldSet} for the message instance. */ getExtensions(Object message)20 abstract FieldSet<T> getExtensions(Object message); 21 22 /** Replaces the extension {@link FieldSet} for the message instance. */ setExtensions(Object message, FieldSet<T> extensions)23 abstract void setExtensions(Object message, FieldSet<T> extensions); 24 25 /** Returns the extension {@link FieldSet} and ensures it's mutable. */ getMutableExtensions(Object message)26 abstract FieldSet<T> getMutableExtensions(Object message); 27 28 /** Marks the extension {@link FieldSet} as immutable. */ makeImmutable(Object message)29 abstract void makeImmutable(Object message); 30 31 /** 32 * Parses an extension. Returns the passed-in unknownFields parameter if no unknown enum value is 33 * found or a modified unknownFields (a new instance if the passed-in unknownFields is null) 34 * containing unknown enum values found while parsing. 35 * 36 * @param <UT> The type used to store unknown fields. It's either UnknownFieldSet in full runtime 37 * or UnknownFieldSetLite in lite runtime. 38 */ parseExtension( Object containerMessage, Reader reader, Object extension, ExtensionRegistryLite extensionRegistry, FieldSet<T> extensions, UB unknownFields, UnknownFieldSchema<UT, UB> unknownFieldSchema)39 abstract <UT, UB> UB parseExtension( 40 Object containerMessage, 41 Reader reader, 42 Object extension, 43 ExtensionRegistryLite extensionRegistry, 44 FieldSet<T> extensions, 45 UB unknownFields, 46 UnknownFieldSchema<UT, UB> unknownFieldSchema) 47 throws IOException; 48 49 /** Gets the field number of an extension entry. */ extensionNumber(Map.Entry<?, ?> extension)50 abstract int extensionNumber(Map.Entry<?, ?> extension); 51 52 /** Serializes one extension entry. */ serializeExtension(Writer writer, Map.Entry<?, ?> extension)53 abstract void serializeExtension(Writer writer, Map.Entry<?, ?> extension) throws IOException; 54 55 /** Finds an extension by field number. */ findExtensionByNumber( ExtensionRegistryLite extensionRegistry, MessageLite defaultInstance, int number)56 abstract Object findExtensionByNumber( 57 ExtensionRegistryLite extensionRegistry, MessageLite defaultInstance, int number); 58 59 /** Parses a length-prefixed MessageSet item from the reader. */ parseLengthPrefixedMessageSetItem( Reader reader, Object extension, ExtensionRegistryLite extensionRegistry, FieldSet<T> extensions)60 abstract void parseLengthPrefixedMessageSetItem( 61 Reader reader, 62 Object extension, 63 ExtensionRegistryLite extensionRegistry, 64 FieldSet<T> extensions) 65 throws IOException; 66 67 /** 68 * Parses the entire content of a {@link ByteString} as one MessageSet item. Unlike {@link 69 * #parseLengthPrefixedMessageSetItem}, there isn't a length-prefix. 70 */ parseMessageSetItem( ByteString data, Object extension, ExtensionRegistryLite extensionRegistry, FieldSet<T> extensions)71 abstract void parseMessageSetItem( 72 ByteString data, 73 Object extension, 74 ExtensionRegistryLite extensionRegistry, 75 FieldSet<T> extensions) 76 throws IOException; 77 } 78