diff: try to guess project in DiffApplication

This commit is contained in:
Aleksey Pivovarov
2017-10-11 14:03:30 +03:00
parent 65f4ed841f
commit 4345c5aab6
3 changed files with 27 additions and 7 deletions
@@ -20,19 +20,25 @@ import com.intellij.openapi.application.ApplicationStarterEx;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectLocator;
import com.intellij.openapi.project.ProjectManager;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.wm.WindowManager;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.HashSet;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@SuppressWarnings({"UseOfSystemOutOrSystemErr", "CallToPrintStackTrace"})
public abstract class ApplicationStarterBase extends ApplicationStarterEx {
@@ -151,7 +157,23 @@ public abstract class ApplicationStarterBase extends ApplicationStarterEx {
}
@Nullable
protected Project getProject() {
return null; // TODO: try to guess project
protected static Project guessProject(@NotNull List<VirtualFile> files) {
Set<Project> projects = new HashSet<>();
for (VirtualFile file : files) {
projects.addAll(ProjectLocator.getInstance().getProjectsForFile(file));
}
if (projects.isEmpty()) {
ContainerUtil.addAll(projects, ProjectManager.getInstance().getOpenProjects());
}
if (projects.isEmpty()) return null;
Project activeProject = ContainerUtil.find(projects, project -> {
JFrame frame = WindowManager.getInstance().getFrame(project);
return frame != null && frame.isActive();
});
if (activeProject != null) return activeProject;
return projects.iterator().next();
}
}
@@ -50,10 +50,9 @@ public class DiffApplication extends ApplicationStarterBase {
@Override
public void processCommand(@NotNull String[] args, @Nullable String currentDirectory) throws Exception {
Project project = getProject();
List<String> filePaths = Arrays.asList(args).subList(1, args.length);
List<VirtualFile> files = findFiles(filePaths, currentDirectory);
Project project = guessProject(files);
DiffRequest request;
if (files.size() == 3) {
@@ -52,10 +52,9 @@ public class MergeApplication extends ApplicationStarterBase {
@Override
public void processCommand(@NotNull String[] args, @Nullable String currentDirectory) throws Exception {
Project project = getProject();
List<String> filePaths = Arrays.asList(args).subList(1, args.length);
List<VirtualFile> files = findFiles(filePaths, currentDirectory);
Project project = guessProject(files);
List<VirtualFile> contents = ContainerUtil.list(files.get(0), files.get(2), files.get(1)); // left, base, right
VirtualFile outputFile = files.get(files.size() - 1);