/** * Gets the current {@link Position} of the marker in the * {@link TLAEditor} showing the module that contains the * marker. Returns null if there is no editor open on that module. * This method assumes that {@link TLAEditor}s are synchronized. That * is, multiple editors on the same module are synchronized. At the time * of writing this method (June 2010), they are synchronized. * * @param marker * @return */ public static Position getMarkerPosition(IMarker marker) { TLAEditor editor = findTLAEditor(marker.getResource()); if (editor != null) { IAnnotationModel annotationModel = editor.getDocumentProvider().getAnnotationModel(editor.getEditorInput()); /* * From exploration of eclipse's code, I've determined that this * should be an instance of ResourceMarkerAnnotationModel. If this is * not always true, then we need to figure out a way to get a hold of the * annotation model that manages positions of markers in the editor. */ if (annotationModel instanceof ResourceMarkerAnnotationModel) { return ((ResourceMarkerAnnotationModel) annotationModel).getMarkerPosition(marker); } else { Activator.getDefault().logDebug("Cannot get the annotation model that manages marker positions for the marker on " + marker.getResource()); } } return null; }
public IAnnotationModel createAnnotationModel(IPath location) { try { IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(location); if (file != null && file.exists()) { return new ResourceMarkerAnnotationModel(file); } } catch (Exception e) { } return new ExternalFileAnnotationModel(EFS.getLocalFileSystem().getStore(location)); }