@Override
  public void execute(@NotNull ExecutionEnvironment environment) throws ExecutionException {
    RunProfileState state = environment.getState();
    if (state == null) {
      return;
    }

    Project project = environment.getProject();
    ExecutionManager executionManager = ExecutionManager.getInstance(project);
    RunProfile runProfile = environment.getRunProfile();
    StructuredIdeActivity activity = ProgramRunnerUsageCollector.INSTANCE.startExecute(project, this, runProfile);
    if (runProfile instanceof TargetEnvironmentAwareRunProfile &&
        state instanceof TargetEnvironmentAwareRunProfileState) {
      executionManager.startRunProfileWithPromise(environment, state, (ignored) -> {
        return doExecuteAsync((TargetEnvironmentAwareRunProfileState)state, environment).onSuccess((RunContentDescriptor descr) -> {
          ProgramRunnerUsageCollector.INSTANCE.finishExecute(activity, this, runProfile, true);
        });
      });
    }
    else {
      executionManager.startRunProfile(environment, state, state1 -> {
        return doExecute(state, environment);
      });
      ProgramRunnerUsageCollector.INSTANCE.finishExecute(activity, this, runProfile, false);
    }
  }
@Override
  public void execute(@NotNull ExecutionEnvironment environment)