OLD | NEW |
1 // Protocol Buffers - Google's data interchange format | 1 // Protocol Buffers - Google's data interchange format |
2 // Copyright 2008 Google Inc. All rights reserved. | 2 // Copyright 2008 Google Inc. All rights reserved. |
3 // https://developers.google.com/protocol-buffers/ | 3 // https://developers.google.com/protocol-buffers/ |
4 // | 4 // |
5 // Redistribution and use in source and binary forms, with or without | 5 // Redistribution and use in source and binary forms, with or without |
6 // modification, are permitted provided that the following conditions are | 6 // modification, are permitted provided that the following conditions are |
7 // met: | 7 // met: |
8 // | 8 // |
9 // * Redistributions of source code must retain the above copyright | 9 // * Redistributions of source code must retain the above copyright |
10 // notice, this list of conditions and the following disclaimer. | 10 // notice, this list of conditions and the following disclaimer. |
(...skipping 14 matching lines...) Expand all Loading... |
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 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. | 29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
30 | 30 |
31 package com.google.protobuf; | 31 package com.google.protobuf; |
32 | 32 |
33 import com.google.protobuf.Descriptors.Descriptor; | 33 import com.google.protobuf.Descriptors.Descriptor; |
34 import com.google.protobuf.Descriptors.FieldDescriptor; | 34 import com.google.protobuf.Descriptors.FieldDescriptor; |
35 | |
36 import java.util.Collection; | 35 import java.util.Collection; |
37 import java.util.Collections; | 36 import java.util.Collections; |
38 import java.util.HashMap; | 37 import java.util.HashMap; |
39 import java.util.HashSet; | 38 import java.util.HashSet; |
40 import java.util.Map; | 39 import java.util.Map; |
41 import java.util.Set; | 40 import java.util.Set; |
42 | 41 |
43 /** | 42 /** |
44 * A table of known extensions, searchable by name or field number. When | 43 * A table of known extensions, searchable by name or field number. When |
45 * parsing a protocol message that might have extensions, you must provide | 44 * parsing a protocol message that might have extensions, you must provide |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
94 * @author kenton@google.com Kenton Varda | 93 * @author kenton@google.com Kenton Varda |
95 */ | 94 */ |
96 public class ExtensionRegistry extends ExtensionRegistryLite { | 95 public class ExtensionRegistry extends ExtensionRegistryLite { |
97 /** Construct a new, empty instance. */ | 96 /** Construct a new, empty instance. */ |
98 public static ExtensionRegistry newInstance() { | 97 public static ExtensionRegistry newInstance() { |
99 return new ExtensionRegistry(); | 98 return new ExtensionRegistry(); |
100 } | 99 } |
101 | 100 |
102 /** Get the unmodifiable singleton empty instance. */ | 101 /** Get the unmodifiable singleton empty instance. */ |
103 public static ExtensionRegistry getEmptyRegistry() { | 102 public static ExtensionRegistry getEmptyRegistry() { |
104 return EMPTY; | 103 return EMPTY_REGISTRY; |
105 } | 104 } |
106 | 105 |
107 | 106 |
108 /** Returns an unmodifiable view of the registry. */ | 107 /** Returns an unmodifiable view of the registry. */ |
109 @Override | 108 @Override |
110 public ExtensionRegistry getUnmodifiable() { | 109 public ExtensionRegistry getUnmodifiable() { |
111 return new ExtensionRegistry(this); | 110 return new ExtensionRegistry(this); |
112 } | 111 } |
113 | 112 |
114 /** A (Descriptor, Message) pair, returned by lookup methods. */ | 113 /** A (Descriptor, Message) pair, returned by lookup methods. */ |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 /** Add an extension from a generated file to the registry. */ | 235 /** Add an extension from a generated file to the registry. */ |
237 public void add(final Extension<?, ?> extension) { | 236 public void add(final Extension<?, ?> extension) { |
238 if (extension.getExtensionType() != Extension.ExtensionType.IMMUTABLE && | 237 if (extension.getExtensionType() != Extension.ExtensionType.IMMUTABLE && |
239 extension.getExtensionType() != Extension.ExtensionType.MUTABLE) { | 238 extension.getExtensionType() != Extension.ExtensionType.MUTABLE) { |
240 // do not support other extension types. ignore | 239 // do not support other extension types. ignore |
241 return; | 240 return; |
242 } | 241 } |
243 add(newExtensionInfo(extension), extension.getExtensionType()); | 242 add(newExtensionInfo(extension), extension.getExtensionType()); |
244 } | 243 } |
245 | 244 |
| 245 /** Add an extension from a generated file to the registry. */ |
| 246 public void add(final GeneratedMessage.GeneratedExtension<?, ?> extension) { |
| 247 add((Extension<?, ?>) extension); |
| 248 } |
| 249 |
246 static ExtensionInfo newExtensionInfo(final Extension<?, ?> extension) { | 250 static ExtensionInfo newExtensionInfo(final Extension<?, ?> extension) { |
247 if (extension.getDescriptor().getJavaType() == | 251 if (extension.getDescriptor().getJavaType() == |
248 FieldDescriptor.JavaType.MESSAGE) { | 252 FieldDescriptor.JavaType.MESSAGE) { |
249 if (extension.getMessageDefaultInstance() == null) { | 253 if (extension.getMessageDefaultInstance() == null) { |
250 throw new IllegalStateException( | 254 throw new IllegalStateException( |
251 "Registered message-type extension had null default instance: " + | 255 "Registered message-type extension had null default instance: " + |
252 extension.getDescriptor().getFullName()); | 256 extension.getDescriptor().getFullName()); |
253 } | 257 } |
254 return new ExtensionInfo(extension.getDescriptor(), | 258 return new ExtensionInfo(extension.getDescriptor(), |
255 (Message) extension.getMessageDefaultInstance()); | 259 (Message) extension.getMessageDefaultInstance()); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 this.mutableExtensionsByNumber = | 308 this.mutableExtensionsByNumber = |
305 Collections.unmodifiableMap(other.mutableExtensionsByNumber); | 309 Collections.unmodifiableMap(other.mutableExtensionsByNumber); |
306 } | 310 } |
307 | 311 |
308 private final Map<String, ExtensionInfo> immutableExtensionsByName; | 312 private final Map<String, ExtensionInfo> immutableExtensionsByName; |
309 private final Map<String, ExtensionInfo> mutableExtensionsByName; | 313 private final Map<String, ExtensionInfo> mutableExtensionsByName; |
310 private final Map<DescriptorIntPair, ExtensionInfo> immutableExtensionsByNumbe
r; | 314 private final Map<DescriptorIntPair, ExtensionInfo> immutableExtensionsByNumbe
r; |
311 private final Map<DescriptorIntPair, ExtensionInfo> mutableExtensionsByNumber; | 315 private final Map<DescriptorIntPair, ExtensionInfo> mutableExtensionsByNumber; |
312 | 316 |
313 ExtensionRegistry(boolean empty) { | 317 ExtensionRegistry(boolean empty) { |
314 super(ExtensionRegistryLite.getEmptyRegistry()); | 318 super(EMPTY_REGISTRY_LITE); |
315 this.immutableExtensionsByName = | 319 this.immutableExtensionsByName = |
316 Collections.<String, ExtensionInfo>emptyMap(); | 320 Collections.<String, ExtensionInfo>emptyMap(); |
317 this.mutableExtensionsByName = | 321 this.mutableExtensionsByName = |
318 Collections.<String, ExtensionInfo>emptyMap(); | 322 Collections.<String, ExtensionInfo>emptyMap(); |
319 this.immutableExtensionsByNumber = | 323 this.immutableExtensionsByNumber = |
320 Collections.<DescriptorIntPair, ExtensionInfo>emptyMap(); | 324 Collections.<DescriptorIntPair, ExtensionInfo>emptyMap(); |
321 this.mutableExtensionsByNumber = | 325 this.mutableExtensionsByNumber = |
322 Collections.<DescriptorIntPair, ExtensionInfo>emptyMap(); | 326 Collections.<DescriptorIntPair, ExtensionInfo>emptyMap(); |
323 } | 327 } |
324 private static final ExtensionRegistry EMPTY = new ExtensionRegistry(true); | 328 static final ExtensionRegistry EMPTY_REGISTRY = new ExtensionRegistry(true); |
325 | 329 |
326 private void add( | 330 private void add( |
327 final ExtensionInfo extension, | 331 final ExtensionInfo extension, |
328 final Extension.ExtensionType extensionType) { | 332 final Extension.ExtensionType extensionType) { |
329 if (!extension.descriptor.isExtension()) { | 333 if (!extension.descriptor.isExtension()) { |
330 throw new IllegalArgumentException( | 334 throw new IllegalArgumentException( |
331 "ExtensionRegistry.add() was given a FieldDescriptor for a regular " + | 335 "ExtensionRegistry.add() was given a FieldDescriptor for a regular " + |
332 "(non-extension) field."); | 336 "(non-extension) field."); |
333 } | 337 } |
334 | 338 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
383 @Override | 387 @Override |
384 public boolean equals(final Object obj) { | 388 public boolean equals(final Object obj) { |
385 if (!(obj instanceof DescriptorIntPair)) { | 389 if (!(obj instanceof DescriptorIntPair)) { |
386 return false; | 390 return false; |
387 } | 391 } |
388 final DescriptorIntPair other = (DescriptorIntPair)obj; | 392 final DescriptorIntPair other = (DescriptorIntPair)obj; |
389 return descriptor == other.descriptor && number == other.number; | 393 return descriptor == other.descriptor && number == other.number; |
390 } | 394 } |
391 } | 395 } |
392 } | 396 } |
OLD | NEW |