package org.develnext.jphp.debug.impl.breakpoint;
import org.develnext.jphp.debug.impl.Debugger;
import php.runtime.env.Environment;
import php.runtime.env.TraceInfo;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
public class BreakpointManager {
protected final Debugger debugger;
protected Map<String, Breakpoint> breakpoints;
public BreakpointManager(Debugger debugger) {
this.debugger = debugger;
breakpoints = new LinkedHashMap<>();
}
public Breakpoint findFor(Environment env, TraceInfo trace) {
String fileName = trace.getFileName();
if (!fileName.startsWith("/") && !fileName.matches("^[A-Za-z](\\\\:)(.+?)")) {
fileName = debugger.getFileName(fileName);
}
int line = trace.getStartLine();
for (Breakpoint breakpoint : breakpoints.values()) {
if (breakpoint.line == line + 1 && fileName != null && fileName.equalsIgnoreCase(breakpoint.fileName)) {
return breakpoint;
}
}
return null;
}
public Collection<Breakpoint> all() {
return breakpoints.values();
}
public Breakpoint get(String id) {
return breakpoints.get(id);
}
public Breakpoint remove(String id) {
return breakpoints.remove(id);
}
public void set(Breakpoint breakpoint) {
breakpoints.put(String.valueOf(breakpoint.getId()), breakpoint);
}
}