summaryrefslogtreecommitdiff
path: root/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleEditor.java
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleEditor.java')
-rw-r--r--plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleEditor.java71
1 files changed, 49 insertions, 22 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