@NotNull
 @Override
 public GradleProject resolveProjectInfo(
     @NotNull final GradleTaskId id,
     @NotNull final String projectPath,
     final boolean downloadLibraries)
     throws RemoteException, GradleApiException, IllegalArgumentException, IllegalStateException {
   return myHelper.execute(
       id,
       GradleTaskType.RESOLVE_PROJECT,
       projectPath,
       new Function<ProjectConnection, GradleProject>() {
         @Nullable
         @Override
         public GradleProject fun(ProjectConnection connection) {
           return doResolveProjectInfo(id, projectPath, connection, downloadLibraries);
         }
       });
 }
  @NotNull
  private GradleProject doResolveProjectInfo(
      @NotNull final GradleTaskId id,
      @NotNull String projectPath,
      @NotNull ProjectConnection connection,
      boolean downloadLibraries)
      throws IllegalArgumentException, IllegalStateException {
    ModelBuilder<? extends IdeaProject> modelBuilder =
        myHelper.getModelBuilder(id, connection, downloadLibraries);
    IdeaProject project = modelBuilder.get();
    GradleProject result = populateProject(project, projectPath);

    // We need two different steps ('create' and 'populate') in order to handle module dependencies,
    // i.e. when one module is
    // configured to be dependency for another one, corresponding dependency module object should be
    // available during
    // populating dependent module object.
    Map<String, Pair<GradleModule, IdeaModule>> modules = createModules(project, result);
    populateModules(modules.values(), result);
    myLibraryNamesMixer.mixNames(result.getLibraries());
    return result;
  }
 @NotNull
 @Override
 public Map<GradleTaskType, Set<GradleTaskId>> getTasksInProgress() throws RemoteException {
   return myHelper.getTasksInProgress();
 }
 @Override
 public boolean isTaskInProgress(@NotNull GradleTaskId id) throws RemoteException {
   return myHelper.isTaskInProgress(id);
 }
 @Override
 public void setNotificationListener(@NotNull GradleTaskNotificationListener notificationListener)
     throws RemoteException {
   myHelper.setNotificationListener(notificationListener);
 }
 @Override
 public void setSettings(@NotNull RemoteGradleProcessSettings settings) throws RemoteException {
   myHelper.setSettings(settings);
 }