@Override
  public void execute(ComputationStep.Context context) {
    new DepthTraversalTypeAwareCrawler(
      new TypeAwareVisitorAdapter(CrawlerDepthLimit.PROJECT, PRE_ORDER) {
        @Override
        public void visitProject(Component project) {
          executeForProject(project);
        }
      }).visit(treeRootHolder.getRoot());
  }
@Test
  void new_measures_are_created_even_if_there_is_no_rawMeasure_for_metric_of_condition() {
    Condition equals2Condition = createLessThanCondition(INT_METRIC_1, "2");
    qualityGateHolder.setQualityGate(new QualityGate(SOME_QG_UUID, SOME_QG_NAME, of(equals2Condition)));

    underTest.execute(new TestComputationStepContext());

    Optional<Measure> addedRawMeasure = measureRepository.getAddedRawMeasure(PROJECT_COMPONENT, INT_METRIC_1_KEY);

    assertThat(addedRawMeasure).isAbsent();
    assertThat(getAlertStatusMeasure())
      .hasQualityGateLevel(OK)
      .hasQualityGateText("");
    assertThat(getQGDetailsMeasure())
      .hasValue(new QualityGateDetailsData(OK, Collections.emptyList(), false).toJson());

    QualityGateStatusHolderAssertions.assertThat(qualityGateStatusHolder)
      .hasStatus(QualityGateStatus.OK)
      .hasConditionCount(1)
      .hasCondition(equals2Condition, ConditionStatus.EvaluationStatus.NO_VALUE, null);
  }