1 package jp.sourceforge.moreemacs.exp;
\r
3 import java.util.ArrayList;
\r
4 import java.util.List;
\r
6 import org.eclipse.core.commands.AbstractHandler;
\r
7 import org.eclipse.core.commands.ExecutionEvent;
\r
8 import org.eclipse.core.commands.ExecutionException;
\r
9 import org.eclipse.core.commands.NotEnabledException;
\r
10 import org.eclipse.core.commands.NotHandledException;
\r
11 import org.eclipse.core.commands.common.NotDefinedException;
\r
12 import org.eclipse.core.resources.IMarker;
\r
13 import org.eclipse.core.resources.IResource;
\r
14 import org.eclipse.core.runtime.CoreException;
\r
15 import org.eclipse.jface.util.OpenStrategy;
\r
16 import org.eclipse.ui.IViewPart;
\r
17 import org.eclipse.ui.IWorkbenchPage;
\r
18 import org.eclipse.ui.IWorkbenchSite;
\r
19 import org.eclipse.ui.PartInitException;
\r
20 import org.eclipse.ui.handlers.HandlerUtil;
\r
21 import org.eclipse.ui.handlers.IHandlerService;
\r
22 import org.eclipse.ui.ide.IDE;
\r
23 import org.eclipse.ui.views.markers.MarkerSupportView;
\r
25 public class NextErrorHandler extends AbstractHandler {
\r
28 public Object execute(ExecutionEvent event) throws ExecutionException {
\r
29 IWorkbenchSite site = HandlerUtil.getActiveSite(event);
\r
30 IWorkbenchPage page = site.getPage();
\r
32 MarkerSupportView problemView = (MarkerSupportView) page.findView("org.eclipse.ui.views.ProblemView");
\r
33 @SuppressWarnings("restriction")
\r
34 IMarker[] currentMarkers = problemView.getSelectedMarkers();
\r
35 IMarker startPoint = (currentMarkers.length != 0)?currentMarkers[currentMarkers.length-1]:null;
\r
37 selectAll(problemView);
\r
39 @SuppressWarnings("restriction")
\r
40 IMarker[] allMarkers = problemView.getSelectedMarkers();
\r
41 goNextError(allMarkers, startPoint, page);
\r
46 void selectAll(IViewPart view) throws ExecutionException {
\r
47 view.getSite().getPage().activate(view);
\r
48 IHandlerService handlerService = (IHandlerService)view.getSite().getService(IHandlerService.class);
\r
50 handlerService.executeCommand("org.eclipse.ui.edit.selectAll", null);
\r
51 } catch (NotDefinedException e) {
\r
52 throw new ExecutionException(e.getMessage(), e);
\r
53 } catch (NotEnabledException e) {
\r
54 throw new ExecutionException(e.getMessage(), e);
\r
55 } catch (NotHandledException e) {
\r
56 throw new ExecutionException(e.getMessage(), e);
\r
60 void goNextError(IMarker[] allMarkers, IMarker startPoint, IWorkbenchPage page) throws ExecutionException {
\r
61 boolean found = false;
\r
62 List<IMarker> skipped = new ArrayList<IMarker>();
\r
63 for(IMarker marker: allMarkers) {
\r
64 if(!marker.exists()) {
\r
67 if(startPoint != null && startPoint.exists()) {
\r
68 if(startPoint.equals(marker)) {
\r
73 if(hasSameLineNumber(startPoint, marker)) {
\r
78 skipped.add(marker);
\r
83 if(marker.getResource().getType() != IResource.FILE) {
\r
88 IDE.openEditor(page, marker, OpenStrategy.activateOnOpen());
\r
89 } catch (PartInitException e) {
\r
90 throw new ExecutionException(e.getMessage(), e);
\r
94 if(startPoint != null && startPoint.exists()) {
\r
95 skipped.add(startPoint);
\r
98 for(IMarker marker: skipped) {
\r
99 if(marker.getResource().getType() != IResource.FILE) {
\r
104 IDE.openEditor(page, marker, OpenStrategy.activateOnOpen());
\r
105 } catch (PartInitException e) {
\r
106 throw new ExecutionException(e.getMessage(), e);
\r
113 boolean hasSameLineNumber(IMarker marker1, IMarker marker2) throws ExecutionException {
\r
114 if(!marker1.getResource().equals(marker2.getResource())) {
\r
118 Integer line1 = (Integer)marker1.getAttribute(IMarker.LINE_NUMBER);
\r
119 Integer line2 = (Integer)marker2.getAttribute(IMarker.LINE_NUMBER);
\r
120 if(line1 == null) {
\r
121 return (line2 == null);
\r
123 return line1.equals(line2);
\r
124 } catch (CoreException e) {
\r
125 throw new ExecutionException(e.getMessage(), e);
\r