diff options
| author | Paul Elder | 2013-03-08 11:50:27 +0000 |
|---|---|---|
| committer | Paul Elder | 2013-04-04 19:45:49 +0000 |
| commit | f6176146acf3d4592aa4c77418d682630ca8b470 (patch) | |
| tree | 34993af4830cb42dbfc6f3c94a8746ffe8902a4c | |
| parent | 24cee195f6bf8e51d662813fbd690df6b2ce3680 (diff) | |
| download | eclipse.platform.ui-f6176146acf3d4592aa4c77418d682630ca8b470.tar.gz eclipse.platform.ui-f6176146acf3d4592aa4c77418d682630ca8b470.tar.xz eclipse.platform.ui-f6176146acf3d4592aa4c77418d682630ca8b470.zip | |
Bug 383992: Juno: calling getPartialMatches causes a stack overflow
Change getPartialMatches() implementation to correctly package up result
from EBindingService.getPartialMatches() to be compatible with the
legacy API.
Change-Id: I61f0b869b5d10d0a9ae71cf151fcfc3fc28bcbe7
| -rw-r--r-- | bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/BindingService.java | 26 |
1 files changed, 6 insertions, 20 deletions
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/BindingService.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/BindingService.java index 2cc593ad136..8c601e58e00 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/BindingService.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/BindingService.java @@ -13,7 +13,6 @@ package org.eclipse.ui.internal.keys; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -282,28 +281,15 @@ public final class BindingService implements IBindingService { * .bindings.TriggerSequence) */ public Map getPartialMatches(TriggerSequence trigger) { - final TriggerSequence[] prefixes = trigger.getPrefixes(); - final int prefixesLength = prefixes.length; - if (prefixesLength == 0) { - return Collections.EMPTY_MAP; - } + final Collection<Binding> partialMatches = bindingService.getPartialMatches(trigger); + final Map<TriggerSequence, Binding> result = new HashMap<TriggerSequence, Binding>( + partialMatches.size()); - Collection<Binding> partialMatches = bindingService.getPartialMatches(trigger); - Map<TriggerSequence, Object> prefixTable = new HashMap<TriggerSequence, Object>(); for (Binding binding : partialMatches) { - for (int i = 0; i < prefixesLength; i++) { - final TriggerSequence prefix = prefixes[i]; - final Object value = prefixTable.get(prefix); - if ((prefixTable.containsKey(prefix)) && (value instanceof Map)) { - ((Map) value).put(prefixTable, binding); - } else { - final Map map = new HashMap(); - prefixTable.put(prefix, map); - map.put(prefixTable, binding); - } - } + result.put(binding.getTriggerSequence(), binding); } - return prefixTable; + + return result; } /* |
