По словам Пракаша Г.Р., я показываю пример кода.
Поскольку код инициализации в Activator не работает, если нам нужно использовать Workbench, поэтому я использую точку расширения при запуске. Plugin.xml - это
<extension
point="org.eclipse.ui.startup">
<startup
class="sampleplugin.MyStartUp">
</startup>
</extension>
Поэтому в классе MyStartUp мы добавляем ExecutionListener в ICommandService.
Важно то, что ExecutionEvent в методе preExecute не может
извлечь выбор. Это отличается от обычного ExecutionEvent в Command.
Таким образом, MyStartUp.java
public class MyStartUp implements IStartup {
@Override
public void earlyStartup() {
ICommandService service = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService .class);
service.addExecutionListener(
new IExecutionListener() {
...
@Override
public void postExecuteSuccess(String commandId,
Object returnValue) {
// do something post
}
@Override
public void preExecute(String commandId,
final ExecutionEvent event) {
if (org.eclipse.ui.IWorkbenchCommandConstants.FILE_REFRESH.equals(commandId) ) {
IWorkbench wb = PlatformUI.getWorkbench();
IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
IWorkbenchPage page = win.getActivePage();
ISelection selection = page.getSelection();
// do something using selection
}
}
});
}
}
Я использую
IWorkbench wb = PlatformUI.getWorkbench();
IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
IWorkbenchPage page = win.getActivePage();
ISelection selection = page.getSelection();
вместо
IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelectionChecked(event);
потому что причина выше. Однако это связано с внутренним механизмом Eclipse.
Событие refresh использует старый механизм действия и вызов ExternalActionManager.
Метод preExecute, в котором у события нет данных для выбора.
Я хочу вторую формулу
IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelectionChecked(event);
может быть доступно в методе preExecute в будущем.