[vcs] Call processOpenedProject on checkout only if the new project was really opened

This commit is contained in:
Kirill Likhodedov
2015-07-24 15:27:17 +03:00
parent 1605a78635
commit 97f8dba50a
2 changed files with 22 additions and 24 deletions
@@ -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);
}
});
}
}
@@ -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);
}
});
}
}