diff --git a/src/org/ntlab/traceDebugger/DebuggingController.java b/src/org/ntlab/traceDebugger/DebuggingController.java index b9e72c1..8f4f7ec 100644 --- a/src/org/ntlab/traceDebugger/DebuggingController.java +++ b/src/org/ntlab/traceDebugger/DebuggingController.java @@ -34,7 +34,7 @@ private static final DebuggingController theInstance = new DebuggingController(); private TracePoint debuggingTp; private TraceBreakPoint selectedTraceBreakPoint; - private TraceBreakPoints traceBreakPoints = new TraceBreakPoints(); + private TraceBreakPoints traceBreakPoints; private IMarker currentLineMarker; public static final String CURRENT_MARKER_ID = "org.ntlab.traceDebugger.currentMarker"; @@ -67,7 +67,8 @@ TraceJSON trace = new TraceJSON(path); TraceDebuggerPlugin.setAnalyzer(new DeltaExtractionAnalyzer(trace)); VariableUpdatePointFinder.getInstance().setTrace(trace); - traceBreakPoints.clear(); +// traceBreakPoints.clear(); + traceBreakPoints = new TraceBreakPoints(trace); ((CallStackView)TraceDebuggerPlugin.getActiveView(CallStackView.ID)).reset(); ((VariableView)TraceDebuggerPlugin.getActiveView(VariableView.ID)).reset(); ((BreakPointView)TraceDebuggerPlugin.getActiveView(BreakPointView.ID)).update(traceBreakPoints); @@ -79,14 +80,14 @@ MessageDialog.openInformation(null, "Error", "Trace file was not found"); return false; } -// InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "void E.setC(C)", null); -// InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "void _arraySample.D.setC(_arraySample.C)", null); -// InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "void Company.pay(Money,Person)", null); -// InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "void worstCase.P.setM(worstCase.M)", null); -// InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "public void org.jhotdraw.draw.DefaultDrawingView.addToSelection(org.jhotdraw.draw.Figure)", null); -// InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "protected void org.tigris.gef.base.SelectionManager.addFig(org.tigris.gef.presentation.Fig)", null); -// InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "public static org.tigris.gef.base.Selection org.tigris.gef.base.SelectionManager.makeSelectionFor(org.tigris.gef.presentation.Fig)", null); - InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "public void org.argouml.uml.diagram.ui.ActionRemoveFromDiagram.actionPerformed(java.awt.event.ActionEvent)", null); +// InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "E.setC(C)", null); +// InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "D.setC(_arraySample.C)", null); +// InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "Company.pay(Money,Person)", null); +// InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "P.setM(worstCase.M)", null); +// InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "DefaultDrawingView.addToSelection(Figure)", null); +// InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "SelectionManager.addFig(Fig)", null); +// InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "SelectionManager.makeSelectionFor(Fig)", null); + InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "ActionRemoveFromDiagram.actionPerformed(ActionEvent)", null); if (inputDialog.open() != InputDialog.OK) return false; String methodSignature = inputDialog.getValue(); inputDialog = new InputDialog(null, "line No dialog", "Input line no", "", null); diff --git a/src/org/ntlab/traceDebugger/TraceBreakPoints.java b/src/org/ntlab/traceDebugger/TraceBreakPoints.java index 13e0150..b85135f 100644 --- a/src/org/ntlab/traceDebugger/TraceBreakPoints.java +++ b/src/org/ntlab/traceDebugger/TraceBreakPoints.java @@ -4,6 +4,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -12,14 +13,20 @@ import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodInvocation; import org.ntlab.traceAnalysisPlatform.tracer.trace.Statement; +import org.ntlab.traceAnalysisPlatform.tracer.trace.Trace; import org.ntlab.traceAnalysisPlatform.tracer.trace.TracePoint; public class TraceBreakPoints { + private Trace trace; private Map> traceBreakPoints = new HashMap<>(); private List histories = new LinkedList<>(); private ListIterator historyIt = histories.listIterator(); private TracePoint curHistPoint; private int curIdx = -1; + + public TraceBreakPoints(Trace trace) { + this.trace = trace; + } public List getAllTraceBreakPoints() { List list = new ArrayList<>(); @@ -38,7 +45,9 @@ return list; } - public boolean addTraceBreakPoint(String methodSignature, int lineNo, long currentTime) { + public boolean addTraceBreakPoint(String inputSignature, int lineNo, long currentTime) { + String methodSignature = findMethodSignaureOnTrace(inputSignature); + if (methodSignature == null) return false; Map innerMap = traceBreakPoints.get(methodSignature); if (innerMap == null) { innerMap = new HashMap<>(); @@ -55,7 +64,7 @@ return addTraceBreakPoint(methodSignature, lineNo, 0L); } - public void removeTraceBreakPoint(String methodSignature, int lineNo) { + private void removeTraceBreakPoint(String methodSignature, int lineNo) { Map innerMap = traceBreakPoints.get(methodSignature); if (innerMap == null) return; TraceBreakPoint tbp = innerMap.remove(lineNo); @@ -68,6 +77,29 @@ int lineNo = traceBreakPoint.getLineNo(); removeTraceBreakPoint(methodSignature, lineNo); } + + private String findMethodSignaureOnTrace(String inputSignature) { + HashSet methodSignatures = trace.getAllMethodSignatures(); + for (String signature : methodSignatures) { + String signatureFront = signature.substring(0, signature.indexOf("(") + 1); + String inputSignatureFront = inputSignature.substring(0, inputSignature.indexOf("(") + 1); + if (!(signatureFront.endsWith(inputSignatureFront))) continue; + String signatureBack = signature.substring(signature.indexOf("(") + 1); + String[] signatureArgs = signatureBack.split(","); + String inputSignatureBack = inputSignature.substring(inputSignature.indexOf("(") + 1); + String[] inputSignatureArgs = inputSignatureBack.split(","); + if (signatureArgs.length != inputSignatureArgs.length) continue; + boolean isMatch = true; + for (int i = 0; i < signatureArgs.length; i++) { + if (!(signatureArgs[i].endsWith(inputSignatureArgs[i]))) { + isMatch = false; + break; + } + } + if (isMatch) return signature; + } + return null; + } private void addHistories(TraceBreakPoint tbp) { ListIterator it = histories.listIterator();