package jetbrains.mps.debug.api; /*Generated by MPS */ import jetbrains.mps.debug.api.breakpoints.IBreakpoint; import jetbrains.mps.debug.api.breakpoints.IBreakpointKind; import org.jetbrains.annotations.NotNull; import jetbrains.mps.debug.api.breakpoints.BreakpointProvidersManager; import jetbrains.mps.debug.api.breakpoints.IBreakpointsProvider; import org.jetbrains.annotations.NonNls; import jetbrains.mps.debug.api.breakpoints.ILocationBreakpoint; import org.jetbrains.mps.openapi.model.SNode; import com.intellij.openapi.project.Project; public abstract class AbstractDebugger<B extends IBreakpoint, K extends IBreakpointKind<B>> implements IDebugger<B, K> { @NotNull private final String myName; private final BreakpointProvidersManager myBreakpointsProviderManager; private final Debuggers myDebuggers; private IBreakpointsProvider<B, K> myBreakpointsProvider; public AbstractDebugger(@NonNls String name, @NotNull Debuggers debuggers, @NotNull BreakpointProvidersManager breakpointsProviderManager) { myName = name; myDebuggers = debuggers; myBreakpointsProviderManager = breakpointsProviderManager; } public void init() { myBreakpointsProvider = getBreakpointsProvider(); myDebuggers.registerDebugger(this); myBreakpointsProviderManager.registerProvider(myBreakpointsProvider); } public void dispose() { myBreakpointsProviderManager.unregisterProvider(myBreakpointsProvider); myDebuggers.unRegisterDebugger(this); } @NotNull @Override public String getName() { return myName; } @Override public ILocationBreakpoint createBreakpoint(SNode node, String kindName, Project project) { K kind = null; for (K k : myBreakpointsProvider.getAllKinds()) { if (k.getName().equals(kindName)) { kind = k; break; } } if (kind != null && myBreakpointsProvider.canCreateFromNode(kind)) { return myBreakpointsProvider.createFromNode(node, kind, project); } return null; } }