protected List buildRegistrars()

in chill-java/src/main/java/com/twitter/chill/config/ReflectingInstantiator.java [188:228]


  protected List<? extends IKryoRegistrar> buildRegistrars(String base, boolean isAddDefault)
    throws ConfigurationException {
      List<IKryoRegistrar> builder = new ArrayList<IKryoRegistrar>();

      if (base == null)
          return builder;

      for (String s: base.split(":")) {
          String[] pair = s.split(",");
          try {
              switch (pair.length) {
                  case 1:
                      if(isAddDefault) { throw new ConfigurationException("default serializers require class and serializer: " + base); }
                      builder.add(new ClassRegistrar(Class.forName(pair[0], true, Thread.currentThread().getContextClassLoader())));
                      break;
                  case 2:
                      @SuppressWarnings("unchecked")
                      Class kls = Class.forName(pair[0], true, Thread.currentThread().getContextClassLoader());
                      Class<? extends Serializer> serializerClass = (Class<? extends Serializer>) Class.forName(pair[1],
                            true, Thread.currentThread().getContextClassLoader());
                      if(isAddDefault) {
                        builder.add(new ReflectingDefaultRegistrar(kls, serializerClass));
                      }
                      else {
                        builder.add(new ReflectingRegistrar(kls, serializerClass));
                      }
                      break;
                  default:
                      throw new ConfigurationException(base + " is not well-formed.");
              }
          } catch (ClassNotFoundException e) {
              if (skipMissing) {
                  System.err.println("Could not find serialization or class for " + pair[1]
                           + ". Skipping registration.");
              } else {
                  throw new ConfigurationException(e);
              }
          }
      }
      return builder;
  }