如何从标记视图中选择标记条目

时间:2014-10-15 09:16:48

标签: java eclipse eclipse-plugin

我正在尝试将标记条目转换为自定义对象,并通过右键单击标记表视图中的标记条目并从上下文菜单中的选项调用操作/处理程序来执行相同操作。 / p>

但是在我尝试访问选择的处理程序中,返回的对象是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;
    }
}

1 个答案:

答案 0 :(得分:1)

如你所说MarkerEntry是内部的,所以你不应该直接引用这个类。

但是MarkerEntry确实实现了IAdaptable,这提供了获取IMarker的方法:

if (item instanceof IAdaptable)
 {
   IAdaptable adaptable = (IAdaptable)item;

   IMarker marker = (IMarker)adaptable.getAdapter(IMarker.class);
 }