Slow updating of project view while resource bundle dissociation fixed

This commit is contained in:
Dmitry Batkovich
2015-02-22 21:07:51 +03:00
parent d565ab8d2c
commit 3702e69903
2 changed files with 22 additions and 1 deletions
@@ -17,6 +17,7 @@ package com.intellij.lang.properties.customizeActions;
import com.intellij.icons.AllIcons;
import com.intellij.ide.projectView.ProjectView;
import com.intellij.ide.util.treeView.AbstractTreeBuilder;
import com.intellij.lang.properties.PropertiesImplUtil;
import com.intellij.lang.properties.ResourceBundle;
import com.intellij.lang.properties.ResourceBundleManager;
@@ -27,12 +28,15 @@ import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.LangDataKeys;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiFileSystemItem;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.HashSet;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.util.*;
/**
@@ -73,14 +77,22 @@ public class DissociateResourceBundleAction extends AnAction {
public static void dissociate(final Collection<ResourceBundle> resourceBundles, final Project project) {
final FileEditorManager fileEditorManager = FileEditorManager.getInstance(project);
final Set<PsiFileSystemItem> toUpdateInProjectView = new HashSet<PsiFileSystemItem>();
for (ResourceBundle resourceBundle : resourceBundles) {
fileEditorManager.closeFile(new ResourceBundleAsVirtualFile(resourceBundle));
for (final PropertiesFile propertiesFile : resourceBundle.getPropertiesFiles()) {
fileEditorManager.closeFile(propertiesFile.getVirtualFile());
PsiDirectory containingDirectory = propertiesFile.getContainingFile().getContainingDirectory();
if (containingDirectory != null) {
toUpdateInProjectView.add(containingDirectory);
}
}
ResourceBundleManager.getInstance(project).dissociateResourceBundle(resourceBundle);
}
ProjectView.getInstance(project).refresh();
AbstractTreeBuilder treeBuilder = ProjectView.getInstance(project).getCurrentProjectViewPane().getTreeBuilder();
for (PsiFileSystemItem item : toUpdateInProjectView) {
treeBuilder.queueUpdateFrom(item, false);
}
}
@NotNull
@@ -32,6 +32,7 @@ import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
@@ -97,4 +98,12 @@ public class ResourceBundleNode extends ProjectViewNode<ResourceBundle>{
public Comparable getTypeSortKey() {
return new PsiFileNode.ExtensionSortKey(StdFileTypes.PROPERTIES.getDefaultExtension());
}
@Override
public boolean validate() {
if (!super.validate()) {
return false;
}
return Comparing.equal(getValue().getDefaultPropertiesFile().getResourceBundle(), getValue());
}
}