private Injector buildInjector()

in src/main/java/com/googlesource/gerrit/plugins/verifystatus/init/InitPlugin.java [129:173]


  private Injector buildInjector(final Injector parent) {
    List<Module> modules = new ArrayList<>();

    modules.add(
        new LifecycleModule() {
          @Override
          protected void configure() {
            // For bootstrap we need to retrieve the ds type first
            CiDataSourceTypeGuesser guesser =
                parent
                    .createChildInjector(new CiDataSourceModule())
                    .getInstance(Key.get(CiDataSourceTypeGuesser.class));

            // For the ds type we retrieve the underlying implementation
            CiDataSourceType dst =
                parent
                    .createChildInjector(new CiDataSourceModule())
                    .getInstance(
                        Key.get(
                            CiDataSourceType.class, Names.named(guesser.guessDataSourceType())));

            // Bind the type to the retrieved instance
            bind(CiDataSourceType.class).toInstance(dst);
            bind(CiDataSourceProvider.Context.class)
                .toInstance(CiDataSourceProvider.Context.MULTI_USER);
            bind(Key.get(DataSource.class, Names.named("CiDb")))
                .toProvider(CiDataSourceProvider.class)
                .in(SINGLETON);

            listener().to(CiDataSourceProvider.class);
          }
        });

    modules.add(new CiDatabaseModule());

    modules.add(
        new AbstractModule() {
          @Override
          protected void configure() {
            bind(SchemaVersion.class).to(SchemaVersion.C);
          }
        });

    return parent.createChildInjector(modules);
  }