1 8 package com.mountainminds.eclemma.internal.ui.actions; 9 10 import java.util.Arrays ; 11 import java.util.HashMap ; 12 import java.util.Map ; 13 14 import org.eclipse.core.expressions.EvaluationContext; 15 import org.eclipse.core.expressions.EvaluationResult; 16 import org.eclipse.core.expressions.Expression; 17 import org.eclipse.core.expressions.ExpressionConverter; 18 import org.eclipse.core.expressions.ExpressionTagNames; 19 import org.eclipse.core.expressions.IEvaluationContext; 20 import org.eclipse.core.expressions.PropertyTester; 21 import org.eclipse.core.runtime.CoreException; 22 import org.eclipse.core.runtime.IConfigurationElement; 23 import org.eclipse.core.runtime.Platform; 24 import org.eclipse.debug.core.ILaunchManager; 25 26 import com.mountainminds.eclemma.internal.ui.EclEmmaUIPlugin; 27 28 38 public class ContextualLaunchableTester extends PropertyTester { 39 40 41 private Map expressions = new HashMap (); 42 43 public boolean test(Object receiver, String property, Object [] args, Object expectedValue) { 44 String delegateShortcutID = (String ) args[0]; 45 Expression expr = (Expression) expressions.get(delegateShortcutID); 46 if (expr == null) { 47 expr = createEnablementExpression(delegateShortcutID); 48 expressions.put(delegateShortcutID, expr); 49 } 50 try { 51 return expr.evaluate(createContext(receiver)) != EvaluationResult.FALSE; 52 } catch (CoreException ce) { 53 EclEmmaUIPlugin.log(ce); 54 return false; 55 } 56 } 57 58 private IEvaluationContext createContext(Object selection) { 59 IEvaluationContext context = new EvaluationContext(null, selection); 60 context.addVariable("selection", selection); return context; 62 } 63 64 65 private Expression createEnablementExpression(String delegateShortcutID) { 66 IConfigurationElement element = findEnablementConfiguration(delegateShortcutID); 67 if (element != null) { 68 try { 69 return ExpressionConverter.getDefault().perform(element); 70 } catch (CoreException ce) { 71 EclEmmaUIPlugin.log(ce); 72 } 73 } 74 return Expression.FALSE; 75 } 76 77 private IConfigurationElement findEnablementConfiguration(String delegateShortcutID) { 78 IConfigurationElement[] configs = 79 Platform.getExtensionRegistry().getConfigurationElementsFor("org.eclipse.debug.ui.launchShortcuts"); for (int i = 0; i < configs.length; i++) { 81 if (!delegateShortcutID.equals(configs[i].getAttribute("id"))) continue; String modes = configs[i].getAttribute("modes"); if (modes == null) continue; 84 if (!Arrays.asList(modes.split("\\W")).contains(ILaunchManager.RUN_MODE)) continue; IConfigurationElement[] launch = configs[i].getChildren("contextualLaunch"); if (launch.length != 1) continue; 87 IConfigurationElement[] enablement = launch[0].getChildren(ExpressionTagNames.ENABLEMENT); 88 if (enablement.length == 1) return enablement[0]; 89 } 90 return null; 91 } 92 93 } 94 | Popular Tags |