• 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 /** A factory for message info that is generated into the message itself. */
11 @ExperimentalApi
12 class GeneratedMessageInfoFactory implements MessageInfoFactory {
13 
14   private static final GeneratedMessageInfoFactory instance = new GeneratedMessageInfoFactory();
15 
16   // Disallow construction - it's a singleton.
GeneratedMessageInfoFactory()17   private GeneratedMessageInfoFactory() {}
18 
getInstance()19   public static GeneratedMessageInfoFactory getInstance() {
20     return instance;
21   }
22 
23   @Override
isSupported(Class<?> messageType)24   public boolean isSupported(Class<?> messageType) {
25     return GeneratedMessageLite.class.isAssignableFrom(messageType);
26   }
27 
28   @Override
messageInfoFor(Class<?> messageType)29   public MessageInfo messageInfoFor(Class<?> messageType) {
30     if (!GeneratedMessageLite.class.isAssignableFrom(messageType)) {
31       throw new IllegalArgumentException("Unsupported message type: " + messageType.getName());
32     }
33 
34     try {
35       return (MessageInfo) GeneratedMessageLite.getDefaultInstance(
36           messageType.asSubclass(GeneratedMessageLite.class))
37           .buildMessageInfo();
38     } catch (Exception e) {
39       throw new RuntimeException("Unable to get message info for " + messageType.getName(), e);
40     }
41   }
42 }
43