从 Eclipse 视图调用 Xtext 生成器
Calling Xtext generator from an Eclipse View
我打算通过从位于 Eclipse 视图中的按钮调用生成器来生成代码,类似于这种方法:
https://christiandietrich.wordpress.com/2011/10/15/xtext-calling-the-generator-from-a-context-menu/、
但我不想从上下文菜单中调用生成器,而是想通过单击按钮来调用它,如以下代码所示:
button1.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
// Call GenerationHandler here
}
...
});
问题是,我不能简单地调用 GenerationHandler
中的执行方法,如下所示:
public class GenerationHandler extends AbstractHandler implements IHandler {
@Inject private IGenerator generator;
@Inject private Provider<EclipseResourceFileSystemAccess> fileAccessProvider;
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
...
return null;
}
@Override
public boolean isEnabled() {
return true;
}
}
而且我不确定如何制作处理程序,我可以从 button.So 访问处理程序问题是,有没有办法从 SelectionListener
[=14] 访问处理程序=] 方法?
谢谢
使用IHandlerService
执行处理程序处理的命令:
IHandlerService handlerService = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getService(IHandlerService.class);
handlerService.executeCommand("your command id", null);
我打算通过从位于 Eclipse 视图中的按钮调用生成器来生成代码,类似于这种方法:
https://christiandietrich.wordpress.com/2011/10/15/xtext-calling-the-generator-from-a-context-menu/、
但我不想从上下文菜单中调用生成器,而是想通过单击按钮来调用它,如以下代码所示:
button1.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
// Call GenerationHandler here
}
...
});
问题是,我不能简单地调用 GenerationHandler
中的执行方法,如下所示:
public class GenerationHandler extends AbstractHandler implements IHandler {
@Inject private IGenerator generator;
@Inject private Provider<EclipseResourceFileSystemAccess> fileAccessProvider;
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
...
return null;
}
@Override
public boolean isEnabled() {
return true;
}
}
而且我不确定如何制作处理程序,我可以从 button.So 访问处理程序问题是,有没有办法从 SelectionListener
[=14] 访问处理程序=] 方法?
谢谢
使用IHandlerService
执行处理程序处理的命令:
IHandlerService handlerService = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getService(IHandlerService.class);
handlerService.executeCommand("your command id", null);