public void readExternal(@NotNull final Element parentNode) {
   // save old breakpoints
   for (Element element : parentNode.getChildren()) {
     myOriginalBreakpointsNodes.add(element.clone());
   }
   if (myProject.isOpen()) {
     doRead(parentNode);
   } else {
     myStartupManager.registerPostStartupActivity(
         new Runnable() {
           @Override
           public void run() {
             doRead(parentNode);
           }
         });
   }
 }
  @NotNull
  public List<BreakpointWithHighlighter> findBreakpoints(
      @NotNull Document document, @NotNull TextRange textRange) {
    ApplicationManager.getApplication().assertIsDispatchThread();
    List<BreakpointWithHighlighter> result = new ArrayList<BreakpointWithHighlighter>();
    int startLine = document.getLineNumber(textRange.getStartOffset());
    int endLine = document.getLineNumber(textRange.getEndOffset()) + 1;
    TextRange lineRange = new TextRange(startLine, endLine);
    for (final Breakpoint breakpoint : getBreakpoints()) {
      if (breakpoint instanceof BreakpointWithHighlighter
          && lineRange.contains(((BreakpointWithHighlighter) breakpoint).getLineIndex())) {
        result.add((BreakpointWithHighlighter) breakpoint);
      }
    }

    return result;
  }