package jetbrains.mps.debug.api.breakpoints; /*Generated by MPS */ import com.intellij.openapi.components.ApplicationComponent; import java.util.Map; import java.util.HashMap; import org.jetbrains.annotations.NotNull; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; import jetbrains.mps.debug.api.BreakpointManagerComponent; import org.jdom.Element; import org.jetbrains.annotations.Nullable; import java.util.Set; import com.intellij.openapi.application.ApplicationManager; public class BreakpointProvidersManager implements ApplicationComponent { private final Map<IBreakpointKind, IBreakpointsProvider> myKindToProvider = new HashMap<IBreakpointKind, IBreakpointsProvider>(); private final Map<String, IBreakpointKind> myNameToKind = new HashMap<String, IBreakpointKind>(); public BreakpointProvidersManager() { } @NotNull @Override public String getComponentName() { return "Breakpoint Providers Manager Component"; } @Override public void initComponent() { } @Override public void disposeComponent() { } public void registerProvider(IBreakpointsProvider<? extends IBreakpoint, ? extends IBreakpointKind<? extends IBreakpoint>> provider) { // I just love generics in java for (IBreakpointKind kind : provider.getAllKinds()) { myKindToProvider.put(kind, provider); myNameToKind.put(kind.getName(), kind); } for (Project project : ProjectManager.getInstance().getOpenProjects()) { BreakpointManagerComponent.getInstance(project).reReadState(); } } public void unregisterProvider(IBreakpointsProvider<? extends IBreakpoint, ? extends IBreakpointKind<? extends IBreakpoint>> provider) { Map<BreakpointManagerComponent, Element> states = new HashMap<BreakpointManagerComponent, Element>(); for (Project project : ProjectManager.getInstance().getOpenProjects()) { BreakpointManagerComponent component = BreakpointManagerComponent.getInstance(project); states.put(component, component.getState()); } for (IBreakpointKind kind : provider.getAllKinds()) { myKindToProvider.remove(kind); myNameToKind.remove(kind.getName()); } for (BreakpointManagerComponent component : states.keySet()) { component.loadState(states.get(component)); } } @Nullable public IBreakpointsProvider getProvider(IBreakpointKind kind) { return myKindToProvider.get(kind); } @Nullable public IBreakpointKind getKind(String name) { return myNameToKind.get(name); } public Set<IBreakpointKind> getAllKinds() { return myKindToProvider.keySet(); } public static BreakpointProvidersManager getInstance() { return ApplicationManager.getApplication().getComponent(BreakpointProvidersManager.class); } }