private void performCommand()

in src/main/java/org/jetbrains/jetCheck/Scenario.java [42:98]


  private void performCommand(ImperativeCommand command, GenerationEnvironment data, String indent) {
    command.performCommand(new ImperativeCommand.Environment() {
      @Override
      public void logMessage(@NotNull String message) {
        if (data instanceof GenerativeDataStructure) {
          ((GenerativeDataStructure) data).ensureActiveStructure();
        }

        if (hasEmptyLog()) {
          log.append(COMMANDS);
          logConsumer.accept(COMMANDS);
        }
        String logEntry = indent + message;
        log.append("\n").append(logEntry);
        logConsumer.accept(logEntry);
      }

      @Override
      public <T> T generateValue(@NotNull Generator<T> generator, @Nullable String logMessage) {
        T value = safeGenerate(data, generator);
        if (logMessage != null) {
          logMessage(String.format(logMessage, value));
        }
        return value;
      }

      @Override
      public void executeCommands(IntDistribution count, Generator<? extends ImperativeCommand> cmdGen) {
        innerCommandLists(Generator.listsOf(count, innerCommands(cmdGen)));
      }

      @Override
      public void executeCommands(Generator<? extends ImperativeCommand> cmdGen) {
        innerCommandLists(Generator.nonEmptyLists(innerCommands(cmdGen)));
      }

      private void innerCommandLists(final Generator<List<Object>> listGen) {
        data.generate(Generator.from(new EquivalentGenerator<List<Object>>() {
          @Override
          public List<Object> apply(GenerationEnvironment data) {
            return listGen.getGeneratorFunction().apply(data);
          }
        }));
      }

      @NotNull
      private Generator<Object> innerCommands(Generator<? extends ImperativeCommand> cmdGen) {
        return Generator.from(new EquivalentGenerator<Object>() {
          @Override
          public Object apply(GenerationEnvironment cmdData) {
            performCommand(safeGenerate(cmdData, cmdGen), cmdData, indent + "  ");
            return null;
          }
        });
      }
    });
  }