diff --git a/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/trace/Alias.java b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/trace/Alias.java
new file mode 100644
index 0000000..e417738
--- /dev/null
+++ b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/trace/Alias.java
@@ -0,0 +1,49 @@
+package org.ntlab.traceCollector.tracer.trace;
+
+/**
+ * �I�u�W�F�N�g�̎Q�Ə��(�G�C���A�X)��\���N���X
+ * @author Isitani
+ *
+ */
+public class Alias {
+ private String objectId;
+ private TracePoint occurrencePoint; // ���Y�I�u�W�F�N�g�̎Q�Ƃ��s���Ă�����s�ӏ��ɑΉ�����TracePoint
+ /**
+ * ���Y�I�u�W�F�N�g�̎Q�Ƃ�TracePoint�ɂ����Ăǂ��Ɍ���Ă��邩��\��
+ * 0 �t�B�[���h�A�N�Z�X���̃R���e�i �������� ���\�b�h�Ăяo�����̃��V�[�o
+ * 1, 2, 3 �c�c n �t�B�[���h�A�N�Z�X���̃t�B�[���h(1) �������� ���\�b�h�Ăяo������n�Ԗڂ̎����� (1���珇�Ԃ�)
+ * -1 ���\�b�h�Ăяo�����̖߂�l
+ *
+ * ��1: d = a.m(b, c);
+ *
+ * ��1�̎��s���ɂ�����, a�̓��\�b�h�Ăяo���̃��V�[�o�Ȃ̂�0, b�̓��\�b�h�Ăяo����1�Ԗڂ̎������Ȃ̂�1,
+ * c�̓��\�b�h�Ăяo����2�Ֆڂ̎������Ȃ̂�2, a.m(b, c)�̖߂�l��-1 �ƂȂ�.
+ *
+ * ��2: d = a.f;
+ * ��2�̎��s���ɂ�����, a�̓t�B�[���h�̃R���e�i�Ȃ̂�0, b�̓t�B�[���h�Ȃ̂�1 �ƂȂ�.
+ *
+ */
+ private int occurrenceExp;
+ public static final int OCCURRENCE_EXP_CONTAINER = 0;
+ public static final int OCCURRENCE_EXP_RECEIVER = 0;
+ public static final int OCCURRENCE_EXP_FIELD = 1;
+ public static final int OCCURRENCE_EXP_RETURN = -1;
+
+ public Alias(String objectId, TracePoint occurrencePoint, int occurrenceExp) {
+ this.objectId = objectId;
+ this.occurrencePoint = occurrencePoint;
+ this.occurrenceExp = occurrenceExp;
+ }
+
+ public String getObjectId() {
+ return objectId;
+ }
+
+ public TracePoint getOccurrencePoint() {
+ return occurrencePoint;
+ }
+
+ public int getOccurrenceExp() {
+ return occurrenceExp;
+ }
+}
diff --git a/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/trace/MethodExecution.java b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/trace/MethodExecution.java
index 1b581d2..3eabbf5 100644
--- a/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/trace/MethodExecution.java
+++ b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/trace/MethodExecution.java
@@ -274,4 +274,16 @@
}
return null;
}
+
+ /**
+ * order���w�肵�đΉ�����TracePoint��Ԃ�
+ * @param order TracePoint��order
+ * @return
+ */
+ public TracePoint getTracePoint(int order) {
+ if (order < this.getStatements().size()) {
+ return new TracePoint(this, order);
+ }
+ return null;
+ }
}
diff --git a/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/trace/TraceJSON.java b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/trace/TraceJSON.java
index 9fd4929..ebb496d 100644
--- a/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/trace/TraceJSON.java
+++ b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/trace/TraceJSON.java
@@ -975,4 +975,49 @@
}
return null;
}
+
+ public static Alias getAlias(String objectId, TracePoint occurrencePoint, int occurrenceExp) {
+ return new Alias(objectId, occurrencePoint, occurrenceExp);
+ }
+
+ public static ArrayList getObjectFlow(Alias alias) {
+ ArrayList aliases = new ArrayList<>();
+ aliases.add(alias);
+ String aliasObjId = alias.getObjectId();
+ TracePoint tracePoint = alias.getOccurrencePoint();
+ while (tracePoint.stepBackOver()) {
+ Statement statement = tracePoint.getStatement();
+ if (statement instanceof FieldAccess) {
+ FieldAccess fs = (FieldAccess)statement;
+ String containerObjId = fs.getContainerObjId();
+ String valueObjId = fs.getValueObjId();
+ if (aliasObjId.equals(valueObjId)) {
+ aliases.add(new Alias(aliasObjId, tracePoint, Alias.OCCURRENCE_EXP_FIELD));
+ tracePoint = getFieldUpdateTracePoint(containerObjId, fs.getFieldName(), tracePoint);
+ }
+ } else if (statement instanceof ArrayAccess) {
+ ArrayAccess aa = (ArrayAccess)statement;
+ String arrayObjId = aa.getArrayObjectId();
+ String valueObjId = aa.getValueObjectId();
+ if (aliasObjId.equals(valueObjId)) {
+ aliases.add(new Alias(aliasObjId, tracePoint, Alias.OCCURRENCE_EXP_FIELD));
+ tracePoint = getArrayUpdateTracePoint(arrayObjId, aa.getIndex(), tracePoint);
+ }
+ } else if (statement instanceof ArrayCreate) {
+ ArrayCreate ac = (ArrayCreate)statement;
+
+ } else if (statement instanceof MethodInvocation) {
+ MethodExecution prevChildMethodExecution = ((MethodInvocation)statement).getCalledMethodExecution();
+ ObjectReference returnValue = prevChildMethodExecution.getReturnValue();
+ String returnId = returnValue.getId();
+ if (aliasObjId.equals(returnId)) {
+ aliases.add(new Alias(aliasObjId, tracePoint, Alias.OCCURRENCE_EXP_RETURN));
+ tracePoint.stepBackNoReturn();
+ }
+ }
+ }
+
+
+ return aliases;
+ }
}