mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
diff: try to guess project in DiffApplication
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user