diff options
Diffstat (limited to 'plugins/properties/src')
2 files changed, 50 insertions, 32 deletions
diff --git a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleEditor.java b/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleEditor.java index 0176aa38fc6e..e9eb9e9f72d2 100644 --- a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleEditor.java +++ b/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleEditor.java @@ -123,30 +123,40 @@ public class ResourceBundleEditor extends UserDataHolderBase implements FileEdit myStructureViewPanel.add(myStructureViewComponent, BorderLayout.CENTER); myStructureViewComponent.getTree().getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() { - private String selectedPropertyName; + private IProperty selectedProperty; private PropertiesFile selectedPropertiesFile; @Override public void valueChanged(TreeSelectionEvent e) { // filter out temp unselect/select events - if (getSelectedPropertyName() == null) return; - if (!Comparing.strEqual(selectedPropertyName, getSelectedPropertyName()) || + if (getSelectedProperty() == null) return; + if (!arePropertiesEquivalent(selectedProperty, getSelectedProperty()) || !Comparing.equal(selectedPropertiesFile, getSelectedPropertiesFile())) { if (e.getOldLeadSelectionPath() != null) { for (Map.Entry<PropertiesFile, Editor> entry : myEditors.entrySet()) { if (entry.getValue() == mySelectedEditor) { - writeEditorPropertyValue(mySelectedEditor, entry.getKey(), selectedPropertyName); + writeEditorPropertyValue(mySelectedEditor, entry.getKey(), selectedProperty.getName()); break; } } } - selectedPropertyName = getSelectedPropertyName(); + selectedProperty = getSelectedProperty(); selectedPropertiesFile = getSelectedPropertiesFile(); selectionChanged(); } } + + private boolean arePropertiesEquivalent(@Nullable IProperty p1, @Nullable IProperty p2) { + if (p1 == p2) { + return true; + } + if (p1 == null || p2 == null) { + return false; + } + return p1.getPsiElement().isEquivalentTo(p2.getPsiElement()); + } }); installPropertiesChangeListeners(); @@ -233,7 +243,10 @@ public class ResourceBundleEditor extends UserDataHolderBase implements FileEdit DefaultMutableTreeNode nodeToSelect = null; while (!toCheck.isEmpty()) { DefaultMutableTreeNode node = toCheck.pop(); - String value = getNodeValue(node); + final ResourceBundleEditorViewElement element = getSelectedElement(node); + String value = element instanceof ResourceBundlePropertyStructureViewElement + ? ((ResourceBundlePropertyStructureViewElement)element).getValue() + : null; if (propertyName.equals(value)) { nodeToSelect = node; break; @@ -279,13 +292,6 @@ public class ResourceBundleEditor extends UserDataHolderBase implements FileEdit } @Nullable - private static String getNodeValue(@NotNull DefaultMutableTreeNode node) { - final ResourceBundleEditorViewElement element = getSelectedElement(node); - return element instanceof ResourceBundlePropertyStructureViewElement ? ((ResourceBundlePropertyStructureViewElement)element).getValue() - : null; - } - - @Nullable private static ResourceBundleEditorViewElement getSelectedElement(@NotNull DefaultMutableTreeNode node) { Object userObject = node.getUserObject(); if (!(userObject instanceof AbstractTreeNode)) return null; @@ -296,8 +302,9 @@ public class ResourceBundleEditor extends UserDataHolderBase implements FileEdit private void writeEditorPropertyValue(final Editor editor, final PropertiesFile propertiesFile, final @Nullable String propertyName) { final String currentValue = editor.getDocument().getText(); final String currentSelectedProperty = propertyName == null ? getSelectedPropertyName() : propertyName; - - assert currentSelectedProperty != null; + if (currentSelectedProperty == null) { + return; + } ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override @@ -564,21 +571,41 @@ public class ResourceBundleEditor extends UserDataHolderBase implements FileEdit } @Nullable - public String getSelectedPropertyName() { + private DefaultMutableTreeNode getSelectedNode() { JTree tree = myStructureViewComponent.getTree(); if (tree == null) return null; TreePath selected = tree.getSelectionModel().getSelectionPath(); if (selected == null) return null; - return getNodeValue((DefaultMutableTreeNode)selected.getLastPathComponent()); + return (DefaultMutableTreeNode)selected.getLastPathComponent(); + } + + @Nullable + private String getSelectedPropertyName() { + final IProperty selectedProperty = getSelectedProperty(); + return selectedProperty == null ? null : selectedProperty.getName(); + } + + @Nullable + private IProperty getSelectedProperty() { + final DefaultMutableTreeNode selectedNode = getSelectedNode(); + if (selectedNode == null) { + return null; + } + final ResourceBundleEditorViewElement element = getSelectedElement(selectedNode); + return element instanceof ResourceBundlePropertyStructureViewElement ? ((ResourceBundlePropertyStructureViewElement)element).getProperty() + : null; } @Nullable public ResourceBundleEditorViewElement getSelectedElement() { - JTree tree = myStructureViewComponent.getTree(); - if (tree == null) return null; - TreePath selected = tree.getSelectionModel().getSelectionPath(); - if (selected == null) return null; - return getSelectedElement((DefaultMutableTreeNode)selected.getLastPathComponent()); + final DefaultMutableTreeNode selectedNode = getSelectedNode(); + if (selectedNode == null) { + return null; + } + Object userObject = selectedNode.getUserObject(); + if (!(userObject instanceof AbstractTreeNode)) return null; + Object value = ((AbstractTreeNode)userObject).getValue(); + return value instanceof ResourceBundleEditorViewElement ? (ResourceBundleEditorViewElement) value : null; } @Override diff --git a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleStructureViewComponent.java b/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleStructureViewComponent.java index ee8e47a446e4..0985f35a5e12 100644 --- a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleStructureViewComponent.java +++ b/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleStructureViewComponent.java @@ -29,14 +29,11 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiNamedElement; -import com.intellij.psi.util.PsiUtilBase; import com.intellij.psi.util.PsiUtilCore; import com.intellij.refactoring.safeDelete.SafeDeleteHandler; import com.intellij.ui.PopupHandler; import com.intellij.usages.UsageTarget; import com.intellij.usages.UsageView; -import com.intellij.util.Function; -import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import java.awt.datatransfer.StringSelection; @@ -79,13 +76,7 @@ class ResourceBundleStructureViewComponent extends PropertiesGroupingStructureVi } else if (LangDataKeys.PSI_ELEMENT_ARRAY.is(dataId)) { final ResourceBundleEditorViewElement selectedElement = ((ResourceBundleEditor)getFileEditor()).getSelectedElement(); if (selectedElement != null) { - final Project project = CommonDataKeys.PROJECT.getData(this); - if (project != null) { - final PsiElement[] psiElements = selectedElement.getPsiElements(project); - if (psiElements != null) { - return psiElements; - } - } + return selectedElement.getPsiElements(); } } else if (PlatformDataKeys.DELETE_ELEMENT_PROVIDER.is(dataId)) { final PsiElement[] psiElements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(this); |