diff --git a/src/org/ntlab/deltaExtractor/DeltaExtractor.java b/src/org/ntlab/deltaExtractor/DeltaExtractor.java index ac631ce..5082dd9 100644 --- a/src/org/ntlab/deltaExtractor/DeltaExtractor.java +++ b/src/org/ntlab/deltaExtractor/DeltaExtractor.java @@ -1,6 +1,7 @@ package org.ntlab.deltaExtractor; import java.util.ArrayList; +import java.util.List; import org.ntlab.trace.FieldAccess; import org.ntlab.trace.FieldUpdate; @@ -36,13 +37,18 @@ protected static final boolean DEBUG1 = true; protected static final boolean DEBUG2 = true; - protected final IAliasCollector defaultAliasCollector = new IAliasCollector() { + protected final IAliasTracker defaultAliasCollector = new IAliasTracker() { @Override public void changeTrackingObject(String from, String to, boolean isSrcSide) { } @Override public void addAlias(Alias alias) { } + @Override + public List getAliasList() { + // TODO Auto-generated method stub + return null; + } }; public DeltaExtractor(String traceFile) { @@ -103,7 +109,7 @@ * @return ���‚������R�[�f�B�l�[�^ * @throws TraceFileException */ - protected MethodExecution callerSearch(Trace trace, TracePoint tracePoint, ArrayList objList, MethodExecution childMethodExecution, IAliasCollector aliasCollector) { + protected MethodExecution callerSearch(Trace trace, TracePoint tracePoint, ArrayList objList, MethodExecution childMethodExecution, IAliasTracker aliasCollector) { MethodExecution methodExecution = tracePoint.getMethodExecution(); methodExecution.setAugmentation(new DeltaAugmentationInfo()); eStructure.createParent(methodExecution); @@ -510,7 +516,7 @@ * @param index�@objList���̂ǂ̃I�u�W�F�N�g��ǐՂ��Ă��̃��\�b�h���s�ɓ����Ă����̂� * @throws TraceFileException */ - protected void calleeSearch(Trace trace, TracePoint tracePoint, ArrayList objList, Boolean isStatic, int index, IAliasCollector aliasCollector) { + protected void calleeSearch(Trace trace, TracePoint tracePoint, ArrayList objList, Boolean isStatic, int index, IAliasTracker aliasCollector) { MethodExecution methodExecution = tracePoint.getMethodExecution(); Boolean isResolved = false; String objectId = objList.get(index); // calleeSearch() �ł͒ǐՑΏۂ̃I�u�W�F�N�g�͈�‚����A��objList��index�Ԗڂ̗v�f�ȊO�ύX���Ă͂����Ȃ� @@ -801,7 +807,7 @@ * @param aliasCollector �f���^���o���ɒǐՂ����I�u�W�F�N�g�̑S�G�C���A�X�����W���郊�X�i * @return ���o���� */ - public ExtractedStructure extract(Reference targetRef, TracePoint before, IAliasCollector aliasCollector) { + public ExtractedStructure extract(Reference targetRef, TracePoint before, IAliasTracker aliasCollector) { TracePoint creationTracePoint; if (targetRef.isArray()) { // srcId �̔z��� dstId ���������Ă���”\�������郁�\�b�h���s���擾�i�z���p�̏����j @@ -845,7 +851,7 @@ * @param aliasCollector �f���^���o���ɒǐՂ����I�u�W�F�N�g�̑S�G�C���A�X�����W���郊�X�i * @return ���o���� */ - public ExtractedStructure extract(TracePoint creationTracePoint, IAliasCollector aliasCollector) { + public ExtractedStructure extract(TracePoint creationTracePoint, IAliasTracker aliasCollector) { creationTracePoint = creationTracePoint.duplicate(); Statement statement = creationTracePoint.getStatement(); if (statement instanceof FieldUpdate) { @@ -856,7 +862,7 @@ } } - private ExtractedStructure extractSub(TracePoint creationTracePoint, Reference targetRef, IAliasCollector aliasCollector) { + private ExtractedStructure extractSub(TracePoint creationTracePoint, Reference targetRef, IAliasTracker aliasCollector) { eStructure = new ExtractedStructure(); eStructure.setRelatedTracePoint(creationTracePoint.duplicate()); ArrayList objList = new ArrayList(); @@ -893,7 +899,7 @@ * @param aliasCollector �f���^���o���ɒǐՂ����I�u�W�F�N�g�̑S�G�C���A�X�����W���郊�X�i * @return�@���o���� */ - public ExtractedStructure extract(MethodExecution calledMethodExecution, IAliasCollector aliasCollector) { + public ExtractedStructure extract(MethodExecution calledMethodExecution, IAliasTracker aliasCollector) { ObjectReference callee = new ObjectReference(calledMethodExecution.getThisObjId(), calledMethodExecution.getThisClassName()); return extract(calledMethodExecution.getCallerTracePoint(), callee, aliasCollector); } @@ -915,7 +921,7 @@ * @param aliasCollector �f���^���o���ɒǐՂ����I�u�W�F�N�g�̑S�G�C���A�X�����W���郊�X�i * @return ���o���� */ - public ExtractedStructure extract(TracePoint thisTracePoint, ObjectReference anotherObj, IAliasCollector aliasCollector) { + public ExtractedStructure extract(TracePoint thisTracePoint, ObjectReference anotherObj, IAliasTracker aliasCollector) { eStructure = new ExtractedStructure(); eStructure.setRelatedTracePoint(thisTracePoint.duplicate()); MethodExecution methodExecution = thisTracePoint.getMethodExecution(); @@ -935,7 +941,7 @@ return extractSub2(thisTracePoint, objList, aliasCollector); } - private ExtractedStructure extractSub2(TracePoint tracePoint, ArrayList objList, IAliasCollector aliasCollector) { + private ExtractedStructure extractSub2(TracePoint tracePoint, ArrayList objList, IAliasTracker aliasCollector) { eStructure.setCreationMethodExecution(tracePoint.getMethodExecution()); MethodExecution coordinator = callerSearch(trace, tracePoint, objList, null, aliasCollector); eStructure.setCoordinator(coordinator); @@ -989,7 +995,7 @@ * @param aliasCollector �f���^���o���ɒǐՂ����I�u�W�F�N�g�̑S�G�C���A�X�����W���郊�X�i * @return�@���o���� */ - public ExtractedStructure extract(Object srcObj, Object dstObj, TracePoint before, IAliasCollector aliasCollector) { + public ExtractedStructure extract(Object srcObj, Object dstObj, TracePoint before, IAliasTracker aliasCollector) { Reference targetRef = new Reference(Integer.toString(System.identityHashCode(srcObj)), Integer.toString(System.identityHashCode(dstObj)), null, null); return extract(targetRef, before, aliasCollector); } @@ -1010,7 +1016,7 @@ * @param arg ��������ɂ���Q�Ɛ�I�u�W�F�N�g(���[�J���ϐ�������ɂ��Q�Ɛ�) * @return ���o���� */ - public ExtractedStructure extract(TracePoint tracePoint, Object arg, IAliasCollector aliasCollector) { + public ExtractedStructure extract(TracePoint tracePoint, Object arg, IAliasTracker aliasCollector) { ObjectReference argObj = new ObjectReference(Integer.toString(System.identityHashCode(arg))); return extract(tracePoint, argObj, aliasCollector); } diff --git a/src/org/ntlab/deltaExtractor/DeltaExtractorJSON.java b/src/org/ntlab/deltaExtractor/DeltaExtractorJSON.java index 693ed5e..d0f63f1 100644 --- a/src/org/ntlab/deltaExtractor/DeltaExtractorJSON.java +++ b/src/org/ntlab/deltaExtractor/DeltaExtractorJSON.java @@ -44,7 +44,7 @@ * @return ���‚������R�[�f�B�l�[�^ * @throws TraceFileException */ - protected MethodExecution callerSearch(Trace trace, TracePoint tracePoint, ArrayList objList, MethodExecution childMethodExecution, IAliasCollector aliasCollector) { + protected MethodExecution callerSearch(Trace trace, TracePoint tracePoint, ArrayList objList, MethodExecution childMethodExecution, IAliasTracker aliasCollector) { MethodExecution methodExecution = tracePoint.getMethodExecution(); methodExecution.setAugmentation(new DeltaAugmentationInfo()); eStructure.createParent(methodExecution); @@ -388,7 +388,7 @@ * @param index�@objList���̂ǂ̃I�u�W�F�N�g��ǐՂ��Ă��̃��\�b�h���s�ɓ����Ă����̂� * @throws TraceFileException */ - protected void calleeSearch(Trace trace, TracePoint tracePoint, ArrayList objList, Boolean isStatic, int index, IAliasCollector aliasCollector) { + protected void calleeSearch(Trace trace, TracePoint tracePoint, ArrayList objList, Boolean isStatic, int index, IAliasTracker aliasCollector) { MethodExecution methodExecution = tracePoint.getMethodExecution(); Boolean isResolved = false; String objectId = objList.get(index); // calleeSearch() �ł͒ǐՑΏۂ̃I�u�W�F�N�g�͈�‚����A��objList��index�Ԗڂ̗v�f�ȊO�ύX���Ă͂����Ȃ� diff --git a/src/org/ntlab/deltaExtractor/IAliasCollector.java b/src/org/ntlab/deltaExtractor/IAliasCollector.java index 0794023..53ac824 100644 --- a/src/org/ntlab/deltaExtractor/IAliasCollector.java +++ b/src/org/ntlab/deltaExtractor/IAliasCollector.java @@ -1,9 +1,11 @@ package org.ntlab.deltaExtractor; +import java.util.List; + public interface IAliasCollector { - + void addAlias(Alias alias); - void changeTrackingObject(String from, String to, boolean isSrcSide); - + List getAliasList(); + } \ No newline at end of file diff --git a/src/org/ntlab/deltaExtractor/IAliasTracker.java b/src/org/ntlab/deltaExtractor/IAliasTracker.java new file mode 100644 index 0000000..6e97447 --- /dev/null +++ b/src/org/ntlab/deltaExtractor/IAliasTracker.java @@ -0,0 +1,7 @@ +package org.ntlab.deltaExtractor; + +public interface IAliasTracker extends IAliasCollector { + + void changeTrackingObject(String from, String to, boolean isSrcSide); + +} \ No newline at end of file diff --git a/src/org/ntlab/deltaExtractor/Test.java b/src/org/ntlab/deltaExtractor/Test.java index 939c9ca..f26d5b4 100644 --- a/src/org/ntlab/deltaExtractor/Test.java +++ b/src/org/ntlab/deltaExtractor/Test.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; +import java.util.List; import org.ntlab.trace.MethodExecution; import org.ntlab.trace.ObjectReference; @@ -25,7 +26,7 @@ HashMap threads = trace.getAllThreads(); ThreadInstance thread = threads.values().iterator().next(); TracePoint tp = thread.getRoot().get(thread.getRoot().size() - 1).getExitPoint(); - ExtractedStructure e = s.extract(new Reference(null, null, "sampleCollection.D", "sampleCollection.C"), tp, new IAliasCollector() { + ExtractedStructure e = s.extract(new Reference(null, null, "sampleCollection.D", "sampleCollection.C"), tp, new IAliasTracker() { @Override public void addAlias(Alias alias) { System.out.println(alias.getAliasType().toString() + ":" + alias.getObjectId() +"," + alias.getIndex() + "," + alias.getMethodSignature() + "," + alias.getLineNo()); @@ -34,6 +35,11 @@ public void changeTrackingObject(String from, String to, boolean isSrcSide) { System.out.println("Change:" + from + "�@=>�@" + to); } + @Override + public List getAliasList() { + // TODO Auto-generated method stub + return null; + } }); // TraceJSON trace = new TraceJSON("traces\\_finalLocal.txt"); diff --git a/src/org/ntlab/deltaViewer/DeltaAliasCollector.java b/src/org/ntlab/deltaViewer/DeltaAliasCollector.java index 03c5047..90ab9dd 100644 --- a/src/org/ntlab/deltaViewer/DeltaAliasCollector.java +++ b/src/org/ntlab/deltaViewer/DeltaAliasCollector.java @@ -1,125 +1,22 @@ package org.ntlab.deltaViewer; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; import java.util.List; -import java.util.Map; import org.ntlab.deltaExtractor.Alias; import org.ntlab.deltaExtractor.IAliasCollector; -import org.ntlab.deltaExtractor.AliasPair; -import org.ntlab.trace.MethodExecution; -import org.ntlab.trace.MethodInvocation; -/** - * Collect delta aliases for MagnetRON. - * - * @author Nitta Lab. - */ public class DeltaAliasCollector implements IAliasCollector { - // Reverse execution order. - private String srcObjId; - private String dstObjId; - private List aliasList = new ArrayList<>(); - private List aliasPairList = new ArrayList<>(); - - private Alias curAlias = null; - private AliasPair curAliasPair = null; - - public DeltaAliasCollector() { - } - - /** - * @param srcObjId - * @param dstObjId - */ - public DeltaAliasCollector(String srcObjId, String dstObjId) { - this.srcObjId = srcObjId; - this.dstObjId = dstObjId; - } @Override public void addAlias(Alias alias) { - switch(alias.getAliasType()) { - case FORMAL_PARAMETER: - aliasList.add(0, alias); - break; - case THIS: - aliasList.add(0, alias); - break; - case METHOD_INVOCATION: - aliasList.add(0, alias); - break; - case CONSTRACTOR_INVOCATION: - aliasList.add(0, alias); - break; - case FIELD: - aliasList.add(0, alias); - break; - case ARRAY_ELEMENT: - aliasList.add(0, alias); - break; - case ARRAY: - aliasList.add(0, alias); - break; - case ACTUAL_ARGUMENT: - aliasList.add(0, alias); - break; - case RECEIVER: - aliasList.add(0, alias); - if (alias.getOccurrencePoint().getStatement() instanceof MethodInvocation) { - MethodExecution me = ((MethodInvocation) alias.getOccurrencePoint().getStatement()).getCalledMethodExecution(); - } - break; - case RETURN_VALUE: - aliasList.add(0, alias); - break; - default: - break; - } - if (curAliasPair != null) { - curAliasPair.setAliasPair(alias, curAlias); - aliasPairList.add(curAliasPair); - curAliasPair = null; - } - curAlias = alias; - System.out.println(alias.getObjectId() + ", " + alias.getMethodSignature() + " l." + alias.getLineNo() + " : " + alias.getAliasType().toString()); + // TODO Auto-generated method stub + } @Override - // from�̕����ߋ� - public void changeTrackingObject(String fromObjId, String toObjId, boolean isSrcSideChanged) { - curAliasPair = new AliasPair(isSrcSideChanged); - System.out.println(fromObjId + " -> " + toObjId + " " + isSrcSideChanged); - } - public List getAliasList() { - return this.aliasList; - } - - public List getAliasPairList() { - return aliasPairList; - } - - public List getAliasPairListByAlias(Alias toAlias) { - List aliasPairListByAlias = new ArrayList<>(); - for(AliasPair ap: aliasPairList) { - if(ap.getAliasPair().getValue().equals(toAlias)) { - aliasPairListByAlias.add(ap); - } - } - return aliasPairListByAlias; - } - - public List getAliasPairListByAliasPair(Alias fromAlias, Alias toAlias) { - List aliasPairListByAlias = new ArrayList<>(); - for(AliasPair ap: aliasPairList) { - if(ap.getAliasPair().getKey().equals(fromAlias) && ap.getAliasPair().getValue().equals(toAlias)) { - aliasPairListByAlias.add(ap); - } - } - return aliasPairListByAlias; + // TODO Auto-generated method stub + return null; } } diff --git a/src/org/ntlab/deltaViewer/DeltaAliasTracker.java b/src/org/ntlab/deltaViewer/DeltaAliasTracker.java new file mode 100644 index 0000000..b27821e --- /dev/null +++ b/src/org/ntlab/deltaViewer/DeltaAliasTracker.java @@ -0,0 +1,126 @@ +package org.ntlab.deltaViewer; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.ntlab.deltaExtractor.Alias; +import org.ntlab.deltaExtractor.IAliasTracker; +import org.ntlab.deltaExtractor.AliasPair; +import org.ntlab.trace.MethodExecution; +import org.ntlab.trace.MethodInvocation; + +/** + * Collect delta aliases for MagnetRON. + * + * @author Nitta Lab. + */ +public class DeltaAliasTracker implements IAliasTracker { + // Reverse execution order. + private String srcObjId; + private String dstObjId; + private List aliasList = new ArrayList<>(); + private List aliasPairList = new ArrayList<>(); + + private Alias curAlias = null; + private AliasPair curAliasPair = null; + + public DeltaAliasTracker() { + } + + /** + * @param srcObjId + * @param dstObjId + */ + public DeltaAliasTracker(String srcObjId, String dstObjId) { + this.srcObjId = srcObjId; + this.dstObjId = dstObjId; + } + + @Override + public void addAlias(Alias alias) { + switch(alias.getAliasType()) { + case FORMAL_PARAMETER: + aliasList.add(0, alias); + break; + case THIS: + aliasList.add(0, alias); + break; + case METHOD_INVOCATION: + aliasList.add(0, alias); + break; + case CONSTRACTOR_INVOCATION: + aliasList.add(0, alias); + break; + case FIELD: + aliasList.add(0, alias); + break; + case ARRAY_ELEMENT: + aliasList.add(0, alias); + break; + case ARRAY: + aliasList.add(0, alias); + break; + case ACTUAL_ARGUMENT: + aliasList.add(0, alias); + break; + case RECEIVER: + aliasList.add(0, alias); + if (alias.getOccurrencePoint().getStatement() instanceof MethodInvocation) { + MethodExecution me = ((MethodInvocation) alias.getOccurrencePoint().getStatement()).getCalledMethodExecution(); + } + break; + case RETURN_VALUE: + aliasList.add(0, alias); + break; + default: + break; + } + if (curAliasPair != null) { + curAliasPair.setAliasPair(alias, curAlias); + aliasPairList.add(curAliasPair); + curAliasPair = null; + } + curAlias = alias; + System.out.println(alias.getObjectId() + ", " + alias.getMethodSignature() + " l." + alias.getLineNo() + " : " + alias.getAliasType().toString()); + } + + @Override + // from�̕����ߋ� + public void changeTrackingObject(String fromObjId, String toObjId, boolean isSrcSideChanged) { + curAliasPair = new AliasPair(isSrcSideChanged); + System.out.println(fromObjId + " -> " + toObjId + " " + isSrcSideChanged); + } + + @Override + public List getAliasList() { + return this.aliasList; + } + + public List getAliasPairList() { + return aliasPairList; + } + + public List getAliasPairListByAlias(Alias toAlias) { + List aliasPairListByAlias = new ArrayList<>(); + for(AliasPair ap: aliasPairList) { + if(ap.getAliasPair().getValue().equals(toAlias)) { + aliasPairListByAlias.add(ap); + } + } + return aliasPairListByAlias; + } + + public List getAliasPairListByAliasPair(Alias fromAlias, Alias toAlias) { + List aliasPairListByAlias = new ArrayList<>(); + for(AliasPair ap: aliasPairList) { + if(ap.getAliasPair().getKey().equals(fromAlias) && ap.getAliasPair().getValue().equals(toAlias)) { + aliasPairListByAlias.add(ap); + } + } + return aliasPairListByAlias; + } + +} diff --git a/src/org/ntlab/deltaViewer/DeltaViewer.java b/src/org/ntlab/deltaViewer/DeltaViewer.java index a7e527e..3a46671 100644 --- a/src/org/ntlab/deltaViewer/DeltaViewer.java +++ b/src/org/ntlab/deltaViewer/DeltaViewer.java @@ -69,7 +69,7 @@ private static String WINDOW_TITLE = "Delta Viewer"; private ExtractedStructure eStructure; - private DeltaAliasCollector deltaAliasCollector; + private DeltaAliasTracker deltaAliasCollector; private Map objectToVertexMap = new HashMap<>(); private Map methodExecToVertexMap = new LinkedHashMap<>(); @@ -103,7 +103,7 @@ add(mxgraphComponent, BorderLayout.CENTER); } - public void init(ExtractedStructure extractedStructure, DeltaAliasCollector deltaAliasCollector) { + public void init(ExtractedStructure extractedStructure, DeltaAliasTracker deltaAliasCollector) { this.eStructure = extractedStructure; this.deltaAliasCollector = deltaAliasCollector; // init(); @@ -154,7 +154,7 @@ this.eStructure = extractedStructure; } - public void setDeltaAliasCollector(DeltaAliasCollector deltaAliasCollector) { + public void setDeltaAliasCollector(DeltaAliasTracker deltaAliasCollector) { this.deltaAliasCollector = deltaAliasCollector; } diff --git a/src/org/ntlab/deltaViewer/MagnetRONFrame.java b/src/org/ntlab/deltaViewer/MagnetRONFrame.java index 4f62419..8fdc0c5 100644 --- a/src/org/ntlab/deltaViewer/MagnetRONFrame.java +++ b/src/org/ntlab/deltaViewer/MagnetRONFrame.java @@ -45,7 +45,7 @@ } public void startAnimation() { - Map.Entry extracted = extract(); + Map.Entry extracted = extract(); new Thread() { public void run() { startDeltaViewer(extracted.getKey(), extracted.getValue()); @@ -53,7 +53,7 @@ }.start(); } - public Map.Entry extract() { + public Map.Entry extract() { // DeltaExtractorJSON dex = new DeltaExtractorJSON(trace); // HashMap threads = trace.getAllThreads(); // ThreadInstance thread = threads.values().iterator().next(); // �Ō�̃X���b�h�����Ă��邾���c @@ -157,12 +157,12 @@ HashMap threads = trace.getAllThreads(); List eList = new ArrayList<>(); - List dacList = 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(); + DeltaAliasTracker dac = new DeltaAliasTracker(); ExtractedStructure e = s.extract(reference, tp, dac); eList.add(e); dacList.add(dac); @@ -176,7 +176,7 @@ // reference.setArray(true); // reference.setFinalLocal(true); // reference.setCreation(true); - DeltaAliasCollector dac = new DeltaAliasCollector(); + DeltaAliasTracker dac = new DeltaAliasTracker(); ExtractedStructure e = s.extract(reference, tp, dac); System.out.println(e); if (e != null) { @@ -190,7 +190,7 @@ return new AbstractMap.SimpleEntry(eList.get(0), dacList.get(0)); // startDeltaViewer(eList.get(0), dacList.get(0)); } else { - DeltaAliasCollector dac = new DeltaAliasCollector(); + DeltaAliasTracker dac = new DeltaAliasTracker(); MethodExecution me = trace.getLastMethodExecution(argsMap.get(argsKey)[2]); Map refs = me.getObjectReferences(argsMap.get(argsKey)[3]); ObjectReference ref = refs.keySet().iterator().next(); @@ -201,7 +201,7 @@ } } - public void startDeltaViewer(ExtractedStructure e, DeltaAliasCollector dac) { + public void startDeltaViewer(ExtractedStructure e, DeltaAliasTracker 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();