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..4ffeaff
--- /dev/null
+++ b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/trace/Alias.java
@@ -0,0 +1,173 @@
+package org.ntlab.traceCollector.tracer.trace;
+
+import java.util.ArrayList;
+
+/**
+ * �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_ARRAY = 1;
+ public static final int OCCURRENCE_EXP_FIRST_ARG = 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;
+ }
+
+ public MethodExecution getMethodExecution() {
+ return occurrencePoint.getMethodExecution();
+ }
+
+ public String getMethodSignature() {
+ return occurrencePoint.getMethodExecution().getCallerSideSignature();
+ }
+
+ public int getLineNo() {
+ Statement statement = occurrencePoint.getStatement();
+ return statement.getLineNo();
+ }
+
+ public String getStatementType() {
+ Statement statement = occurrencePoint.getStatement();
+ String statementType = "";
+ if (statement instanceof FieldAccess) {
+ FieldAccess fa = (FieldAccess)statement;
+ statementType = "FieldAccess";
+ } else if (statement instanceof FieldUpdate) {
+ FieldUpdate fu = (FieldUpdate)statement;
+ statementType = "FieldUpdate";
+ } else if (statement instanceof ArrayAccess) {
+ ArrayAccess aa = (ArrayAccess)statement;
+ statementType = "ArrayAccess";
+ } else if (statement instanceof ArrayUpdate) {
+ ArrayUpdate au = (ArrayUpdate)statement;
+ statementType = "ArrayUpdate";
+ } else if (statement instanceof ArrayCreate) {
+ ArrayCreate ac = (ArrayCreate)statement;
+ statementType = "ArrayCreate";
+ } else if (statement instanceof MethodInvocation) {
+ MethodExecution me = ((MethodInvocation)statement).getCalledMethodExecution();
+ statementType = "MethodInvocation";
+ }
+ return statementType;
+ }
+
+ public String getStatementSignature() {
+ Statement statement = occurrencePoint.getStatement();
+ String statementSignature = "";
+ if (statement instanceof FieldAccess) {
+ FieldAccess fa = (FieldAccess)statement;
+ statementSignature = fa.getFieldName();
+ } else if (statement instanceof FieldUpdate) {
+ FieldUpdate fu = (FieldUpdate)statement;
+ statementSignature = fu.getFieldName();
+ } else if (statement instanceof ArrayAccess) {
+ ArrayAccess aa = (ArrayAccess)statement;
+ statementSignature = aa.getArrayClassName() + "[" + aa.getIndex() + "]";
+ } else if (statement instanceof ArrayUpdate) {
+ ArrayUpdate au = (ArrayUpdate)statement;
+ statementSignature = au.getArrayClassName() + "[" + au.getIndex() + "]";
+ } else if (statement instanceof ArrayCreate) {
+ ArrayCreate ac = (ArrayCreate)statement;
+ statementSignature = ac.getArrayClassName();
+ } else if (statement instanceof MethodInvocation) {
+ MethodExecution me = ((MethodInvocation)statement).getCalledMethodExecution();
+ statementSignature = me.getCallerSideSignature();
+ }
+ return statementSignature;
+ }
+
+ public String getClassName() {
+ Statement statement = occurrencePoint.getStatement();
+ String className = "";
+ if (statement instanceof FieldAccess) {
+ if (occurrenceExp == OCCURRENCE_EXP_CONTAINER) {
+ className = ((FieldAccess) statement).getContainerClassName();
+ } else if (occurrenceExp == OCCURRENCE_EXP_FIELD) {
+ className = ((FieldAccess) statement).getValueClassName();
+ }
+ } else if (statement instanceof FieldUpdate) {
+ if (occurrenceExp == OCCURRENCE_EXP_CONTAINER) {
+ className = ((FieldUpdate) statement).getContainerClassName();
+ } else if (occurrenceExp == OCCURRENCE_EXP_FIELD) {
+ className = ((FieldUpdate) statement).getValueClassName();
+ }
+ } else if (statement instanceof ArrayAccess) {
+ className = ((ArrayAccess) statement).getValueClassName();
+ } else if (statement instanceof ArrayUpdate) {
+ className = ((ArrayUpdate) statement).getValueClassName();
+ } else if (statement instanceof ArrayCreate) {
+ className = ((ArrayCreate) statement).getArrayClassName();
+ } else if (statement instanceof MethodInvocation) {
+ MethodExecution me = ((MethodInvocation)statement).getCalledMethodExecution();
+ if (occurrenceExp == OCCURRENCE_EXP_RETURN) {
+ className = me.getReturnValue().getActualType();
+ } else if (occurrenceExp == OCCURRENCE_EXP_RECEIVER) {
+ className = me.getThisClassName();
+ } else {
+ int index = occurrenceExp - OCCURRENCE_EXP_FIRST_ARG;
+ ArrayList args = me.getArguments();
+ if (index >= 0 && index < args.size()) {
+ className = me.getArguments().get(index).getActualType();
+ }
+ }
+ }
+ return className;
+ }
+
+ @Override
+ public String toString() {
+ Statement statement = occurrencePoint.getStatement();
+ String className = getClassName();
+ String methodSignature = getMethodSignature();
+ String statementType = getStatementType();
+ String statementSigunarure = getStatementSignature();
+ String indent = " ";
+ StringBuilder str = new StringBuilder();
+ str.append("objId: " + objectId + " (class = " + className + ")" + "\n");
+ str.append("tp: " + occurrencePoint + "\n");
+ str.append(indent + "signature: " + methodSignature + "\n");
+ str.append(indent + "lineNo: " + statement.getLineNo() + "\n");
+ str.append(indent + "statementType: " + statementType + " -> " + statementSigunarure + "\n");
+ str.append("occurrenceExp: " + occurrenceExp + "\n");
+ return str.toString();
+ }
+}