/* (non-Javadoc) * @see org.eclipse.ui.texteditor.IMarkerUpdater#updateMarker(org.eclipse.core.resources.IMarker, org.eclipse.jface.text.IDocument, org.eclipse.jface.text.Position) */ public boolean updateMarker(IMarker marker, IDocument document, Position position) { if (position.isDeleted()) { return false; } IBreakpointManager manager = DebugPlugin.getDefault().getBreakpointManager(); IBreakpoint breakpoint = manager.getBreakpoint(marker); if (breakpoint == null) { return false; } IFile file = (IFile) marker.getResource(); if (JavaScriptCore.isJavaScriptLikeFileName(file.getName())) { IJavaScriptUnit unit = JavaScriptCore.createCompilationUnitFrom(file); if (unit == null) { return false; } JavaScriptUnit jsunit = JavaScriptPlugin.getDefault().getASTProvider().getAST(unit, ASTProvider.WAIT_YES, null); try { BreakpointLocationFinder finder = new BreakpointLocationFinder( jsunit, document.getLineOfOffset(position.getOffset()) + 1, true); jsunit.accept(finder); if (finder.getLocation() == BreakpointLocationFinder.UNKNOWN) { return false; } int line = finder.getLineNumber(); if (MarkerUtilities.getLineNumber(marker) == line) { // if there exists a breakpoint on the line remove this one if (isLineBreakpoint(marker)) { ensureRanges(document, marker, line); return lineBreakpointExists( marker.getResource(), ((IJavaScriptLineBreakpoint) breakpoint).getScriptPath(), line, marker, true) == null; } return true; } if (isLineBreakpoint(marker) & line == -1) { return false; } if (lineBreakpointExists( marker.getResource(), ((IJavaScriptLineBreakpoint) breakpoint).getScriptPath(), line, marker, false) != null) { return false; } MarkerUtilities.setLineNumber(marker, line); if (isLineBreakpoint(marker)) { ensureRanges(document, marker, line); } return true; } catch (BadLocationException ble) { JavaScriptDebugUIPlugin.log(ble); } catch (CoreException e) { JavaScriptDebugUIPlugin.log(e); } } return true; }