code: private void injectDynamically() {
      injectionRequestProcessor.injectMembers();
      stopwatch.resetAndLog("Static member injection");
  
      initializer.injectAll(errors);
      stopwatch.resetAndLog("Instance injection");
      errors.throwCreationExceptionIfErrorsExist();
  
      if (shellBuilder.getStage() != Stage.TOOL) {
        for (InjectorShell shell : shells) {
          loadEagerSingletons(shell.getInjector(), shellBuilder.getStage(), errors);
        }
        stopwatch.resetAndLog("Preloading singletons");
      }
      errors.throwCreationExceptionIfErrorsExist();
    }
docs: Inject everything that can be injected. This method is intentionally not synchronized. If we
  locked while injecting members (ie. running user code), things would deadlock should the user
  code build a just-in-time binding from another thread.