• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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