diff options
| author | Paul Webster | 2012-05-15 18:11:57 +0000 |
|---|---|---|
| committer | Paul Webster | 2012-05-15 18:11:57 +0000 |
| commit | ef309f8628dddf83a7c4e52a60c14bb9fd9c3e09 (patch) | |
| tree | 807e8d440d755459e6ff859d513f0144e6575a26 | |
| parent | e2285ad6aa14737558dce7bc00594717396d90c5 (diff) | |
| download | eclipse.platform.ui-ef309f8628dddf83a7c4e52a60c14bb9fd9c3e09.tar.gz eclipse.platform.ui-ef309f8628dddf83a7c4e52a60c14bb9fd9c3e09.tar.xz eclipse.platform.ui-ef309f8628dddf83a7c4e52a60c14bb9fd9c3e09.zip | |
Bug 379573 - [Compatibility] Global selection in evaluation context isv20120515-1811
no longer a java.util.Collection
When an ExpressionContext is created within the workbench, it needs to
make sure the default variable is a Collection
2 files changed, 26 insertions, 1 deletions
diff --git a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/workbench/modeling/ExpressionContext.java b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/workbench/modeling/ExpressionContext.java index 3f48db2cdf0..c6ed322c0ad 100644 --- a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/workbench/modeling/ExpressionContext.java +++ b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/workbench/modeling/ExpressionContext.java @@ -14,6 +14,7 @@ package org.eclipse.e4.ui.workbench.modeling; import java.util.Collections; import org.eclipse.core.expressions.IEvaluationContext; import org.eclipse.core.runtime.CoreException; +import org.eclipse.e4.core.contexts.IContextFunction; import org.eclipse.e4.core.contexts.IEclipseContext; import org.eclipse.e4.ui.services.IServiceConstants; @@ -24,6 +25,7 @@ public class ExpressionContext implements IEvaluationContext { public static final String ALLOW_ACTIVATION = "org.eclipse.e4.ui.workbench.modeling.ExpressionContext.allowActivation"; //$NON-NLS-1$ public IEclipseContext eclipseContext; + public static IContextFunction defaultVariableConverter = null; public ExpressionContext(IEclipseContext eclipseContext) { this.eclipseContext = eclipseContext; @@ -82,7 +84,12 @@ public class ExpressionContext implements IEvaluationContext { * @see org.eclipse.core.expressions.IEvaluationContext#getDefaultVariable() */ public Object getDefaultVariable() { - Object sel = eclipseContext.getActive(IServiceConstants.ACTIVE_SELECTION); + final Object sel; + if (defaultVariableConverter != null) { + sel = defaultVariableConverter.compute(eclipseContext); + } else { + sel = eclipseContext.getActive(IServiceConstants.ACTIVE_SELECTION); + } return sel == null ? Collections.EMPTY_LIST : sel; } diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/services/EvaluationService.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/services/EvaluationService.java index eb13a1ce97d..033f492b8dc 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/services/EvaluationService.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/services/EvaluationService.java @@ -13,6 +13,7 @@ package org.eclipse.ui.internal.services; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; @@ -24,12 +25,15 @@ import org.eclipse.core.expressions.IEvaluationContext; import org.eclipse.core.runtime.ISafeRunnable; import org.eclipse.core.runtime.ListenerList; import org.eclipse.core.runtime.SafeRunner; +import org.eclipse.e4.core.contexts.ContextFunction; import org.eclipse.e4.core.contexts.IEclipseContext; import org.eclipse.e4.core.contexts.RunAndTrack; import org.eclipse.e4.ui.services.IServiceConstants; import org.eclipse.e4.ui.workbench.modeling.ExpressionContext; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.ISourceProvider; import org.eclipse.ui.ISourceProviderListener; import org.eclipse.ui.ISources; @@ -78,6 +82,20 @@ public final class EvaluationService implements IEvaluationService { context = c; ratContext = context.getParent().createChild(getClass().getName()); legacyContext = new ExpressionContext(context); + ExpressionContext.defaultVariableConverter = new ContextFunction() { + @Override + public Object compute(IEclipseContext context) { + Object defaultVariable = context.getActive(IServiceConstants.ACTIVE_SELECTION); + if (defaultVariable instanceof IStructuredSelection) { + final IStructuredSelection selection = (IStructuredSelection) defaultVariable; + return selection.toList(); + } else if ((defaultVariable instanceof ISelection) + && (!((ISelection) defaultVariable).isEmpty())) { + return Collections.singleton(defaultVariable); + } + return null; + } + }; contextUpdater = new ISourceProviderListener() { public void sourceChanged(int sourcePriority, String sourceName, Object sourceValue) { |
