mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-10-06 06:21:16 +07:00
properties: recreate RB-editors when property file added to resource bundle IDEA-153377
This commit is contained in:
+16
-1
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.lang.properties;
|
||||
|
||||
import com.intellij.lang.properties.editor.ResourceBundleAsVirtualFile;
|
||||
import com.intellij.lang.properties.psi.PropertiesFile;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.components.PersistentStateComponent;
|
||||
@@ -22,13 +23,13 @@ import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.components.State;
|
||||
import com.intellij.openapi.components.Storage;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.NotNullLazyValue;
|
||||
import com.intellij.openapi.util.NullableComputable;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.SmartList;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -216,6 +217,7 @@ public class ResourceBundleManager implements PersistentStateComponent<ResourceB
|
||||
|
||||
|
||||
public void dissociateResourceBundle(final @NotNull ResourceBundle resourceBundle) {
|
||||
closeResourceBundleEditors(resourceBundle);
|
||||
if (resourceBundle instanceof CustomResourceBundle) {
|
||||
final CustomResourceBundleState state =
|
||||
getCustomResourceBundleState(resourceBundle.getDefaultPropertiesFile().getVirtualFile());
|
||||
@@ -237,6 +239,11 @@ public class ResourceBundleManager implements PersistentStateComponent<ResourceB
|
||||
.add(new CustomResourceBundleState().addAll(ContainerUtil.map(propertiesFiles, file -> file.getVirtualFile().getUrl())).setBaseName(baseName));
|
||||
}
|
||||
|
||||
public ResourceBundle combineToResourceBundleAndGet(final @NotNull List<PropertiesFile> propertiesFiles, final String baseName) {
|
||||
combineToResourceBundle(propertiesFiles, baseName);
|
||||
return propertiesFiles.get(0).getResourceBundle();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public CustomResourceBundle getCustomResourceBundle(final @NotNull PropertiesFile file) {
|
||||
final VirtualFile virtualFile = file.getVirtualFile();
|
||||
@@ -279,4 +286,12 @@ public class ResourceBundleManager implements PersistentStateComponent<ResourceB
|
||||
public void loadState(ResourceBundleManagerState state) {
|
||||
myState = state.removeNonExistentFiles();
|
||||
}
|
||||
|
||||
private static void closeResourceBundleEditors(@NotNull ResourceBundle resourceBundle) {
|
||||
final FileEditorManager fileEditorManager = FileEditorManager.getInstance(resourceBundle.getProject());
|
||||
fileEditorManager.closeFile(new ResourceBundleAsVirtualFile(resourceBundle));
|
||||
for (final PropertiesFile propertiesFile : resourceBundle.getPropertiesFiles()) {
|
||||
fileEditorManager.closeFile(propertiesFile.getVirtualFile());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-2
@@ -79,8 +79,7 @@ public class CombinePropertiesFilesAction extends AnAction {
|
||||
resourceBundleManager.dissociateResourceBundle(resourceBundle);
|
||||
}
|
||||
|
||||
resourceBundleManager.combineToResourceBundle(propertiesFiles, newBaseName);
|
||||
final ResourceBundle resourceBundle = propertiesFiles.get(0).getResourceBundle();
|
||||
final ResourceBundle resourceBundle = resourceBundleManager.combineToResourceBundleAndGet(propertiesFiles, newBaseName);
|
||||
FileEditorManager.getInstance(project).openFile(new ResourceBundleAsVirtualFile(resourceBundle), true);
|
||||
ProjectView.getInstance(project).refresh();
|
||||
}
|
||||
|
||||
-5
@@ -22,12 +22,10 @@ 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;
|
||||
import com.intellij.lang.properties.editor.ResourceBundleAsVirtualFile;
|
||||
import com.intellij.lang.properties.psi.PropertiesFile;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
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;
|
||||
@@ -76,12 +74,9 @@ 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);
|
||||
|
||||
+8
-7
@@ -29,12 +29,9 @@ import com.intellij.ide.projectView.impl.nodes.PsiFileNode;
|
||||
import com.intellij.ide.util.treeView.AbstractTreeNode;
|
||||
import com.intellij.ide.util.treeView.ValidateableNode;
|
||||
import com.intellij.lang.properties.*;
|
||||
import com.intellij.lang.properties.ResourceBundle;
|
||||
import com.intellij.lang.properties.editor.ResourceBundleAsVirtualFile;
|
||||
import com.intellij.lang.properties.editor.ResourceBundleEditor;
|
||||
import com.intellij.lang.properties.psi.PropertiesFile;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.fileEditor.FileEditor;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManager;
|
||||
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
|
||||
import com.intellij.openapi.fileTypes.StdFileTypes;
|
||||
@@ -50,8 +47,10 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.tree.DefaultMutableTreeNode;
|
||||
import javax.swing.tree.TreeNode;
|
||||
import java.util.*;
|
||||
import java.util.stream.Stream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class ResourceBundleNode extends ProjectViewNode<ResourceBundle> implements ValidateableNode, DropTargetNode {
|
||||
public ResourceBundleNode(Project project, ResourceBundle resourceBundle, final ViewSettings settings) {
|
||||
@@ -165,9 +164,11 @@ public class ResourceBundleNode extends ProjectViewNode<ResourceBundle> implemen
|
||||
|
||||
toAddInResourceBundle.addAll(resourceBundle.getPropertiesFiles());
|
||||
final String baseName = resourceBundle.getBaseName();
|
||||
final FileEditorManager fileEditorManager = FileEditorManager.getInstance(getProject());
|
||||
fileEditorManager.closeFile(new ResourceBundleAsVirtualFile(resourceBundle));
|
||||
resourceBundleManager.dissociateResourceBundle(resourceBundle);
|
||||
resourceBundleManager.combineToResourceBundle(toAddInResourceBundle, baseName);
|
||||
|
||||
final ResourceBundle updatedBundle = resourceBundleManager.combineToResourceBundleAndGet(toAddInResourceBundle, baseName);
|
||||
FileEditorManager.getInstance(myProject).openFile(new ResourceBundleAsVirtualFile(updatedBundle), true);
|
||||
ProjectView.getInstance(myProject).refresh();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user