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 568a561..b1e6e11 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 @@ -52,11 +52,6 @@ @Override public String toString() { StringBuilder str = new StringBuilder(); - String indent = " "; - str.append("objId: " + objectId + "\n"); - str.append("tp: " + occurrencePoint + "\n"); - str.append(indent + "signature: " + occurrencePoint.getMethodExecution().getCallerSideSignature() + "\n"); -// str.append(indent + "signature: " + occurrencePoint.getMethodExecution().getSignature() + "\n"); Statement statement = occurrencePoint.getStatement(); String statementType = ""; if (statement instanceof FieldAccess) { @@ -70,13 +65,18 @@ } else if (statement instanceof ArrayCreate) { statementType = "ArrayCreate"; } else if (statement instanceof MethodInvocation) { - statementType = "MethodInvocation"; + MethodExecution me = ((MethodInvocation)statement).getCalledMethodExecution(); + statementType = "MethodInvocation -> " + me.getCallerSideSignature(); if(((MethodInvocation)statement).getCalledMethodExecution().isConstructor()) { statementType += " (Constructor)"; } } - str.append(indent + "statementType: " + statementType + "\n"); + String indent = " "; + str.append("objId: " + objectId + "\n"); + str.append("tp: " + occurrencePoint + "\n"); + str.append(indent + "signature: " + occurrencePoint.getMethodExecution().getCallerSideSignature() + "\n"); str.append(indent + "lineNo: " + statement.getLineNo() + "\n"); + str.append(indent + "statementType: " + statementType + "\n"); str.append("occurrenceExp: " + occurrenceExp + "\n"); return str.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 103d1d7..f18e71d 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 @@ -13,6 +13,9 @@ import org.ntlab.traceCollector.tracer.OnlineTraceOutput; +//import com.sun.jdi.ObjectReference; +//import com.sun.jdi.Value; + public class TraceJSON extends Trace { // private static TraceJSON theTrace = null; private HashMap classes = new HashMap<>(); @@ -994,6 +997,35 @@ return null; } + public static String findValueObjId(Statement statement, int occurrenceEXP) { + String valueObjId = ""; + if (statement instanceof FieldAccess) { + valueObjId = ((FieldAccess) statement).getValueObjId(); + } else if (statement instanceof FieldUpdate) { + valueObjId = ((FieldUpdate)statement).getValueObjId(); + } else if (statement instanceof ArrayAccess) { + valueObjId = ((ArrayAccess)statement).getValueObjectId(); + } else if (statement instanceof ArrayUpdate) { + valueObjId = ((ArrayUpdate)statement).getValueObjectId(); + } else if (statement instanceof ArrayCreate) { + valueObjId = ((ArrayCreate)statement).getArrayObjectId(); + } else if (statement instanceof MethodInvocation) { + MethodExecution me = ((MethodInvocation)statement).getCalledMethodExecution(); + if (occurrenceEXP == Alias.OCCURRENCE_EXP_RETURN) { + valueObjId = me.getReturnValue().getId(); + } else if (occurrenceEXP == Alias.OCCURRENCE_EXP_RECEIVER) { + valueObjId = me.getThisObjId(); + } else { + ArrayList args = me.getArguments(); + int index = occurrenceEXP - Alias.OCCURRENCE_EXP_FIRST_ARG; + if (index >= 0 && index < args.size()) { + valueObjId = args.get(index).getId(); + } + } + } + return valueObjId; + } + public static Alias getAlias(String objectId, TracePoint occurrencePoint, int occurrenceExp) { return new Alias(objectId, occurrencePoint, occurrenceExp); } @@ -1073,7 +1105,7 @@ MethodExecution calledMethodExecution = ((MethodInvocation)tp.getStatement()).getCalledMethodExecution(); ArrayList args = calledMethodExecution.getArguments(); for (int i = 0; i < args.size(); i++) { - if (args.get(i).equals(objId)) { + if (args.get(i).getId().equals(objId)) { // ���\�b�h�Ăяo���̎������ɃG�C���A�X�̃I�u�W�F�N�gID����v�����ꍇ aliasList.add(new Alias(objId, tp.duplicate(), (i + Alias.OCCURRENCE_EXP_FIRST_ARG))); if (side == 0) { @@ -1081,7 +1113,7 @@ TracePoint previousTp = tp.duplicate(); previousTp.stepBackOver(); aliasLists = getObjectFlow(aliasLists, objId, previousTp, 0); // �Ăяo�����̃��\�b�h���s�ɖ߂� - } + } } } return aliasLists;