@NotNull
  public synchronized List<Breakpoint> getBreakpoints() {
    if (myBreakpointsListForIteration == null) {
      myBreakpointsListForIteration = new ArrayList<Breakpoint>(myBreakpoints.size());

      XBreakpoint<?>[] xBreakpoints =
          ApplicationManager.getApplication()
              .runReadAction(
                  new Computable<XBreakpoint<?>[]>() {
                    public XBreakpoint<?>[] compute() {
                      return getXBreakpointManager().getAllBreakpoints();
                    }
                  });
      for (XBreakpoint<?> xBreakpoint : xBreakpoints) {
        if (isJavaType(xBreakpoint)) {
          Breakpoint breakpoint = myBreakpoints.get(xBreakpoint);
          if (breakpoint == null) {
            breakpoint = createJavaBreakpoint(xBreakpoint);
            myBreakpoints.put(xBreakpoint, breakpoint);
          }
        }
      }

      myBreakpointsListForIteration.addAll(myBreakpoints.values());
    }
    return myBreakpointsListForIteration;
  }
 @Nullable
 public Breakpoint findMasterBreakpoint(@NotNull Breakpoint dependentBreakpoint) {
   XDependentBreakpointManager dependentBreakpointManager =
       ((XBreakpointManagerImpl) getXBreakpointManager()).getDependentBreakpointManager();
   return myBreakpoints.get(
       dependentBreakpointManager.getMasterBreakpoint(dependentBreakpoint.myXBreakpoint));
 }
 private Breakpoint createBreakpoint(String category, Element breakpointNode)
     throws InvalidDataException {
   XBreakpoint xBreakpoint = null;
   if (category.equals(LineBreakpoint.CATEGORY.toString())) {
     xBreakpoint = createXLineBreakpoint(JavaLineBreakpointType.class, breakpointNode);
   } else if (category.equals(MethodBreakpoint.CATEGORY.toString())) {
     if (breakpointNode.getAttribute("url") != null) {
       xBreakpoint = createXLineBreakpoint(JavaMethodBreakpointType.class, breakpointNode);
     } else {
       xBreakpoint = createXBreakpoint(JavaWildcardMethodBreakpointType.class, breakpointNode);
     }
   } else if (category.equals(FieldBreakpoint.CATEGORY.toString())) {
     xBreakpoint = createXLineBreakpoint(JavaFieldBreakpointType.class, breakpointNode);
   } else if (category.equals(ExceptionBreakpoint.CATEGORY.toString())) {
     xBreakpoint = createXBreakpoint(JavaExceptionBreakpointType.class, breakpointNode);
   }
   if (xBreakpoint == null) {
     throw new IllegalStateException("Unknown breakpoint category " + category);
   }
   return myBreakpoints.get(xBreakpoint);
 }
 public String getProperty(String name) {
   return myUIProperties.get(name);
 }