Skip to content

Commit

Permalink
Allow importing project that contains existing project directory
Browse files Browse the repository at this point in the history
  • Loading branch information
brian-mcnamara committed Aug 7, 2023
1 parent 47cb690 commit 5e5e3ce
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,11 @@
import com.google.idea.blaze.base.wizard2.WorkspaceTypeData;
import com.google.idea.sdkcompat.general.BaseSdkCompat;
import com.intellij.ide.SaveAndSyncHandler;
import com.intellij.ide.impl.OpenProjectTask;
import com.intellij.ide.impl.ProjectUtil;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.progress.Task;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
import com.intellij.openapi.project.ex.ProjectManagerEx;
Expand Down Expand Up @@ -105,27 +107,36 @@ Project doOpenProject(
@Nullable Project projectToClose,
boolean forceOpenInNewFrame
) {

ProjectManager pm = ProjectManager.getInstance();
if (projectToClose != null) {
pm.closeAndDispose(projectToClose);
try {
return ProgressManager.getInstance().run(new Task.WithResult<Project, Exception>(null, "Importing Project...", true) {
@Override
protected Project compute(@NotNull ProgressIndicator progressIndicator) {
ProjectManager pm = ProjectManager.getInstance();
if (projectToClose != null) {
pm.closeAndDispose(projectToClose);
}

Project newProject = createProject(virtualFile);
Objects.requireNonNull(newProject);

newProject.putUserData(PROJECT_AUTO_IMPORTED, true);

Path projectFilePath = Paths.get(Objects.requireNonNull(newProject.getProjectFilePath()));
ProjectUtil.updateLastProjectLocation(projectFilePath);

ProjectManagerEx.getInstanceEx()
.openProject(
projectFilePath,
BaseSdkCompat.createOpenProjectTask(newProject)
);
SaveAndSyncHandler.getInstance().scheduleProjectSave(newProject);
return newProject;
}
});
} catch (Exception e) {
LOG.error("Unexpected exception thrown while importing project", e);
return null;
}

Project newProject = createProject(virtualFile);
Objects.requireNonNull(newProject);

newProject.putUserData(PROJECT_AUTO_IMPORTED, true);

Path projectFilePath = Paths.get(Objects.requireNonNull(newProject.getProjectFilePath()));
ProjectUtil.updateLastProjectLocation(projectFilePath);

ProjectManagerEx.getInstanceEx()
.openProject(
projectFilePath,
BaseSdkCompat.createOpenProjectTask(newProject)
);
SaveAndSyncHandler.getInstance().scheduleProjectSave(newProject);
return newProject;
}

@Nullable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,10 @@
import com.intellij.openapi.module.ModifiableModuleModel;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ex.ProjectManagerEx;
import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
import java.io.File;
import java.nio.file.Path;
import java.util.List;
import javax.annotation.Nullable;

Expand All @@ -43,4 +46,13 @@ public List<Module> commit(
public BlazeNewProjectBuilder builder() {
return builder;
}

@Override
public @Nullable Project createProject(String name, String path) {
//Allows checked in files to be used. createProject deletes the directory.
if (new File(path, Project.DIRECTORY_STORE_FOLDER).exists()) {
return ProjectManagerEx.getInstanceEx().loadProject(Path.of(path));
}
return super.createProject(name, path);
}
}

0 comments on commit 5e5e3ce

Please sign in to comment.