code: private static void registerFactory(Type t, Class<? extends TypeInfoFactory> factory) {
  		Preconditions.checkNotNull(t, "Type parameter must not be null.");
  		Preconditions.checkNotNull(factory, "Factory parameter must not be null.");
  
  		if (!TypeInfoFactory.class.isAssignableFrom(factory)) {
  			throw new IllegalArgumentException("Class is not a TypeInfoFactory.");
  		}
  		if (registeredTypeInfoFactories.containsKey(t)) {
  			throw new InvalidTypesException("A TypeInfoFactory for type '" + t + "' is already registered.");
  		}
  		registeredTypeInfoFactories.put(t, factory);
  	}
docs: Registers a type information factory globally for a certain type. Every following type extraction
  operation will use the provided factory for this type. The factory will have highest precedence
  for this type. In a hierarchy of types the registered factory has higher precedence than annotations
  at the same level but lower precedence than factories defined down the hierarchy.
  
  @param t type for which a new factory is registered
  @param factory type information factory that will produce {@link TypeInformation}