当运用eclipse扩展点handler来使用command的时候,有时我们需要获取得到上下文信息,其实在org.eclipse.core.commands.IHandler这个接口中定义的execute(ExecutionEvent event)方法里面,我们可以从event这个参数获取得到全局状态(随上下文信息改变)。
我们可以通过继承org.eclipse.core.commands.AbstractHandler来定制我们需要的handler。例如说我想要获取到左侧导航器中选中的IResource的话,我会实现一个类继承自AbstractHandler,并定义方法通过ExecutionEvent来获取上下文信息。
在我们最终使用handler的时候我们可以通过execute方法来调用getSelectedResources方法来获取选择的IResource集合
这只是全局状态的一种运用,当使用handler的时候需要到上下文信息的时候可以先使用类似的方式来获取,也许能解决。
我们可以通过继承org.eclipse.core.commands.AbstractHandler来定制我们需要的handler。例如说我想要获取到左侧导航器中选中的IResource的话,我会实现一个类继承自AbstractHandler,并定义方法通过ExecutionEvent来获取上下文信息。
public abstract class AbstractResourceHandler extends AbstractHandler {
/**
* 获取选择的IResource集合
*
* @param applicationContext
* @return
*/
protected List<IResource> getSelectedResources(Object applicationContext) {
if (applicationContext instanceof IEvaluationContext) {
IEvaluationContext evaluationContext = ((IEvaluationContext) applicationContext);
Object obj = evaluationContext.getDefaultVariable();
if (obj instanceof List && !((List) obj).isEmpty()) {
List<IResource> resources = new ArrayList<IResource>();
for (Object var : (List) obj) {
if (var instanceof IResource) {
resources.add((IResource) var);
} else {
return null;
}
}
return resources;
}
}
return null;
}
}
在我们最终使用handler的时候我们可以通过execute方法来调用getSelectedResources方法来获取选择的IResource集合
public class ResourceHandler extends AbstractResourceHandler{
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
List<IResource> resources = getSelectedResources(event.getApplicationContext());
/**
* do something
*/
return null;
}
}
这只是全局状态的一种运用,当使用handler的时候需要到上下文信息的时候可以先使用类似的方式来获取,也许能解决。