@Override
  public void configureLevel() {
    add(platform, properties);
    addExtraRootComponents();
    Version apiVersion = MetadataLoader.loadApiVersion(System2.INSTANCE);
    Version sqVersion = MetadataLoader.loadSQVersion(System2.INSTANCE);
    SonarEdition edition = MetadataLoader.loadEdition(System2.INSTANCE);

    add(
      new SonarQubeVersion(sqVersion),
      SonarRuntimeImpl.forSonarQube(apiVersion, SonarQubeSide.SERVER, edition),
      ThreadLocalSettings.class,
      ConfigurationProvider.class,
      LogServerVersion.class,
      ProcessCommandWrapperImpl.class,
      RestartFlagHolderImpl.class,
      UuidFactoryImpl.INSTANCE,
      NetworkUtilsImpl.INSTANCE,
      UrlSettings.class,
      EmbeddedDatabaseFactory.class,
      LogbackHelper.class,
      WebServerProcessLogging.class,
      DefaultDatabase.class,
      MyBatis.class,
      StartMyBatis.class,
      PurgeProfiler.class,
      ServerFileSystemImpl.class,
      TempFolderCleaner.class,
      new TempFolderProvider(),
      System2.INSTANCE,
      Paths2Impl.getInstance(),
      ContainerSupportImpl.class,
      Clock.systemDefaultZone(),

      // user session
      ThreadLocalUserSession.class,
      SystemPasscodeImpl.class,

      // DB
      DBSessionsImpl.class,
      DbClient.class,
      new DaoModule(),

      // Elasticsearch
      WebAuthorizationTypeSupport.class,
      new EsModule(),

      // rules/qprofiles
      RuleIndex.class,

      // issues
      IssueIndex.class,
      IssueIndexSyncProgressChecker.class,

      GlobalLockManagerImpl.class,

      new OkHttpClientProvider(),

      CoreExtensionRepositoryImpl.class,
      CoreExtensionsLoader.class,
      WebCoreExtensionsInstaller.class);
    addAll(CorePropertyDefinitions.all());

    // cluster
    add(DefaultNodeInformation.class);
  }
@Test
  public void no_missing_dependencies_between_components() {
    underTest.configureLevel();

    assertThat(underTest.getContainer().context().getBeanDefinitionNames()).isNotEmpty();
  }