code: private <I> Class<? extends I> handleOneSubType(final Class<I> interf , final Object o) {
      final Class<? extends I> implClass = (Class<? extends I>) o;
      final Set<Class<?>> producersForInterface = findProducersFor(interf);
      final Set<Class<?>> producersForImpl = findProducersFor(implClass);
      //@formatter:off
          if (!producersForInterface.isEmpty() && !producersForImpl.isEmpty()) return interf;
          if (producersForInterface.isEmpty()  && producersForImpl.isEmpty())  return implClass;
          if (producersForImpl.isEmpty())                                      return interf;
          if (producersForInterface.isEmpty())                                 return implClass;
          //@formatter:on
      return null;
    }
docs: ToDo this result could be cached....