diff --git a/src/org/ntlab/deltaViewer/CollaborationObjectCallGraph.java b/src/org/ntlab/deltaViewer/CollaborationObjectCallGraph.java index 6f0b59d..adda005 100644 --- a/src/org/ntlab/deltaViewer/CollaborationObjectCallGraph.java +++ b/src/org/ntlab/deltaViewer/CollaborationObjectCallGraph.java @@ -58,8 +58,41 @@ * @param e ExtractedStructure to be merged into the field. */ public void merge(ExtractedStructure e) { - references.addAll(e.getDelta().getSrcSide()); - references.addAll(e.getDelta().getDstSide()); +// references.addAll(e.getDelta().getSrcSide()); +// references.addAll(e.getDelta().getDstSide()); + // Prefer isCreatioin() = true references, if references are equal, but isCreation() is different. + for (Reference srcSideRef: e.getDelta().getSrcSide()) { + if (references.contains(srcSideRef)) { + List refs = getReferences(); // Convert to List from Set. + int idx = refs.indexOf(srcSideRef); + Reference ref = refs.get(idx); + if (srcSideRef.isCreation() != ref.isCreation()) { + if (srcSideRef.isCreation()) { + references.remove(ref); + references.add(srcSideRef); + } + } + + } else { + references.add(srcSideRef); + } + } + for (Reference dstSideRef: e.getDelta().getDstSide()) { + if (references.contains(dstSideRef)) { + List refs = getReferences(); // Convert to List from Set. + int idx = refs.indexOf(dstSideRef); + Reference ref = refs.get(idx); + if (dstSideRef.isCreation() != ref.isCreation()) { + if (dstSideRef.isCreation()) { + references.remove(ref); + references.add(dstSideRef); + } + } + + } else { + references.add(dstSideRef); + } + } // There may be bug. (Two object has each coordinator like JHotDraw Transform) MethodExecution thisStartPoint = startPoints.get(0); @@ -149,7 +182,7 @@ } System.out.println("replaceCollectionChains: "); for (Reference ref: references) { - System.out.println("\t" + ref.getSrcClassName() + "(" + ref.getSrcObjectId() + ")" + " -> " + ref.getDstClassName() + "(" + ref.getDstObjectId() + "): " + ref.isCollection()); + System.out.println("\t" + ref.getSrcClassName() + "(" + ref.getSrcObjectId() + ")" + " -> " + ref.getDstClassName() + "(" + ref.getDstObjectId() + "): " + ref.isCollection() + ", " + ref.isCreation()); } } diff --git a/src/org/ntlab/deltaViewer/CollaborationViewer.java b/src/org/ntlab/deltaViewer/CollaborationViewer.java index a4978e8..1db4730 100644 --- a/src/org/ntlab/deltaViewer/CollaborationViewer.java +++ b/src/org/ntlab/deltaViewer/CollaborationViewer.java @@ -112,7 +112,7 @@ } } doAnimation(curFrame, numFrame); - } else if (curFrameAlias != null && numFrameAlias == null && curFrameAlias.getTimeStamp() < relatedPoints.get(relatedPoints.size() - 1).getStatement().getTimeStamp()) { + } else if (curFrameAlias != null && numFrameAlias == null) { System.out.println("\r\nLast Animation."); doLastAnimation(numFrame, relatedPoints.get(relatedPoints.size() - 1)); } else { diff --git a/src/org/ntlab/deltaViewer/MagnetRONViewer.java b/src/org/ntlab/deltaViewer/MagnetRONViewer.java index 964f8b7..83573ef 100644 --- a/src/org/ntlab/deltaViewer/MagnetRONViewer.java +++ b/src/org/ntlab/deltaViewer/MagnetRONViewer.java @@ -759,13 +759,15 @@ if (vo != sourceVertexObject) { System.out.println("argumentRemove"); mxICell cell = (mxICell)vo.getCell(); - Point absolutePointCell = getAbsolutePointforCell(cell); - cell.getParent().remove(cell); - cell.setParent(mxDefaultParent); - cell.getGeometry().setX(absolutePointCell.getX()); - cell.getGeometry().setY(absolutePointCell.getY()); - deltaAnimation.setVertexAnimation(cell, new mxPoint(vo.getInitialX(), vo.getInitialY())); - deltaAnimation.startVertexAnimation(); + if (!cell.getParent().equals(mxDefaultParent)) { + Point absolutePointCell = getAbsolutePointforCell(cell); + cell.getParent().remove(cell); + cell.setParent(mxDefaultParent); + cell.getGeometry().setX(absolutePointCell.getX()); + cell.getGeometry().setY(absolutePointCell.getY()); + deltaAnimation.setVertexAnimation(cell, new mxPoint(vo.getInitialX(), vo.getInitialY())); + deltaAnimation.startVertexAnimation(); + } methodExecToVertexMap.get(calledMethodExec).getArguments().remove(vo); } } diff --git a/src/tests/CollaborationObjectCallGraphTest.java b/src/tests/CollaborationObjectCallGraphTest.java index 0f40811..3ed9123 100644 --- a/src/tests/CollaborationObjectCallGraphTest.java +++ b/src/tests/CollaborationObjectCallGraphTest.java @@ -29,7 +29,8 @@ // String key = "getterOverlap"; // String key = "setterOverlap"; // String key = "ArgoUMLDelete"; - String key = "JHotDrawTransform"; + String key = "ArgoUMLSelect"; +// String key = "JHotDrawTransform"; // String key = "JHotDrawSelect"; MagnetRONFrameTest magnetRONFrame = new MagnetRONFrameTest(); Map extractedMultipleDeltas = magnetRONFrame.extractMultipleDeltas(key); @@ -60,7 +61,7 @@ } System.out.println("References:"); for (Reference ref: cocg.getReferences()) { - System.out.println("\t" + ref.getSrcClassName() + "(" + ref.getSrcObjectId() + ")" + " -> " + ref.getDstClassName() + "(" + ref.getDstObjectId() + "): " + ref.isCollection()); + System.out.println("\t" + ref.getSrcClassName() + "(" + ref.getSrcObjectId() + ")" + " -> " + ref.getDstClassName() + "(" + ref.getDstObjectId() + "): " + ref.isCollection() + ", " + ref.isCreation()); } System.out.println("StartPoints:"); for (MethodExecution methodExec: cocg.getStartPoints()) { diff --git a/src/tests/MagnetRONFrameTest.java b/src/tests/MagnetRONFrameTest.java index f2e197c..7b85424 100644 --- a/src/tests/MagnetRONFrameTest.java +++ b/src/tests/MagnetRONFrameTest.java @@ -60,7 +60,8 @@ public void startAnimation() { if (visible) { // Change Here! - String key = "ArgoUMLDelete"; +// String key = "ArgoUMLDelete"; + String key = "ArgoUMLSelect"; // String key = "getterOverlap"; // String key = "setterOverlap"; Map extractedMultipleDeltas = extractMultipleDeltas(key); @@ -204,8 +205,10 @@ String[] setterOverlap2 = {null, null, "setterOverlap.G","setterOverlap.C", "traces/setterOverlap.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("setterOverlap2", setterOverlap2); // 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[] 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[] ArgoUMLSelect1 = {"125345735", "1672744985", "java.util.ArrayList", "org.argouml.uml.diagram.static_structure.ui.SelectionClass", "traces\\ArgoUMLBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT_COLLECTION}; map.put("ArgoUMLSelect1", ArgoUMLSelect1); // ArgoUML �I���@�\ (collection) + String[] ArgoUMLSelect2 = {"1672744985", "1675174935", "org.argouml.uml.diagram.static_structure.ui.SelectionClass", "org.argouml.uml.diagram.static_structure.ui.FigClass", "traces\\ArgoUMLBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("ArgoUMLSelect2", ArgoUMLSelect2);// ArgoUML �I���@�\2 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) @@ -218,6 +221,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("ArgoUMLSelect", new ArrayList(Arrays.asList("ArgoUMLSelect1", "ArgoUMLSelect2"))); argsKeysMap.put("JHotDrawTransform", new ArrayList(Arrays.asList("JHotDrawTransform"))); argsKeysMap.put("JHotDrawSelect", new ArrayList(Arrays.asList("JHotDrawSelect1,1", "JHotDrawSelect2", "JHotDrawSelect3,1", "JHotDrawSelect4"))); }