diff --git a/src/org/ntlab/deltaViewer/CollaborationObjectCallGraph.java b/src/org/ntlab/deltaViewer/CollaborationObjectCallGraph.java index ff118a1..64379ee 100644 --- a/src/org/ntlab/deltaViewer/CollaborationObjectCallGraph.java +++ b/src/org/ntlab/deltaViewer/CollaborationObjectCallGraph.java @@ -175,15 +175,25 @@ String srcClassName = ref.getSrcClassName(); String srcObjId = ref.getSrcObjectId(); boolean isFirstRef = true; - for (int j = 0; j < collectionReferences.size(); j++) { - if (collectionReferences.indexOf(ref) != j) { - Reference compareRef = collectionReferences.get(j); - if (srcClassName.equals(compareRef.getDstClassName()) - && srcObjId.equals(compareRef.getDstObjectId())) { - isFirstRef = false; - break; + int idx = 0; + int cnt = 0; + // Count "$" in srcClassName and don't shrink References too much(JHotDrawTransform). + while(true) { + idx = srcClassName.indexOf("$", idx) + 1; + if (idx == 0) break; + cnt++; + } + if (cnt != 1) { + for (int j = 0; j < collectionReferences.size(); j++) { + if (collectionReferences.indexOf(ref) != j) { + Reference compareRef = collectionReferences.get(j); + if (srcClassName.equals(compareRef.getDstClassName()) + && srcObjId.equals(compareRef.getDstObjectId())) { + isFirstRef = false; + break; + } } - } + } } if (isFirstRef) { List collectionChain = new ArrayList<>(); diff --git a/src/org/ntlab/deltaViewer/MagnetRONFrame.java b/src/org/ntlab/deltaViewer/MagnetRONFrame.java index 79d4a24..6aa0cdb 100644 --- a/src/org/ntlab/deltaViewer/MagnetRONFrame.java +++ b/src/org/ntlab/deltaViewer/MagnetRONFrame.java @@ -76,8 +76,8 @@ // String argsKey1 = "JHotDrawTransform"; String argsKey1 = "JHotDrawSelect1,1"; String argsKey2 = "JHotDrawSelect2"; - String argsKey4 = "JHotDrawSelect3"; - String argsKey3 = "JHotDrawSelect4,1"; + String argsKey3 = "JHotDrawSelect3,1"; + String argsKey4 = "JHotDrawSelect4"; // String argsKey = "sampleArray"; // String argsKey = "sampleCollection"; // String argsKey = "sampleCreate"; @@ -572,7 +572,7 @@ String[] JHotDrawTransform = {"176893671", "1952912699", "java.util.HashSet", "org.jhotdraw.draw.RectangleFigure", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", Extract.CONTAINER_COMPONENT_COLLECTION}; map.put("JHotDrawTransform", JHotDrawTransform); // JHotDraw �ړ��@�\ (collection) String[] JHotDrawSelect1 = {"758826749", "1952912699", "org.jhotdraw.draw.tool.DefaultDragTracker", "org.jhotdraw.draw.RectangleFigure", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", Extract.CONTAINER_COMPONENT}; map.put("JHotDrawSelect1", JHotDrawSelect1); // JHotDraw �I���@�\1 String[] JHotDrawSelect2 = {"1378082106", "1952912699", "java.util.HashSet", "org.jhotdraw.draw.RectangleFigure", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", Extract.CONTAINER_COMPONENT_COLLECTION}; map.put("JHotDrawSelect2", JHotDrawSelect2); // JHotDraw �I���@�\2 (collection) - String[] JHotDrawSelect3 = {"1787265837", "1952912699", "java.util.LinkedHashSet", "org.jhotdraw.draw.RectangleFigure", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", Extract.CONTAINER_COMPONENT_COLLECTION}; map.put("JHotDrawSelect3", JHotDrawSelect3); // JHotDraw �I���@�\3 (collection) - String[] JHotDrawSelect4 = {"599587451", "758826749", "org.jhotdraw.draw.tool.DelegationSelectionTool", "org.jhotdraw.draw.tool.DefaultDragTracker", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", Extract.CONTAINER_COMPONENT}; map.put("JHotDrawSelect4", JHotDrawSelect4); // JHotDraw �I���@�\3 (collection) + String[] JHotDrawSelect3 = {"599587451", "758826749", "org.jhotdraw.draw.tool.DelegationSelectionTool", "org.jhotdraw.draw.tool.DefaultDragTracker", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", Extract.CONTAINER_COMPONENT}; map.put("JHotDrawSelect3", JHotDrawSelect3); // JHotDraw �I���@�\3 (collection) + String[] JHotDrawSelect4 = {"1787265837", "1952912699", "java.util.LinkedHashSet", "org.jhotdraw.draw.RectangleFigure", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", Extract.CONTAINER_COMPONENT_COLLECTION}; map.put("JHotDrawSelect4", JHotDrawSelect4); // JHotDraw �I���@�\4 (collection) } } diff --git a/src/org/ntlab/deltaViewer/MagnetRONViewer.java b/src/org/ntlab/deltaViewer/MagnetRONViewer.java index f54d8b4..2c28c86 100644 --- a/src/org/ntlab/deltaViewer/MagnetRONViewer.java +++ b/src/org/ntlab/deltaViewer/MagnetRONViewer.java @@ -145,11 +145,11 @@ // Make VertexMethodExecution of called method execution. MethodExecution calledMethodExec = ((MethodInvocation) alias.getOccurrencePoint().getStatement()).getCalledMethodExecution(); if (!methodExecToVertexMap.containsKey(calledMethodExec)) { - if (curFrame == 0) { - MethodExecution methodExec = alias.getMethodExecution(); - if (methodExec.getSignature() != calledMethodExec.getSignature() && objectToVertexMap.containsKey(methodExec.getThisObjId())) { - createMethodExecutionVertex(methodExec.getThisObjId(), methodExec.getSignature(), methodExec); - } + MethodExecution methodExec = alias.getMethodExecution(); + if (!methodExecToVertexMap.containsKey(methodExec) + && methodExec.getSignature() != calledMethodExec.getSignature() + && objectToVertexMap.containsKey(methodExec.getThisObjId())) { + createMethodExecutionVertex(methodExec.getThisObjId(), methodExec.getSignature(), methodExec); } createMethodExecutionVertex(alias.getObjectId(), calledMethodExec.getSignature(), calledMethodExec); update(); diff --git a/src/tests/CollaborationAliasCollectorTest.java b/src/tests/CollaborationAliasCollectorTest.java index df5c686..c0d52cf 100644 --- a/src/tests/CollaborationAliasCollectorTest.java +++ b/src/tests/CollaborationAliasCollectorTest.java @@ -18,7 +18,9 @@ void testMerge() { // Change Here! // String key = "getterOverlap"; - String key = "setterOverlap"; +// String key = "setterOverlap"; + String key = "JHotDrawSelect"; + MagnetRONFrameTest magnetRONFrame = new MagnetRONFrameTest(); Map extractedMultipleDeltas = magnetRONFrame.extractMultipleDeltas(key); List eList = new ArrayList<>(extractedMultipleDeltas.keySet()); @@ -31,6 +33,7 @@ cac.merge(dac); } } + System.out.println("mergedAliasList: "); for (Alias alias: cac.getAliasList()) { System.out.println(alias.getObjectId() + ", " + alias.getMethodSignature() + " l." + alias.getLineNo() + " : " + alias.getAliasType().toString() + ", (" + alias.getMethodExecution().getEntryTime() + ", " + alias.getMethodExecution().getExitTime() + "), " + alias.getTimeStamp()); } diff --git a/src/tests/CollaborationObjectCallGraphTest.java b/src/tests/CollaborationObjectCallGraphTest.java index 6b1662a..0f40811 100644 --- a/src/tests/CollaborationObjectCallGraphTest.java +++ b/src/tests/CollaborationObjectCallGraphTest.java @@ -28,7 +28,8 @@ // Change Here! // String key = "getterOverlap"; // String key = "setterOverlap"; - String key = "ArgoUMLDelete"; +// String key = "ArgoUMLDelete"; + String key = "JHotDrawTransform"; // String key = "JHotDrawSelect"; MagnetRONFrameTest magnetRONFrame = new MagnetRONFrameTest(); Map extractedMultipleDeltas = magnetRONFrame.extractMultipleDeltas(key); diff --git a/src/tests/MagnetRONFrameTest.java b/src/tests/MagnetRONFrameTest.java index 916b156..f2e197c 100644 --- a/src/tests/MagnetRONFrameTest.java +++ b/src/tests/MagnetRONFrameTest.java @@ -97,10 +97,21 @@ Map> argsKeysMap = new HashMap<>(); setArgsKeysForMultipleDeltasExtract(argsKeysMap, argsMap); List argsKeys = argsKeysMap.get(key); - TraceJSON trace = new TraceJSON(argsMap.get(argsKeys.get(0))[4]); + String firstKey = argsKeys.get(0); + if (firstKey.contains(",")) { + String[] splitKeys = firstKey.split(","); + firstKey = splitKeys[0]; + } + TraceJSON trace = new TraceJSON(argsMap.get(firstKey)[4]); DeltaExtractorJSON s = new DeltaExtractorJSON(trace); for (String argsKey: argsKeys) { + int index = 0; + if (argsKey.contains(",")) { + String[] splitKeys = argsKey.split(","); + argsKey = splitKeys[0]; + index = Integer.parseInt(splitKeys[splitKeys.length - 1]); + } List eList = new ArrayList<>(); List dacList = new ArrayList<>(); if (argsMap.get(argsKey)[5] == CONTAINER_COMPONENT || argsMap.get(argsKey)[5] == CONTAINER_COMPONENT_COLLECTION) { @@ -124,15 +135,34 @@ // reference.setArray(true); // reference.setFinalLocal(true); // reference.setCreation(true); - IAliasTracker dac = new DeltaAliasCollector(); - ExtractedStructure e = s.extract(reference, tp, dac); - System.out.println(e); - if (e != null) { - eList.add(e); - dacList.add(dac); - System.out.println("add" + eList.size() + ", " + dacList.size()); - } - System.out.println("---------------------------"); + ExtractedStructure e = null; + do { + if (e == null) { + IAliasTracker dac = new DeltaAliasCollector(); + e = s.extract(reference, tp, dac); + System.out.println(e); + if (e != null) { + eList.add(e); + dacList.add(dac); + System.out.println("add" + eList.size() + ", " + dacList.size()); + System.out.println(e); + } + System.out.println("---------------------------"); + } else { + tp = e.getRelatedTracePoint().duplicate(); + tp.stepBackOver(); + IAliasTracker dac = new DeltaAliasCollector(); + e = s.extract(reference, tp, dac); + System.out.println(e); + if (e != null) { + eList.add(e); + dacList.add(dac); + System.out.println("add" + eList.size() + ", " + dacList.size()); + System.out.println(e); + } + System.out.println("---------------------------"); + } + } while (e != null); } } } else { @@ -144,7 +174,7 @@ eList.add(e); dacList.add(dac); } - extractedMultipleDeltas.put(eList.get(0), dacList.get(0)); + extractedMultipleDeltas.put(eList.get(index), dacList.get(index)); } return extractedMultipleDeltas; } @@ -176,7 +206,11 @@ // MagnetRON Experiment String[] ArgoUMLDelete1 = {null, null, "public void org.argouml.uml.diagram.ui.ActionRemoveFromDiagram.actionPerformed(", "org.argouml.uml.diagram.static_structure.ui.FigClass", "traces\\ArgoUMLBenchmarkWithMoreStandardClasses.trace", THIS_ANOTHER}; map.put("ArgoUMLDelete1", ArgoUMLDelete1);// ArgoUML �폜�@�\1 (this to another) String[] ArgoUMLDelete2 = {"450474599", "1675174935", "java.util.Vector", "org.argouml.uml.diagram.static_structure.ui.FigClass", "traces\\ArgoUMLBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT_COLLECTION}; map.put("ArgoUMLDelete2", ArgoUMLDelete2); // ArgoUML �폜�@�\2 (collection) + String[] JHotDrawTransform = {"176893671", "1952912699", "java.util.HashSet", "org.jhotdraw.draw.RectangleFigure", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT_COLLECTION}; map.put("JHotDrawTransform", JHotDrawTransform); // JHotDraw �ړ��@�\ (collection) + String[] JHotDrawSelect1 = {"758826749", "1952912699", "org.jhotdraw.draw.tool.DefaultDragTracker", "org.jhotdraw.draw.RectangleFigure", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("JHotDrawSelect1", JHotDrawSelect1); // JHotDraw �I���@�\1 String[] JHotDrawSelect2 = {"1378082106", "1952912699", "java.util.HashSet", "org.jhotdraw.draw.RectangleFigure", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT_COLLECTION}; map.put("JHotDrawSelect2", JHotDrawSelect2); // JHotDraw �I���@�\2 (collection) + String[] JHotDrawSelect3 = {"599587451", "758826749", "org.jhotdraw.draw.tool.DelegationSelectionTool", "org.jhotdraw.draw.tool.DefaultDragTracker", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("JHotDrawSelect3", JHotDrawSelect3); // JHotDraw �I���@�\3 (collection) + String[] JHotDrawSelect4 = {"1787265837", "1952912699", "java.util.LinkedHashSet", "org.jhotdraw.draw.RectangleFigure", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT_COLLECTION}; map.put("JHotDrawSelect4", JHotDrawSelect4); // JHotDraw �I���@�\4 (collection) } private void setArgsKeysForMultipleDeltasExtract(Map> argsKeysMap, Map argsMap){ @@ -184,6 +218,7 @@ argsKeysMap.put("getterOverlap", new ArrayList(Arrays.asList("getterOverlap2", "getterOverlap1"))); argsKeysMap.put("setterOverlap", new ArrayList(Arrays.asList("setterOverlap1", "setterOverlap2"))); argsKeysMap.put("ArgoUMLDelete", new ArrayList(Arrays.asList("ArgoUMLDelete1", "ArgoUMLDelete2"))); - argsKeysMap.put("JHotDrawSelect", new ArrayList(Arrays.asList("JHotDrawSelect2"))); + argsKeysMap.put("JHotDrawTransform", new ArrayList(Arrays.asList("JHotDrawTransform"))); + argsKeysMap.put("JHotDrawSelect", new ArrayList(Arrays.asList("JHotDrawSelect1,1", "JHotDrawSelect2", "JHotDrawSelect3,1", "JHotDrawSelect4"))); } }