package org.mule.tooling.lang.dw.debug.breakpoint; import com.intellij.xdebugger.XExpression; import com.intellij.xdebugger.breakpoints.XBreakpointHandler; import com.intellij.xdebugger.breakpoints.XBreakpointProperties; import com.intellij.xdebugger.breakpoints.XLineBreakpoint; import com.mulesoft.weave.engine.debugger.WeaveBreakpoint; import com.mulesoft.weave.engine.debugger.client.DebuggerClient; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class WeaveBreakpointHandler extends XBreakpointHandler<XLineBreakpoint<XBreakpointProperties>> { private final DebuggerClient debuggerClient; public WeaveBreakpointHandler(DebuggerClient debuggerClient) { super(WeaveBreakpointType.class); this.debuggerClient = debuggerClient; } @Override public void registerBreakpoint(@NotNull XLineBreakpoint<XBreakpointProperties> lineBreakpoint) { debuggerClient.addBreakpoint(toWeaveBreakpoint(lineBreakpoint)); } @NotNull private WeaveBreakpoint toWeaveBreakpoint(@NotNull XLineBreakpoint<XBreakpointProperties> lineBreakpoint) { return new WeaveBreakpoint(lineBreakpoint.getLine() + 1, -1, getExpression(lineBreakpoint)); } @Nullable private String getExpression(@NotNull XLineBreakpoint<XBreakpointProperties> lineBreakpoint) { final XExpression conditionExpression = lineBreakpoint.getConditionExpression(); return conditionExpression != null ? conditionExpression.getExpression() : null; } @Override public void unregisterBreakpoint(@NotNull XLineBreakpoint<XBreakpointProperties> lineBreakpoint, boolean temporary) { debuggerClient.removeBreakpoint(toWeaveBreakpoint(lineBreakpoint)); } }