Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Webster2012-05-15 18:11:57 +0000
committerPaul Webster2012-05-15 18:11:57 +0000
commitef309f8628dddf83a7c4e52a60c14bb9fd9c3e09 (patch)
tree807e8d440d755459e6ff859d513f0144e6575a26
parente2285ad6aa14737558dce7bc00594717396d90c5 (diff)
downloadeclipse.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
-rw-r--r--bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/workbench/modeling/ExpressionContext.java9
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/services/EvaluationService.java18
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) {

Back to the top