From 4c992eddb71b2128688752ee5723a812b06cb419 Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Tue, 19 Jul 2016 16:20:57 +0300 Subject: [PATCH] properties: recreate RB-editors when property file added to resource bundle IDEA-153377 --- .../lang/properties/ResourceBundleManager.java | 17 ++++++++++++++++- .../editor/ResourceBundleAsVirtualFile.java | 0 .../CombinePropertiesFilesAction.java | 3 +-- .../DissociateResourceBundleAction.java | 5 ----- .../projectView/ResourceBundleNode.java | 15 ++++++++------- 5 files changed, 25 insertions(+), 15 deletions(-) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/editor/ResourceBundleAsVirtualFile.java (100%) diff --git a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java index 5fb32e6cc395..07bcb3ddf507 100644 --- a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java @@ -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 file.getVirtualFile().getUrl())).setBaseName(baseName)); } + public ResourceBundle combineToResourceBundleAndGet(final @NotNull List 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 resourceBundles, final Project project) { - final FileEditorManager fileEditorManager = FileEditorManager.getInstance(project); final Set toUpdateInProjectView = new HashSet(); 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); diff --git a/plugins/properties/src/com/intellij/lang/properties/projectView/ResourceBundleNode.java b/plugins/properties/src/com/intellij/lang/properties/projectView/ResourceBundleNode.java index 900e2b004d99..99fc38426de2 100644 --- a/plugins/properties/src/com/intellij/lang/properties/projectView/ResourceBundleNode.java +++ b/plugins/properties/src/com/intellij/lang/properties/projectView/ResourceBundleNode.java @@ -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 implements ValidateableNode, DropTargetNode { public ResourceBundleNode(Project project, ResourceBundle resourceBundle, final ViewSettings settings) { @@ -165,9 +164,11 @@ public class ResourceBundleNode extends ProjectViewNode 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(); }