diff options
| author | Ed Merks | 2014-10-09 13:12:45 +0000 |
|---|---|---|
| committer | Ed Merks | 2014-10-09 13:12:45 +0000 |
| commit | 71bf39ff78489f3163c570c0621d7cf59eee6e13 (patch) | |
| tree | 8a581f770f0cdf792042b2725de9579dd0936ffb | |
| parent | d70220391a28f81141ce7574d4a9dc479ce94359 (diff) | |
| download | org.eclipse.oomph-71bf39ff78489f3163c570c0621d7cf59eee6e13.tar.gz org.eclipse.oomph-71bf39ff78489f3163c570c0621d7cf59eee6e13.tar.xz org.eclipse.oomph-71bf39ff78489f3163c570c0621d7cf59eee6e13.zip | |
[446347] Problems occurred when invoking code from plug-in:
"org.eclipse.equinox.prefe... (err_grp: e7365649)
https://bugs.eclipse.org/bugs/show_bug.cgi?id=446347
| -rw-r--r-- | plugins/org.eclipse.oomph.preferences/src/org/eclipse/oomph/preferences/util/PreferencesUtil.java | 53 |
1 files changed, 32 insertions, 21 deletions
diff --git a/plugins/org.eclipse.oomph.preferences/src/org/eclipse/oomph/preferences/util/PreferencesUtil.java b/plugins/org.eclipse.oomph.preferences/src/org/eclipse/oomph/preferences/util/PreferencesUtil.java index e35988039..87fe357b9 100644 --- a/plugins/org.eclipse.oomph.preferences/src/org/eclipse/oomph/preferences/util/PreferencesUtil.java +++ b/plugins/org.eclipse.oomph.preferences/src/org/eclipse/oomph/preferences/util/PreferencesUtil.java @@ -1091,33 +1091,44 @@ public final class PreferencesUtil { PreferenceNode preferenceNode = (PreferenceNode)target; Resource resource = preferenceNode.eResource(); - ResourceSet resourceSet = resource.getResourceSet(); + if (resource == null) + { + handleAdded(event, preferenceNode); + } + else + { + synchronized (resource) + { + ResourceSet resourceSet = resource.getResourceSet(); + synchronized (resourceSet) + { + handleAdded(event, preferenceNode); + } + } + } + } - synchronized (resource) + private void handleAdded(NodeChangeEvent event, PreferenceNode preferenceNode) + { + Preferences childNode = event.getChild(); + String name = childNode.name(); + if (preferenceNode.getNode(name) == null) { - synchronized (resourceSet) + PreferenceNode childPreferenceNode = PreferencesFactory.eINSTANCE.createPreferenceNode(); + childPreferenceNode.setName(name); + EList<PreferenceNode> children = preferenceNode.getChildren(); + int index = 0; + for (int size = children.size(); index < size; ++index) { - Preferences childNode = event.getChild(); - String name = childNode.name(); - if (preferenceNode.getNode(name) == null) + PreferenceNode otherChildPreferenceNode = children.get(index); + if (otherChildPreferenceNode.getName().compareTo(name) >= 0) { - PreferenceNode childPreferenceNode = PreferencesFactory.eINSTANCE.createPreferenceNode(); - childPreferenceNode.setName(name); - EList<PreferenceNode> children = preferenceNode.getChildren(); - int index = 0; - for (int size = children.size(); index < size; ++index) - { - PreferenceNode otherChildPreferenceNode = children.get(index); - if (otherChildPreferenceNode.getName().compareTo(name) >= 0) - { - break; - } - } - - children.add(index, childPreferenceNode); - traverse(childPreferenceNode, childNode, true); + break; } } + + children.add(index, childPreferenceNode); + traverse(childPreferenceNode, childNode, true); } } |
