diff --git a/src/org/ntlab/deltaViewer/DeltaViewer.java b/src/org/ntlab/deltaViewer/DeltaViewer.java index ea36f70..a7e527e 100644 --- a/src/org/ntlab/deltaViewer/DeltaViewer.java +++ b/src/org/ntlab/deltaViewer/DeltaViewer.java @@ -18,6 +18,7 @@ import java.util.Map.Entry; import javax.swing.JFrame; +import javax.swing.JPanel; import org.jgrapht.graph.DefaultEdge; import org.jgrapht.graph.DirectedWeightedPseudograph; @@ -63,7 +64,7 @@ //BUG: edge drawing order. -> parent //BUG: methodExecution drawing order. -> parent //BUG: ObjectVertex position when Resize ObjectVertex. O -public class DeltaViewer { +public class DeltaViewer extends JPanel { private static Dimension DEFAULT_SIZE = new Dimension(1300, 700); private static String WINDOW_TITLE = "Delta Viewer"; @@ -74,7 +75,6 @@ private Map methodExecToVertexMap = new LinkedHashMap<>(); private Map edgeMap = new HashMap<>(); - private JFrame frame; private DeltaGraphAdapter mxgraph; // No clue what this does but it is needed. private mxICell mxDefaultParent; @@ -97,35 +97,21 @@ public mxInteractiveCanvas createCanvas() { return new CurvedCanvas(this); } - }; + }; deltaAnimation = new DeltaAnimation(mxgraph, mxgraphComponent); + mxgraphComponent.setPreferredSize(DEFAULT_SIZE); + add(mxgraphComponent, BorderLayout.CENTER); } - public DeltaViewer(ExtractedStructure extractedStructure, DeltaAliasCollector deltaAliasCollector) { - this(); + public void init(ExtractedStructure extractedStructure, DeltaAliasCollector deltaAliasCollector) { this.eStructure = extractedStructure; this.deltaAliasCollector = deltaAliasCollector; // init(); } /** Initialize JFrame, make vertex object and edge object. */ - public void init() { + public void initAnimation() { // Build a frame, create a graph, and add the graph to the frame so you can actually see the graph. - if(eStructure != null) { - List srcSide = eStructure.getDelta().getSrcSide(); - List dstSide = eStructure.getDelta().getDstSide(); - if (srcSide.size() >= 1 && dstSide.size() >= 1) { - WINDOW_TITLE = "extract delta of:" + eStructure.getDelta().getSrcSide().get(0).getDstClassName() + "(" + eStructure.getDelta().getSrcSide().get(0).getDstObjectId() + ")" + " -> " + eStructure.getDelta().getDstSide().get(0).getDstClassName() + "(" + eStructure.getDelta().getDstSide().get(0).getDstObjectId() + ")"; - } - } - - frame = new JFrame(WINDOW_TITLE); - frame.setSize(DEFAULT_SIZE); - frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - - frame.add(mxgraphComponent, BorderLayout.CENTER); - frame.setVisible(true); - createObjectVertices(eStructure); createEdgeToObject(deltaAliasCollector.getAliasList(), deltaAliasCollector.getAliasPairList()); @@ -150,7 +136,6 @@ // scale = 1.5; view.setScale(scale); deltaAnimation.setScale(scale); - update(); } @@ -1321,7 +1306,7 @@ if (methodSignature.contains(" ")) { System.out.println(methodSignature); - methodSignature = formatMethodSignature(methodSignature); + methodSignature = formatMethodSignature(methodSignature, methodExec.getThisClassName()); } // Add a vertex to the graph in a transactional fashion. The vertex is actually a 'cell' in jgraphx terminology. @@ -1700,6 +1685,9 @@ // deltaAnimation.setExpandEdgeAnimation(new mxPoint(absolutPointSourceVertexCell.getX() + (sourceVertexCell.getGeometry().getWidth() / 2), absolutPointSourceVertexCell.getY() + sourceVertexCell.getGeometry().getHeight()), new mxPoint(absolutPointTargetVertexCell.getX() + (targetVertexCell.getGeometry().getWidth() / 2), absolutPointTargetVertexCell.getY())); // deltaAnimation.startExpandEdgeAnimation(); Object edge = mxgraph.insertDeltaEdge(mxDefaultParent, methodSignature, null, sourceVertexCell, targetVertexCell); + ((mxCell)edge).getParent().remove(((mxCell)edge)); + ((mxCell)edge).setParent(mxDefaultParent); + mxgraph.orderCells(false, new Object[] {edge}); ((mxCell)edge).setStyle("exitX=0.5;exitY=1;exitPerimeter=1;entryX=0.5;entryY=0;entryPerimeter=1;"); mxgraph.removeCells(new Object[]{cloneTargetVertexCell}); edgeMap.put(methodSignature, new Edge(methodSignature, TypeName.Call, edge)); @@ -1743,14 +1731,24 @@ return names; } - private String formatMethodSignature(String methodSignature) { + private String formatMethodSignature(String methodSignature, String thisClassName) { // Step1 : split "(" String[] methodSignatures = methodSignature.split("\\("); methodSignature = methodSignatures[0]; // Step2 : split " " methodSignatures = methodSignature.split(" "); + String tmpMethodSignature = methodSignatures[methodSignatures.length-1]; + // Step2 : split "." + String[] thisClassNames = thisClassName.split("\\."); + methodSignatures = tmpMethodSignature.split("\\."); StringBuffer sb = new StringBuffer(); - sb.append(methodSignatures[methodSignatures.length-1]); + for (int i = 0; i < methodSignatures.length; i++) { + if ((thisClassNames.length > i && !methodSignatures[i].equals(thisClassNames[i])) || thisClassNames.length <= i) { + sb.append(methodSignatures[i]); + if (methodSignatures.length - i > 1) sb.append("."); + } + } +// sb.append(tmpMethodSignature); sb.append("()"); return sb.toString(); } @@ -1799,7 +1797,7 @@ } System.out.println("\nEdge"); for (Edge e: edgeMap.values()) { - System.out.println(e.getLabel()); + System.out.println(e.getLabel() + "(" + ((mxICell)e.getCell()).getId() + ")"); if (((mxICell)e.getCell()).getParent() != null) { System.out.println(" " + ((mxICell)e.getCell()).getParent().getId()); } diff --git a/src/org/ntlab/deltaViewer/DeltaViewerSample.java b/src/org/ntlab/deltaViewer/DeltaViewerSample.java index 75f04bb..d505b5d 100644 --- a/src/org/ntlab/deltaViewer/DeltaViewerSample.java +++ b/src/org/ntlab/deltaViewer/DeltaViewerSample.java @@ -28,246 +28,10 @@ * @author Nitta Lab. */ public class DeltaViewerSample { - // Delta Extract Type - protected static final String CONTAINER_COMPONENT = "Container-Component"; - protected static final String CONTAINER_COMPONENT_COLLECTION = "Container-Component(Collection)"; - protected static final String THIS_ANOTHER = "This-Another"; - - - /** - * @param args - */ public static void main(String[] args) { -// DeltaExtractorJSON dex = new DeltaExtractorJSON(trace); -// HashMap threads = trace.getAllThreads(); -// ThreadInstance thread = threads.values().iterator().next(); // �Ō�̃X���b�h�����Ă��邾���c -// TracePoint tp = thread.getRoot().get(thread.getRoot().size() - 1).getExitPoint(); - -// System.out.println("===== All Statements Backward ====="); -// TracePoint tp = null; -// ExtractedStructure e = null; -// DeltaAliasCollector dac = new DeltaAliasCollector(); -// long restart = 0L; -// for(;;) { -// tp = trace.traverseStatementsInTraceBackward(new IStatementVisitor() { -// @Override -// public boolean preVisitStatement(Statement statement) { -// System.out.println("pre:" + statement.getThreadNo() + ":" + statement.getTimeStamp()); -// if(statement instanceof FieldUpdate) { -// FieldUpdate fu = (FieldUpdate) statement; -// if(!Trace.isNull(fu.getValueObjId()) && !Trace.isPrimitive(fu.getValueClassName())) { -// return true; -// } -// } -// return false; -// } -// -// @Override -// public boolean postVisitStatement(Statement statement) { -// System.out.println("post:" + statement.getThreadNo() + ":" + statement.getTimeStamp()); -// return false; -// } -// }, restart); -// if(tp == null || !tp.isValid()) break; -// e = dex.extract(new Reference(jHotDrawSelect3_1[0], jHotDrawSelect3_1[1], jHotDrawSelect3_1[2], jHotDrawSelect3_1[3]), tp, dac); -// dex.extract(tp); -// Statement statement = tp.getStatement(); -// if(statement instanceof MethodInvocation) { -// restart = ((MethodInvocation)tp.getStatement()).getCalledMethodExecution().getExitTime(); -// } else { -// restart = tp.getStatement().getTimeStamp(); -// } -// } -// trace.traverseStatementsInTraceBackward(new IStatementVisitor() { -// @Override -// public boolean preVisitStatement(Statement statement) { -// System.out.println("post:" + statement.getClass().getName() + ":" + statement.getTimeStamp()); -// return false; -// } -// @Override -// public boolean postVisitStatement(Statement statement) { -// System.out.println("pre:" + statement.getClass().getName() + ":" + statement.getTimeStamp()); -// return false; -// } -// }); -// } - -// HashSet marked = trace.getMarkedMethodSignatures(1255991806833871L, 1255991808597322L); -// HashSet marked = trace.getMarkedMethodSignatures(1699553004208835L, 1699553004739523L); -// System.out.println("===== Marked Methods ====="); -// for (String method: marked) { -// System.out.println(method); -// } -// HashSet unmarked = trace.getUnmarkedMethodSignatures(1255991806833871L, 1255991808597322L); -// HashSet unmarked = trace.getUnmarkedMethodSignatures(1699553004208835L, 1699553004739523L); -// System.out.println("===== Unmarked Methods ====="); -// for (String method: unmarked) { -// System.out.println(method); -// } - - // Change! - // setArray, setCollection(2��ڈȍ~�͕K�v�Ȃ�) , foreach(thread) - // ArrayList��add����ĂȂ� - // �t�B�[���h�ɑ������Ă��Ȃ� -// HashMap threads = trace.getAllThreads(); -// for(ThreadInstance ti: threads.values()) { -// ArrayList roots = ti.getRoot(); -// for(MethodExecution root: roots) { -// traverseMethodExecution(root); -// } -// } - - Map argsMap = new HashMap<>(); - setArgmentsForDeltaExtract(argsMap); - //���o�������f���^�̈������i�[����Map��key -// String argsKey = "ArgoUMLSelect"; - String argsKey = "ArgoUMLDelete1"; -// String argsKey = "JHotDrawTransform"; -// String argsKey = "JHotDrawSelect3"; -// String argsKey = "sampleArray"; -// String argsKey = "sampleCollection"; -// String argsKey = "sampleCreate"; -// String argsKey = "sampleStatic"; -// String argsKey = "delta_eg1"; -// String argsKey = "pre_Exp1"; -// String argsKey = "worstCase"; -// String argsKey = "sample1"; -// String argsKey = "objTrace5"; - - long time = System.nanoTime(); - TraceJSON trace = new TraceJSON(argsMap.get(argsKey)[4]); - DeltaExtractorJSON s = new DeltaExtractorJSON(trace); - if (argsMap.get(argsKey)[5] == CONTAINER_COMPONENT || argsMap.get(argsKey)[5] == CONTAINER_COMPONENT_COLLECTION) { - HashMap threads = trace.getAllThreads(); - - List eList = new ArrayList<>(); - List dacList = new ArrayList<>(); - if (threads.values().size() == 1) { - ThreadInstance thread = threads.values().iterator().next(); // �Ō�̃X���b�h�����Ă��邾���c - TracePoint tp = thread.getRoot().get(thread.getRoot().size() - 1).getExitPoint(); - Reference reference = new Reference(argsMap.get(argsKey)[0], argsMap.get(argsKey)[1], argsMap.get(argsKey)[2], argsMap.get(argsKey)[3]); - DeltaAliasCollector dac = new DeltaAliasCollector(); - ExtractedStructure e = s.extract(reference, tp, dac); - eList.add(e); - dacList.add(dac); - } else { - for (ThreadInstance thread: threads.values()) { - TracePoint tp = thread.getRoot().get(thread.getRoot().size() - 1).getExitPoint(); - Reference reference = new Reference(argsMap.get(argsKey)[0], argsMap.get(argsKey)[1], argsMap.get(argsKey)[2], argsMap.get(argsKey)[3]); - if (argsMap.get(argsKey)[5] == CONTAINER_COMPONENT_COLLECTION) { - reference.setCollection(true); - } -// reference.setArray(true); -// reference.setFinalLocal(true); -// reference.setCreation(true); - DeltaAliasCollector 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("---------------------------"); - } - } - - startDeltaViewer(eList.get(0), dacList.get(0)); - } else { - DeltaAliasCollector dac = new DeltaAliasCollector(); - MethodExecution me = trace.getLastMethodExecution(argsMap.get(argsKey)[2]); - Map refs = me.getObjectReferences(argsMap.get(argsKey)[3]); - ObjectReference ref = refs.keySet().iterator().next(); - ExtractedStructure e = s.extract(refs.get(ref), ref, dac); - - startDeltaViewer(e, dac); - - } - } - - private static void startDeltaViewer(ExtractedStructure e, DeltaAliasCollector dac) { - DeltaViewer dv = new DeltaViewer(e, dac); - List aliasList = new ArrayList<>(dac.getAliasList()); - -// dv.setCoordinatorPoint(1200, 100); - dv.init(); -// for(int i = 0; i < aliasList.size(); i++) { -// System.out.println(aliasList.get(i).getObjectId() + ", " + aliasList.get(i).getMethodSignature() + " l." + aliasList.get(i).getLineNo() + " : " + aliasList.get(i).getAliasType().toString()); -// } - for (int i = 0; i <= aliasList.size(); i++) { - dv.stepToAnimation(i); - } - } - - private static void setArgmentsForDeltaExtract(Map map){ - - // one delta extract - String[] traceSample1 = {null, null, "","", "traces/traceSample1.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("traceSample1", traceSample1); - String[] traceSample2 = {null, null, "","", "traces/traceSample2.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("traceSample2", traceSample2); - String[] presenSample = {null, null, "","", "traces/presenSample.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("presenSample", presenSample); - String[] worstCase = {null, null, "worstCase.P", "worstCase.M", "traces/_worstCase.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("worstCase", worstCase); - String[] sample1 = {null, null, "sample1.D", "sample1.C", "traces\\sample1.trace", CONTAINER_COMPONENT_COLLECTION}; map.put("sample1", sample1); - String[] sampleArray = {null, null, "sampleArray.D", "sampleArray.C", "traces\\sampleArray.trace", CONTAINER_COMPONENT_COLLECTION}; map.put("sampleArray", sampleArray); - String[] sampleCollection = {null, null, "sampleCollection.D", "sampleCollection.C", "traces\\sampleCollection.trace", CONTAINER_COMPONENT_COLLECTION}; map.put("sampleCollection", sampleCollection); - String[] sampleCreate = {null, null, "sampleCreate.D", "sampleCreate.C", "traces\\sampleCreate.trace", CONTAINER_COMPONENT_COLLECTION}; map.put("sampleCreate", sampleCreate); - String[] sampleStatic = {null, null, "sampleStatic.D", "sampleStatic.C", "traces\\sampleStatic.trace", CONTAINER_COMPONENT_COLLECTION}; map.put("sampleStatic", sampleStatic); - String[] delta_eg1 = {null, null, "E","C", "traces/testTrace.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("delta_eg1", delta_eg1); - String[] delta_eg5 = {null, null, "E","C", "traces/testTrace5.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("delta_eg5", delta_eg5); - String[] testTrace2 = {null, null, "","", "traces/testTrace2.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("testTrace2", testTrace2); - String[] testTrace3 = {null, null, "","", "traces/testTrace3.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("testTrace3", testTrace3); - String[] objTrace5 = {null, null, "A","B", "traces/objTraceSample5.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("objTrace5", objTrace5); - - // �\�������̂Ƃ��ɗp����Toy program - String[] pre_Exp1 = {null, null, "E","C", "traces/pre_Exp1.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("pre_Exp1", pre_Exp1); - String[] pre_Exp2 = {null, null, "E","C", "traces/pre_Exp2.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("pre_Exp2", pre_Exp2); - String[] pre_Exp3 = {null, null, "E","C", "traces/pre_Exp3.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("pre_Exp3", pre_Exp3); - String[] pre_Exp4 = {null, null, "E","C", "traces/pre_Exp4.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("pre_Exp4", pre_Exp4); - String[] pre_Exp5 = {null, null, "E","C", "traces/pre_Exp5.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("pre_Exp5", pre_Exp5); - String[] pre_Exp6 = {null, null, "E","C", "traces/pre_Exp6.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("pre_Exp6", pre_Exp6); - String[] pre_Exp7 = {null, null, "E","C", "traces/pre_Exp7.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("pre_Exp7", pre_Exp7); - - String[] test = {null, null, "org.argouml.uml.diagram.static_structure.ui.FigClass","org.tigris.gef.base.LayerPerspectiveMutable", "traces\\ArgoUMLBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("test", test); - String[] testVectorAddElement = {null, null, "java.util.Vector", "org.tigris.gef.base.LayerPerspective", "traces\\ArgoUMLBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("testVectorAddElement", testVectorAddElement);//trace.java��"addElement("�ɑΉ�����悤�ɒlj� - String[] ArgoUMLBenchmark = {"", "", "", "", "traces/ArgoUMLBenchmark.trace", CONTAINER_COMPONENT}; map.put("ArgoUMLBenchmark", ArgoUMLBenchmark); - String[] ArgoUMLBenchmarkWithMoreStandardClasses = {"", "", "", "", "traces/ArgoUMLBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("ArgoUMLBenchmarkWithMoreStandardClasses", ArgoUMLBenchmarkWithMoreStandardClasses); -// String[] ArgoUMLSelect0_1 = {"1994249754", "1141430801", "java.util.ArrayList", "org.argouml.uml.diagram.static_structure.ui.SelectionClass","traces\\ArgoUMLBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("ArgoUMLSelect0_1", ArgoUMLSelect0_1); - String[] ArgoUMLSelect0_1 = {"1994249754", "1141430801", null, null,"traces\\ArgoUMLBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("ArgoUMLSelect0_1", ArgoUMLSelect0_1); - /*Vector.addElemnt()�ɑΉ��ς�*/String[] ArgoUMLDelete0_2 = {"1784213708", "1337038091", "java.util.Vector", "org.argouml.uml.diagram.static_structure.ui.FigClass", "traces\\ArgoUMLBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("ArgoUMLDelete0_2", ArgoUMLDelete0_2); - /*�X�ɉߋ�mouse.Pressed(), mouseReleased()*/String[] ArgoUMLPlace1_1 = {null, null, "java.util.ArrayList", "org.argouml.uml.diagram.static_structure.ui.FigClass", "traces\\ArgoUMLBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("ArgoUMLPlace1_1", ArgoUMLPlace1_1); -// String[] ArgoUMLSelect1_2 = {"1994249754", "1141430801", "java.util.ArrayList", "org.argouml.uml.diagram.static_structure.ui.SelectionClass", "traces\\ArgoUMLBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("ArgoUMLSelect1_2", ArgoUMLSelect1_2); -// String[] ArgoUMLSelect1_2 = {"125345735", "1672744985", "java.util.ArrayList", "org.argouml.uml.diagram.static_structure.ui.SelectionClass", "traces\\ArgoUMLBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("ArgoUMLSelect1_2", ArgoUMLSelect1_2); - String[] jEditBenchmark = {"", "", "", "", "traces/jEditBenchmark.trace", CONTAINER_COMPONENT}; map.put("jEditBenchmark", jEditBenchmark); - String[] jEditSelect2_1 = {"932187140", "1572482885", "java.util.ArrayList", "org.gjt.sp.jedit.textarea.Selection$Range", "traces\\jEditBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("jEditSelect2_1", jEditSelect2_1); - String[] jHotDrawBenchmark = {"", "", "", "", "traces/jHotDrawBenchmark.trace", CONTAINER_COMPONENT}; map.put("jHotDrawBenchmark", jHotDrawBenchmark); - String[] jHotDrawBenchmarkWithMoreStandardClasses = {"", "", "", "", "traces/jHotDrawBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("jHotDrawBenchmarkWithMoreStandardClasses", jHotDrawBenchmarkWithMoreStandardClasses); - /*List.toArray()�ɑΉ�������K�v������H*/String[] jEditDelete2_2 = {null, null, "org.gjt.sp.jedit.buffer.ContentManager", "java.util.ArrayList", "traces\\jEditBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("jEditDelete2_2", jEditDelete2_2); - String[] jHotDrawSelect3_1 = {"361298449", "212532447", "java.util.LinkedHashSet", "org.jhotdraw.draw.RectangleFigure", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("jHotDrawSelect3_1", jHotDrawSelect3_1); - String[] jHotDrawMove3_2 = {"778703711", "212532447", "org.jhotdraw.draw.tool.DefaultDragTracker", "org.jhotdraw.draw.RectangleFigure", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("jHotDrawMove3_2", jHotDrawMove3_2); - /*�s��*/String[] jHotDrawMove3_2_1 = {null, null, "java.util.ArrayList", "org.jhotdraw.draw.RectangleFigure", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("jHotDrawMove3_2_1", jHotDrawMove3_2_1); - String[] jHotDrawPlace4_1 = {"1284329882", "212532447", "java.util.HashMap", "org.jhotdraw.draw.RectangleFigure", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("jHotDrawPlace4_1", jHotDrawPlace4_1); -// String[] jHotDrawSelect4_2 = {"361298449", "212532447", "java.util.LinkedHashSet", "org.jhotdraw.draw.RectangleFigure", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("jHotDrawSelect4_2", jHotDrawSelect4_2); - String[] jHotDrawSelect4_2 = {null, null, "java.util.LinkedHashSet", "org.jhotdraw.draw.RectangleFigure", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("jHotDrawSelect4_2", jHotDrawSelect4_2); - - // MagnetRON Experiment - String[] ArgoUMLSelect = {"125345735", "1672744985", "java.util.ArrayList", "org.argouml.uml.diagram.static_structure.ui.SelectionClass", "traces\\ArgoUMLBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT_COLLECTION}; map.put("ArgoUMLSelect", ArgoUMLSelect); // ArgoUML �I���@�\ (collection) - 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 = {"1787265837", "1952912699", "java.util.LinkedHashSet", "org.jhotdraw.draw.RectangleFigure", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT_COLLECTION}; map.put("JHotDrawSelect3", JHotDrawSelect3); // JHotDraw �I���@�\3 (collection) - } - - private static void traverseMethodExecution(MethodExecution m) { - System.out.println(m.getSignature()); - for(Statement ms :m.getStatements()) { - if(ms instanceof FieldAccess) { - System.out.println(((FieldAccess)ms).getFieldName()); - } - } - for(MethodExecution m2: m.getChildren()) { - traverseMethodExecution(m2); - } + MagnetRONFrame frame = new MagnetRONFrame(); + frame.setVisible(true); + frame.startAnimation(); } } diff --git a/src/org/ntlab/deltaViewer/MagnetRONFrame.java b/src/org/ntlab/deltaViewer/MagnetRONFrame.java new file mode 100644 index 0000000..4f62419 --- /dev/null +++ b/src/org/ntlab/deltaViewer/MagnetRONFrame.java @@ -0,0 +1,285 @@ +package org.ntlab.deltaViewer; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.HeadlessException; +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.swing.JFrame; + +import org.ntlab.deltaExtractor.Alias; +import org.ntlab.deltaExtractor.DeltaExtractorJSON; +import org.ntlab.deltaExtractor.ExtractedStructure; +import org.ntlab.trace.MethodExecution; +import org.ntlab.trace.ObjectReference; +import org.ntlab.trace.Reference; +import org.ntlab.trace.ThreadInstance; +import org.ntlab.trace.TraceJSON; +import org.ntlab.trace.TracePoint; + +import javafx.beans.property.SimpleMapProperty; + +public class MagnetRONFrame extends JFrame { + // Delta Extract Type + protected static final String CONTAINER_COMPONENT = "Container-Component"; + protected static final String CONTAINER_COMPONENT_COLLECTION = "Container-Component(Collection)"; + protected static final String THIS_ANOTHER = "This-Another"; + + private DeltaViewer deltaViewer = null; + + private static Dimension DEFAULT_SIZE = new Dimension(1300, 700); + private static String WINDOW_TITLE = "Delta Viewer"; + + public MagnetRONFrame() throws HeadlessException { + super(WINDOW_TITLE); + setSize(DEFAULT_SIZE); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setLayout(new BorderLayout()); + this.deltaViewer = new DeltaViewer(); + getContentPane().add(deltaViewer, BorderLayout.CENTER); + pack(); + } + + public void startAnimation() { + Map.Entry extracted = extract(); + new Thread() { + public void run() { + startDeltaViewer(extracted.getKey(), extracted.getValue()); + } + }.start(); + } + + public Map.Entry extract() { + // DeltaExtractorJSON dex = new DeltaExtractorJSON(trace); + // HashMap threads = trace.getAllThreads(); + // ThreadInstance thread = threads.values().iterator().next(); // �Ō�̃X���b�h�����Ă��邾���c + // TracePoint tp = thread.getRoot().get(thread.getRoot().size() - 1).getExitPoint(); + + // System.out.println("===== All Statements Backward ====="); + // TracePoint tp = null; + // ExtractedStructure e = null; + // DeltaAliasCollector dac = new DeltaAliasCollector(); + // long restart = 0L; + // for(;;) { + // tp = trace.traverseStatementsInTraceBackward(new IStatementVisitor() { + // @Override + // public boolean preVisitStatement(Statement statement) { + // System.out.println("pre:" + statement.getThreadNo() + ":" + statement.getTimeStamp()); + // if(statement instanceof FieldUpdate) { + // FieldUpdate fu = (FieldUpdate) statement; + // if(!Trace.isNull(fu.getValueObjId()) && !Trace.isPrimitive(fu.getValueClassName())) { + // return true; + // } + // } + // return false; + // } + // + // @Override + // public boolean postVisitStatement(Statement statement) { + // System.out.println("post:" + statement.getThreadNo() + ":" + statement.getTimeStamp()); + // return false; + // } + // }, restart); + // if(tp == null || !tp.isValid()) break; + // e = dex.extract(new Reference(jHotDrawSelect3_1[0], jHotDrawSelect3_1[1], jHotDrawSelect3_1[2], jHotDrawSelect3_1[3]), tp, dac); + // dex.extract(tp); + // Statement statement = tp.getStatement(); + // if(statement instanceof MethodInvocation) { + // restart = ((MethodInvocation)tp.getStatement()).getCalledMethodExecution().getExitTime(); + // } else { + // restart = tp.getStatement().getTimeStamp(); + // } + // } + // trace.traverseStatementsInTraceBackward(new IStatementVisitor() { + // @Override + // public boolean preVisitStatement(Statement statement) { + // System.out.println("post:" + statement.getClass().getName() + ":" + statement.getTimeStamp()); + // return false; + // } + // @Override + // public boolean postVisitStatement(Statement statement) { + // System.out.println("pre:" + statement.getClass().getName() + ":" + statement.getTimeStamp()); + // return false; + // } + // }); + // } + + // HashSet marked = trace.getMarkedMethodSignatures(1255991806833871L, 1255991808597322L); + // HashSet marked = trace.getMarkedMethodSignatures(1699553004208835L, 1699553004739523L); + // System.out.println("===== Marked Methods ====="); + // for (String method: marked) { + // System.out.println(method); + // } + // HashSet unmarked = trace.getUnmarkedMethodSignatures(1255991806833871L, 1255991808597322L); + // HashSet unmarked = trace.getUnmarkedMethodSignatures(1699553004208835L, 1699553004739523L); + // System.out.println("===== Unmarked Methods ====="); + // for (String method: unmarked) { + // System.out.println(method); + // } + + // Change! + // setArray, setCollection(2��ڈȍ~�͕K�v�Ȃ�) , foreach(thread) + // ArrayList��add����ĂȂ� + // �t�B�[���h�ɑ������Ă��Ȃ� + // HashMap threads = trace.getAllThreads(); + // for(ThreadInstance ti: threads.values()) { + // ArrayList roots = ti.getRoot(); + // for(MethodExecution root: roots) { + // traverseMethodExecution(root); + // } + // } + + Map argsMap = new HashMap<>(); + setArgmentsForDeltaExtract(argsMap); + //���o�������f���^�̈������i�[����Map��key + // String argsKey = "ArgoUMLSelect"; +// String argsKey = "ArgoUMLDelete1"; + // String argsKey = "JHotDrawTransform"; + // String argsKey = "JHotDrawSelect3"; + // String argsKey = "sampleArray"; + // String argsKey = "sampleCollection"; + // String argsKey = "sampleCreate"; + // String argsKey = "sampleStatic"; + // String argsKey = "delta_eg1"; + String argsKey = "pre_Exp1"; + // String argsKey = "worstCase"; + // String argsKey = "sample1"; + // String argsKey = "objTrace5"; + + long time = System.nanoTime(); + TraceJSON trace = new TraceJSON(argsMap.get(argsKey)[4]); + DeltaExtractorJSON s = new DeltaExtractorJSON(trace); + if (argsMap.get(argsKey)[5] == CONTAINER_COMPONENT || argsMap.get(argsKey)[5] == CONTAINER_COMPONENT_COLLECTION) { + HashMap threads = trace.getAllThreads(); + + List eList = new ArrayList<>(); + List dacList = new ArrayList<>(); + if (threads.values().size() == 1) { + ThreadInstance thread = threads.values().iterator().next(); // �Ō�̃X���b�h�����Ă��邾���c + TracePoint tp = thread.getRoot().get(thread.getRoot().size() - 1).getExitPoint(); + Reference reference = new Reference(argsMap.get(argsKey)[0], argsMap.get(argsKey)[1], argsMap.get(argsKey)[2], argsMap.get(argsKey)[3]); + DeltaAliasCollector dac = new DeltaAliasCollector(); + ExtractedStructure e = s.extract(reference, tp, dac); + eList.add(e); + dacList.add(dac); + } else { + for (ThreadInstance thread: threads.values()) { + TracePoint tp = thread.getRoot().get(thread.getRoot().size() - 1).getExitPoint(); + Reference reference = new Reference(argsMap.get(argsKey)[0], argsMap.get(argsKey)[1], argsMap.get(argsKey)[2], argsMap.get(argsKey)[3]); + if (argsMap.get(argsKey)[5] == CONTAINER_COMPONENT_COLLECTION) { + reference.setCollection(true); + } + // reference.setArray(true); + // reference.setFinalLocal(true); + // reference.setCreation(true); + DeltaAliasCollector 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("---------------------------"); + } + } + return new AbstractMap.SimpleEntry(eList.get(0), dacList.get(0)); +// startDeltaViewer(eList.get(0), dacList.get(0)); + } else { + DeltaAliasCollector dac = new DeltaAliasCollector(); + MethodExecution me = trace.getLastMethodExecution(argsMap.get(argsKey)[2]); + Map refs = me.getObjectReferences(argsMap.get(argsKey)[3]); + ObjectReference ref = refs.keySet().iterator().next(); + ExtractedStructure e = s.extract(refs.get(ref), ref, dac); + return new AbstractMap.SimpleEntry(e, dac); +// startDeltaViewer(e, dac); + + } + } + + public void startDeltaViewer(ExtractedStructure e, DeltaAliasCollector dac) { + // Build a frame, create a graph, and add the graph to the frame so you can actually see the graph. + if(e != null) { + List srcSide = e.getDelta().getSrcSide(); + List dstSide = e.getDelta().getDstSide(); + if (srcSide.size() >= 1 && dstSide.size() >= 1) { + WINDOW_TITLE = "extract delta of:" + e.getDelta().getSrcSide().get(0).getDstClassName() + "(" + e.getDelta().getSrcSide().get(0).getDstObjectId() + ")" + " -> " + e.getDelta().getDstSide().get(0).getDstClassName() + "(" + e.getDelta().getDstSide().get(0).getDstObjectId() + ")"; + setTitle(WINDOW_TITLE); + } + } + deltaViewer.init(e, dac); + List aliasList = new ArrayList<>(dac.getAliasList()); + +// dv.setCoordinatorPoint(1200, 100); + deltaViewer.initAnimation(); +// for(int i = 0; i < aliasList.size(); i++) { +// System.out.println(aliasList.get(i).getObjectId() + ", " + aliasList.get(i).getMethodSignature() + " l." + aliasList.get(i).getLineNo() + " : " + aliasList.get(i).getAliasType().toString()); +// } + for (int i = 0; i <= aliasList.size(); i++) { + deltaViewer.stepToAnimation(i); + } + } + + private void setArgmentsForDeltaExtract(Map map){ + + // one delta extract + String[] traceSample1 = {null, null, "","", "traces/traceSample1.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("traceSample1", traceSample1); + String[] traceSample2 = {null, null, "","", "traces/traceSample2.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("traceSample2", traceSample2); + String[] presenSample = {null, null, "","", "traces/presenSample.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("presenSample", presenSample); + String[] worstCase = {null, null, "worstCase.P", "worstCase.M", "traces/_worstCase.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("worstCase", worstCase); + String[] sample1 = {null, null, "sample1.D", "sample1.C", "traces\\sample1.trace", CONTAINER_COMPONENT_COLLECTION}; map.put("sample1", sample1); + String[] sampleArray = {null, null, "sampleArray.D", "sampleArray.C", "traces\\sampleArray.trace", CONTAINER_COMPONENT_COLLECTION}; map.put("sampleArray", sampleArray); + String[] sampleCollection = {null, null, "sampleCollection.D", "sampleCollection.C", "traces\\sampleCollection.trace", CONTAINER_COMPONENT_COLLECTION}; map.put("sampleCollection", sampleCollection); + String[] sampleCreate = {null, null, "sampleCreate.D", "sampleCreate.C", "traces\\sampleCreate.trace", CONTAINER_COMPONENT_COLLECTION}; map.put("sampleCreate", sampleCreate); + String[] sampleStatic = {null, null, "sampleStatic.D", "sampleStatic.C", "traces\\sampleStatic.trace", CONTAINER_COMPONENT_COLLECTION}; map.put("sampleStatic", sampleStatic); + String[] delta_eg1 = {null, null, "E","C", "traces/testTrace.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("delta_eg1", delta_eg1); + String[] delta_eg5 = {null, null, "E","C", "traces/testTrace5.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("delta_eg5", delta_eg5); + String[] testTrace2 = {null, null, "","", "traces/testTrace2.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("testTrace2", testTrace2); + String[] testTrace3 = {null, null, "","", "traces/testTrace3.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("testTrace3", testTrace3); + String[] objTrace5 = {null, null, "A","B", "traces/objTraceSample5.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("objTrace5", objTrace5); + + // �\�������̂Ƃ��ɗp����Toy program + String[] pre_Exp1 = {null, null, "E","C", "traces/pre_Exp1.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("pre_Exp1", pre_Exp1); + String[] pre_Exp2 = {null, null, "E","C", "traces/pre_Exp2.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("pre_Exp2", pre_Exp2); + String[] pre_Exp3 = {null, null, "E","C", "traces/pre_Exp3.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("pre_Exp3", pre_Exp3); + String[] pre_Exp4 = {null, null, "E","C", "traces/pre_Exp4.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("pre_Exp4", pre_Exp4); + String[] pre_Exp5 = {null, null, "E","C", "traces/pre_Exp5.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("pre_Exp5", pre_Exp5); + String[] pre_Exp6 = {null, null, "E","C", "traces/pre_Exp6.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("pre_Exp6", pre_Exp6); + String[] pre_Exp7 = {null, null, "E","C", "traces/pre_Exp7.txt", CONTAINER_COMPONENT_COLLECTION}; map.put("pre_Exp7", pre_Exp7); + + String[] test = {null, null, "org.argouml.uml.diagram.static_structure.ui.FigClass","org.tigris.gef.base.LayerPerspectiveMutable", "traces\\ArgoUMLBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("test", test); + String[] testVectorAddElement = {null, null, "java.util.Vector", "org.tigris.gef.base.LayerPerspective", "traces\\ArgoUMLBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("testVectorAddElement", testVectorAddElement);//trace.java��"addElement("�ɑΉ�����悤�ɒlj� + String[] ArgoUMLBenchmark = {"", "", "", "", "traces/ArgoUMLBenchmark.trace", CONTAINER_COMPONENT}; map.put("ArgoUMLBenchmark", ArgoUMLBenchmark); + String[] ArgoUMLBenchmarkWithMoreStandardClasses = {"", "", "", "", "traces/ArgoUMLBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("ArgoUMLBenchmarkWithMoreStandardClasses", ArgoUMLBenchmarkWithMoreStandardClasses); +// String[] ArgoUMLSelect0_1 = {"1994249754", "1141430801", "java.util.ArrayList", "org.argouml.uml.diagram.static_structure.ui.SelectionClass","traces\\ArgoUMLBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("ArgoUMLSelect0_1", ArgoUMLSelect0_1); + String[] ArgoUMLSelect0_1 = {"1994249754", "1141430801", null, null,"traces\\ArgoUMLBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("ArgoUMLSelect0_1", ArgoUMLSelect0_1); + /*Vector.addElemnt()�ɑΉ��ς�*/String[] ArgoUMLDelete0_2 = {"1784213708", "1337038091", "java.util.Vector", "org.argouml.uml.diagram.static_structure.ui.FigClass", "traces\\ArgoUMLBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("ArgoUMLDelete0_2", ArgoUMLDelete0_2); + /*�X�ɉߋ�mouse.Pressed(), mouseReleased()*/String[] ArgoUMLPlace1_1 = {null, null, "java.util.ArrayList", "org.argouml.uml.diagram.static_structure.ui.FigClass", "traces\\ArgoUMLBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("ArgoUMLPlace1_1", ArgoUMLPlace1_1); +// String[] ArgoUMLSelect1_2 = {"1994249754", "1141430801", "java.util.ArrayList", "org.argouml.uml.diagram.static_structure.ui.SelectionClass", "traces\\ArgoUMLBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("ArgoUMLSelect1_2", ArgoUMLSelect1_2); +// String[] ArgoUMLSelect1_2 = {"125345735", "1672744985", "java.util.ArrayList", "org.argouml.uml.diagram.static_structure.ui.SelectionClass", "traces\\ArgoUMLBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("ArgoUMLSelect1_2", ArgoUMLSelect1_2); + String[] jEditBenchmark = {"", "", "", "", "traces/jEditBenchmark.trace", CONTAINER_COMPONENT}; map.put("jEditBenchmark", jEditBenchmark); + String[] jEditSelect2_1 = {"932187140", "1572482885", "java.util.ArrayList", "org.gjt.sp.jedit.textarea.Selection$Range", "traces\\jEditBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("jEditSelect2_1", jEditSelect2_1); + String[] jHotDrawBenchmark = {"", "", "", "", "traces/jHotDrawBenchmark.trace", CONTAINER_COMPONENT}; map.put("jHotDrawBenchmark", jHotDrawBenchmark); + String[] jHotDrawBenchmarkWithMoreStandardClasses = {"", "", "", "", "traces/jHotDrawBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("jHotDrawBenchmarkWithMoreStandardClasses", jHotDrawBenchmarkWithMoreStandardClasses); + /*List.toArray()�ɑΉ�������K�v������H*/String[] jEditDelete2_2 = {null, null, "org.gjt.sp.jedit.buffer.ContentManager", "java.util.ArrayList", "traces\\jEditBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("jEditDelete2_2", jEditDelete2_2); + String[] jHotDrawSelect3_1 = {"361298449", "212532447", "java.util.LinkedHashSet", "org.jhotdraw.draw.RectangleFigure", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("jHotDrawSelect3_1", jHotDrawSelect3_1); + String[] jHotDrawMove3_2 = {"778703711", "212532447", "org.jhotdraw.draw.tool.DefaultDragTracker", "org.jhotdraw.draw.RectangleFigure", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("jHotDrawMove3_2", jHotDrawMove3_2); + /*�s��*/String[] jHotDrawMove3_2_1 = {null, null, "java.util.ArrayList", "org.jhotdraw.draw.RectangleFigure", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("jHotDrawMove3_2_1", jHotDrawMove3_2_1); + String[] jHotDrawPlace4_1 = {"1284329882", "212532447", "java.util.HashMap", "org.jhotdraw.draw.RectangleFigure", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("jHotDrawPlace4_1", jHotDrawPlace4_1); +// String[] jHotDrawSelect4_2 = {"361298449", "212532447", "java.util.LinkedHashSet", "org.jhotdraw.draw.RectangleFigure", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("jHotDrawSelect4_2", jHotDrawSelect4_2); + String[] jHotDrawSelect4_2 = {null, null, "java.util.LinkedHashSet", "org.jhotdraw.draw.RectangleFigure", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT}; map.put("jHotDrawSelect4_2", jHotDrawSelect4_2); + + // MagnetRON Experiment + String[] ArgoUMLSelect = {"125345735", "1672744985", "java.util.ArrayList", "org.argouml.uml.diagram.static_structure.ui.SelectionClass", "traces\\ArgoUMLBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT_COLLECTION}; map.put("ArgoUMLSelect", ArgoUMLSelect); // ArgoUML �I���@�\ (collection) + 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 = {"1787265837", "1952912699", "java.util.LinkedHashSet", "org.jhotdraw.draw.RectangleFigure", "traces\\jHotDrawBenchmarkWithMoreStandardClasses.trace", CONTAINER_COMPONENT_COLLECTION}; map.put("JHotDrawSelect3", JHotDrawSelect3); // JHotDraw �I���@�\3 (collection) + } +}