mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[vcs] Call processOpenedProject on checkout only if the new project was really opened
This commit is contained in:
+21
-4
@@ -19,8 +19,15 @@ import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectManager;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.vcs.CheckoutProvider;
|
||||
import com.intellij.openapi.vcs.VcsKey;
|
||||
import com.intellij.openapi.vfs.VfsUtilCore;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
@@ -64,11 +71,10 @@ public class CompositeCheckoutListener implements CheckoutProvider.Listener {
|
||||
}
|
||||
}
|
||||
|
||||
final Project[] openProjects = ProjectManager.getInstance().getOpenProjects();
|
||||
if (openProjects.length > 0){
|
||||
final Project lastOpenedProject = openProjects[openProjects.length - 1];
|
||||
Project project = findProjectByBaseDirLocation(directory);
|
||||
if (project != null) {
|
||||
for (CheckoutListener listener: listeners) {
|
||||
listener.processOpenedProject(lastOpenedProject);
|
||||
listener.processOpenedProject(project);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -78,4 +84,15 @@ public class CompositeCheckoutListener implements CheckoutProvider.Listener {
|
||||
notifyCheckoutListeners(myFirstDirectory, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
static Project findProjectByBaseDirLocation(@NotNull final File directory) {
|
||||
return ContainerUtil.find(ProjectManager.getInstance().getOpenProjects(), new Condition<Project>() {
|
||||
@Override
|
||||
public boolean value(Project project) {
|
||||
VirtualFile baseDir = project.getBaseDir();
|
||||
return baseDir != null && FileUtil.filesEqual(VfsUtilCore.virtualToIoFile(baseDir), directory);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
+1
-20
@@ -16,17 +16,9 @@
|
||||
package com.intellij.openapi.vcs.checkout;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectManager;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.vcs.ProjectLevelVcsManager;
|
||||
import com.intellij.openapi.vcs.VcsDirectoryMapping;
|
||||
import com.intellij.openapi.vcs.VcsKey;
|
||||
import com.intellij.openapi.vfs.VfsUtilCore;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collections;
|
||||
@@ -34,7 +26,7 @@ import java.util.Collections;
|
||||
public class RegisterMappingCheckoutListener implements VcsAwareCheckoutListener {
|
||||
@Override
|
||||
public boolean processCheckedOutDirectory(Project currentProject, File directory, VcsKey vcsKey) {
|
||||
Project project = findProjectByBaseDirLocation(ProjectManager.getInstance().getOpenProjects(), directory);
|
||||
Project project = CompositeCheckoutListener.findProjectByBaseDirLocation(directory);
|
||||
if (project != null) {
|
||||
ProjectLevelVcsManager vcsManager = ProjectLevelVcsManager.getInstance(project);
|
||||
if (!vcsManager.hasAnyMappings()) {
|
||||
@@ -44,15 +36,4 @@ public class RegisterMappingCheckoutListener implements VcsAwareCheckoutListener
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static Project findProjectByBaseDirLocation(@NotNull Project[] projects, @NotNull final File directory) {
|
||||
return ContainerUtil.find(projects, new Condition<Project>() {
|
||||
@Override
|
||||
public boolean value(Project project) {
|
||||
VirtualFile baseDir = project.getBaseDir();
|
||||
return baseDir != null && FileUtil.filesEqual(VfsUtilCore.virtualToIoFile(baseDir), directory);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user