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 index 4ffeaff..e2ce931 100644 --- a/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/trace/Alias.java +++ b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/tracer/trace/Alias.java @@ -32,8 +32,7 @@ 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; @@ -55,6 +54,11 @@ public MethodExecution getMethodExecution() { return occurrencePoint.getMethodExecution(); } + + public String getMethodExecutionClassName() { + MethodExecution methodExecution = occurrencePoint.getMethodExecution(); + return Trace.getDeclaringType(methodExecution.getSignature(), methodExecution.isConstructor()); + } public String getMethodSignature() { return occurrencePoint.getMethodExecution().getCallerSideSignature(); @@ -152,6 +156,32 @@ } return className; } + + public String getOccurrenceText() { + String statementType = getStatementType(); + switch (statementType) { + case "FieldAccess": + case "FieldUpdate": + return (occurrenceExp == 0) ? "container" : "field"; + case "ArrayAccess": + case "ArrayUpdate": + return (occurrenceExp == 0) ? "arrayObject" : "arrayValue"; + case "ArrayCreate": + return "return"; + case "MethodInvocation": + if (occurrenceExp <= 0) { + return (occurrenceExp == 0) ? "receiver" : "return"; + } + final String[] ORDER_TEXT = {"th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th"}; // 0-13�ɑΉ� + final String ARG = " arg"; + if (occurrenceExp % 100 >= ORDER_TEXT.length) { + return occurrenceExp + ORDER_TEXT[occurrenceExp % 10] + ARG; // ��2����14�ȏ�Ȃ�, ��1���̐����ɑΉ������� + } else if (occurrenceExp % 100 >= 0) { + return occurrenceExp + ORDER_TEXT[occurrenceExp % 100] + ARG; // ��2����0�ȏ�13�ȉ��Ȃ�, ��2���̐����ɑΉ������� + } + } + return String.valueOf(occurrenceExp); + } @Override public String toString() { 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 7a5037c..71608fc 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 @@ -1006,29 +1006,59 @@ Statement statement = statements.get(i); if (statement instanceof FieldAccess) { FieldAccess fa = (FieldAccess)statement; - startAliasList.add(new Alias(fa.getContainerObjId(), tp, Alias.OCCURRENCE_EXP_CONTAINER)); - startAliasList.add(new Alias(fa.getValueObjId(), tp, Alias.OCCURRENCE_EXP_FIELD)); + String objId = fa.getContainerObjId(); + if (!("0".equals(objId))) { + startAliasList.add(new Alias(objId, tp, Alias.OCCURRENCE_EXP_CONTAINER)); + } + objId = fa.getValueObjId(); + if ((!"0".equals(objId))) { + startAliasList.add(new Alias(objId, tp, Alias.OCCURRENCE_EXP_FIELD)); + } } else if (statement instanceof FieldUpdate) { FieldUpdate fu = (FieldUpdate)statement; - startAliasList.add(new Alias(fu.getContainerObjId(), tp, Alias.OCCURRENCE_EXP_CONTAINER)); - startAliasList.add(new Alias(fu.getValueObjId(), tp, Alias.OCCURRENCE_EXP_FIELD)); + String objId = fu.getContainerObjId(); + if ((!"0".equals(objId))) { + startAliasList.add(new Alias(objId, tp, Alias.OCCURRENCE_EXP_CONTAINER)); + } + objId = fu.getValueObjId(); + if ((!"0".equals(objId))) { + startAliasList.add(new Alias(objId, tp, Alias.OCCURRENCE_EXP_FIELD)); + } } else if (statement instanceof ArrayAccess) { String valueObjId = ((ArrayAccess)statement).getValueObjectId(); - startAliasList.add(new Alias(valueObjId, tp, Alias.OCCURRENCE_EXP_ARRAY)); + if (!("0".equals(valueObjId))) { + startAliasList.add(new Alias(valueObjId, tp, Alias.OCCURRENCE_EXP_ARRAY)); + } } else if (statement instanceof ArrayUpdate) { String valueObjId = ((ArrayUpdate)statement).getValueObjectId(); - startAliasList.add(new Alias(valueObjId, tp, Alias.OCCURRENCE_EXP_ARRAY)); + if (!("0".equals(valueObjId))) { + startAliasList.add(new Alias(valueObjId, tp, Alias.OCCURRENCE_EXP_ARRAY)); + } } else if (statement instanceof ArrayCreate) { String valueObjId = ((ArrayAccess)statement).getValueObjectId(); - startAliasList.add(new Alias(valueObjId, tp, Alias.OCCURRENCE_EXP_RETURN)); + if (!("0".equals(valueObjId))) { + startAliasList.add(new Alias(valueObjId, tp, Alias.OCCURRENCE_EXP_RETURN)); + } } else if (statement instanceof MethodInvocation) { MethodExecution calledMe = ((MethodInvocation)statement).getCalledMethodExecution(); - startAliasList.add(new Alias(calledMe.getThisObjId(), tp, Alias.OCCURRENCE_EXP_RECEIVER)); + String thisObjId = calledMe.getThisObjId(); + if (!("0".equals(thisObjId))) { + startAliasList.add(new Alias(thisObjId, tp, Alias.OCCURRENCE_EXP_RECEIVER)); + } List args = calledMe.getArguments(); for (int j = 0; j < args.size(); j++) { - startAliasList.add(new Alias(args.get(j).getId(), tp, (j + Alias.OCCURRENCE_EXP_FIRST_ARG))); + String argValueId = args.get(j).getId(); + if (!("0".equals(argValueId))) { + startAliasList.add(new Alias(argValueId, tp, (j + Alias.OCCURRENCE_EXP_FIRST_ARG))); + } } - startAliasList.add(new Alias(calledMe.getReturnValue().getId(), tp, Alias.OCCURRENCE_EXP_RETURN)); + ObjectReference returnValue = calledMe.getReturnValue(); + if (returnValue != null) { + String returnValueId = returnValue.getId(); + if (!("0".equals(returnValueId))) { + startAliasList.add(new Alias(returnValueId, tp, Alias.OCCURRENCE_EXP_RETURN)); + } + } } } return startAliasList; @@ -1046,15 +1076,15 @@ String objId = startAlias.getObjectId(); TracePoint tp = startAlias.getOccurrencePoint().duplicate(); ArrayList> resultLists = getObjectFlow(aliasLists, objId, tp, 0); - for (int i = 0; i < resultLists.size(); i++) { - ArrayList resultList = resultLists.get(i); - System.out.println("---------------------------------------------------------"); // �m�F�p - for (Alias alias : resultList) System.out.println(alias); // �m�F�p +// for (int i = 0; i < resultLists.size(); i++) { +// ArrayList resultList = resultLists.get(i); +// System.out.println("---------------------------------------------------------"); // �m�F�p +// for (Alias alias : resultList) System.out.println(alias); // �m�F�p // int lastAliasOccurrenceEXP = resultList.get(resultList.size() - 1).getOccurrenceExp(); // if (lastAliasOccurrenceEXP != Alias.OCCURRENCE_EXP_RETURN) { // resultLists.remove(resultList); // �����̃G�C���A�X���z�񐶐���R���X�g���N�^�Ăяo���ł͂Ȃ����X�g���폜���� // } - } +// } return resultLists; } @@ -1099,7 +1129,6 @@ // �߂�l�ɃG�C���A�X�̃I�u�W�F�N�gID����v�����ꍇ aliasList.add(new Alias(objId, tp.duplicate(), Alias.OCCURRENCE_EXP_RETURN)); if (calledMethodExecution.isConstructor()) { - System.out.println("return (Constructor)"); return aliasLists; // �R���X�g���N�^�Ăяo���ӏ��̓G�C���A�X�̋N���Ȃ̂ł���ȑO�ɂ͂����Ȃ��͂� } TracePoint exitTp = calledMethodExecution.getExitPoint(); // �Ăяo�����\�b�h���s�̍ŏI�X�e�[�g�����g���w��tp���擾