public void annotate(final FileObject fo) {
   synchronized (breakpointToAnnotations) {
     if (annotatedFiles.contains(fo)) {
       // Already annotated
       return;
     }
     Set<VisageLineBreakpoint> annotatedBreakpoints = breakpointToAnnotations.keySet();
     for (Breakpoint breakpoint : DebuggerManager.getDebuggerManager().getBreakpoints()) {
       if (isAnnotatable(breakpoint)) {
         VisageLineBreakpoint b = (VisageLineBreakpoint) breakpoint;
         if (!annotatedBreakpoints.contains(b)) {
           b.addPropertyChangeListener(this);
           breakpointToAnnotations.put(b, new WeakSet<Annotation>());
           LineTranslations.getTranslations().registerForLineUpdates(b);
         }
         addAnnotationTo(b, fo);
       }
     }
     annotatedFiles.add(fo);
   }
   if (attachManagerListener) {
     attachManagerListener = false;
     DebuggerManager.getDebuggerManager()
         .addDebuggerListener(
             WeakListeners.create(
                 DebuggerManagerListener.class, this, DebuggerManager.getDebuggerManager()));
   }
 }
 public void breakpointAdded(Breakpoint breakpoint) {
   if (isAnnotatable(breakpoint)) {
     VisageLineBreakpoint b = (VisageLineBreakpoint) breakpoint;
     //            JPDABreakpoint b = (JPDABreakpoint) breakpoint;
     b.addPropertyChangeListener(this);
     RequestProcessor.getDefault().post(new AnnotationRefresh(b, false, true));
     //            if( b instanceof LineBreakpoint ) {
     VisageLineBreakpoint lb = (VisageLineBreakpoint) breakpoint;
     LineTranslations.getTranslations().registerForLineUpdates(lb);
     //            }
   }
 }