Я пытаюсь преобразовать запись маркера в настраиваемый объект и намереваясь выполнить его, щелкнув правой кнопкой мыши на записи маркера в представлении таблицы маркеров и вызывая действие/обработчик из вариант в контекстном меню.Как выбрать запись маркера из вида Markers
Но в обработчике, когда я пытаюсь получить доступ к выбору, объект возвращается является MarkerEntry
(org.eclipse.ui.internal.views.markers.MarkerEntry), а не IMarker
. Поскольку MarkerEntry является внутренним классом, не уверен, как его использовать, а также если его безопасно использовать.
Пожалуйста, предложите любые варианты решения. Соответствующий код и plugin.xml фрагмент кода ниже
plugin.xml
<extension point="org.eclipse.ui.views">
<view class="view.ReviewMarkerView" icon="icons/insta_window_16.png" id="id.instaReviewMarkerView" name="Insta Review Defects"> </view>
</extension>
<extension point="org.eclipse.ui.commands">
<command defaultHandler="handlers.DefectToReviewIssueHandler" id="id.defectToReviewIssueHandler" name="Add defect to Review Tracker"></command>
</extension>
<extension point="org.eclipse.ui.menus">
<menuContribution locationURI="popup:id.instaReviewMarkerView">
<command commandId="id.defectToReviewIssueHandler" style="push"></command>
</menuContribution>
</extension>
Java класс:
public class MarkerToReviewIssueHandler extends AbstractHandler {
public MarkerToReviewIssueHandler() {
}
public Object execute(ExecutionEvent event) throws ExecutionException {
IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
IWorkbenchPage page = window.getActivePage();
ReviewMarkerView view = (ReviewMarkerView) page.findView("id.instaReviewMarkerView");
ISelection sel = view.getSite().getSelectionProvider().getSelection();
if (sel != null && sel instanceof IStructuredSelection) {
Iterator iterator = (IStructuredSelection) sel).iterator();
while (iterator.hasNext()) {
Object item = iterator.next();
if (item instanceof IMarker) {
// convert the marker to a review issue.
}
}
} else {
//Show error to select a review defect
}
return null;
}
}
Fantastic !! Очень элегантное решение. –