diff --git a/src/org/ntlab/deltaViewer/CollaborationViewer.java b/src/org/ntlab/deltaViewer/CollaborationViewer.java index ed2b958..3fc4a99 100644 --- a/src/org/ntlab/deltaViewer/CollaborationViewer.java +++ b/src/org/ntlab/deltaViewer/CollaborationViewer.java @@ -138,6 +138,7 @@ // Make ObjectEdge and reset position of vertexObject, remove vertexMethodExecution. Statement statement = relatedPoint.getStatement(); MethodExecution prevMethodExec = prevAlias.getMethodExecution(); + boolean fThisAnotherParameter = false; if (relatedPoint.isMethodEntry()) { if (prevAlias.getAliasType() == Alias.AliasType.FORMAL_PARAMETER) { // this to another (parameter) @@ -161,117 +162,119 @@ removeCalledMethodExecutionVertex(objectToVertexMap.get(srcObjId), prevMethodExec, calledMethodExec); updateObjectVertices(); } - return; + fThisAnotherParameter = true; } } - if(statement instanceof FieldUpdate) { - // Format fieldName. - FieldUpdate fieldUpdateStatement = (FieldUpdate) statement; - String fieldName; - if (fieldUpdateStatement.getFieldName() != null) { - String fieldNames[] = formatFieldName(fieldUpdateStatement.getFieldName()); - fieldName = fieldNames[fieldNames.length-1]; - } else { - fieldName = ""; - } - String sourceObjectId = fieldUpdateStatement.getContainerObjId(); - - createObjectRefrence(fieldUpdateStatement, fieldName); - - // Change! - String targetObjectId = fieldUpdateStatement.getValueObjId(); - ObjectVertex targetObjectVertex = objectToVertexMap.get(targetObjectId); - - if (methodExecToVertexMap.containsKey(prevMethodExec)) { - if (methodExecToVertexMap.get(prevMethodExec).getLocals().contains(targetObjectVertex)) { - methodExecToVertexMap.get(prevMethodExec).getLocals().remove(targetObjectVertex); - System.out.println(methodExecToVertexMap.get(prevMethodExec).getLabel() + " :removeLocal: " + targetObjectVertex.getLabel()); - } else if (methodExecToVertexMap.get(prevMethodExec).getArguments().contains(targetObjectVertex)) { - methodExecToVertexMap.get(prevMethodExec).getArguments().remove(targetObjectVertex); - System.out.println(methodExecToVertexMap.get(prevMethodExec).getLabel() + " :removeArgument: " + targetObjectVertex.getLabel()); - } - } - if (nextAlias == null || (nextAlias != null && !prevMethodExec.getSignature().equals(nextAlias.getMethodSignature()))) { - removeCalledMethodExecutionVertex(objectToVertexMap.get(sourceObjectId), prevMethodExec.getCallerMethodExecution(), prevMethodExec); - updateObjectVertices(); - } - } - - if(statement instanceof MethodInvocation) { - MethodInvocation methodInvStatement = (MethodInvocation) statement; - MethodExecution calledMethodExec = methodInvStatement.getCalledMethodExecution(); - String methodSignature = calledMethodExec.getSignature(); - String srcClassName = null; - String srcObjId = null; - String tgtObjId = null; - - //Array��List�̂Ƃ��������x����t����i�m���ɕ������Ă�����̂Ƃ�)getSignature->contains("List.get(") || "Map.get(") <�z���C�g���X�g> -// if (methodExec.getSignature().contains("List.add(") || -// methodExec.getSignature().contains("Map.put(")) { - if (calledMethodExec.isCollectionType() - && (methodSignature.contains("add(") - || methodSignature.contains("set(") - || methodSignature.contains("put(") - || methodSignature.contains("push(") - || methodSignature.contains("addElement("))) { - - srcClassName = calledMethodExec.getThisClassName(); - srcObjId = calledMethodExec.getThisObjId(); - tgtObjId = calledMethodExec.getArguments().get(0).getId(); - ObjectVertex tgtObjectVertex = objectToVertexMap.get(tgtObjId); - - if (!methodExecToVertexMap.containsKey(calledMethodExec)) { - createMethodExecutionVertex(calledMethodExec.getThisObjId(), methodInvStatement.getCallerSideMethodName(), calledMethodExec); - update(); - moveArgumentObjectVertex(calledMethodExec, tgtObjectVertex, methodExecToVertexMap.get(calledMethodExec)); - update(); - createObjectRefrence(srcClassName, srcObjId, tgtObjId); - removeCalledMethodExecutionVertex(null, prevMethodExec, calledMethodExec); + if (!fThisAnotherParameter) { + if (statement instanceof FieldUpdate) { + // Format fieldName. + FieldUpdate fieldUpdateStatement = (FieldUpdate) statement; + String fieldName; + if (fieldUpdateStatement.getFieldName() != null) { + String fieldNames[] = formatFieldName(fieldUpdateStatement.getFieldName()); + fieldName = fieldNames[fieldNames.length-1]; } else { - createObjectRefrence(srcClassName, srcObjId, tgtObjId); + fieldName = ""; } + String sourceObjectId = fieldUpdateStatement.getContainerObjId(); + + createObjectRefrence(fieldUpdateStatement, fieldName); + + // Change! + String targetObjectId = fieldUpdateStatement.getValueObjId(); + ObjectVertex targetObjectVertex = objectToVertexMap.get(targetObjectId); + if (methodExecToVertexMap.containsKey(prevMethodExec)) { - if (methodExecToVertexMap.get(prevMethodExec).getLocals().contains(tgtObjectVertex)) { - methodExecToVertexMap.get(prevMethodExec).getLocals().remove(tgtObjectVertex); - System.out.println(methodExecToVertexMap.get(prevMethodExec).getLabel() + " :removeLocal: " + tgtObjectVertex.getLabel()); - } else if (methodExecToVertexMap.get(prevMethodExec).getArguments().contains(tgtObjectVertex)) { - methodExecToVertexMap.get(prevMethodExec).getArguments().remove(tgtObjectVertex); - System.out.println(methodExecToVertexMap.get(prevMethodExec).getLabel() + " :removeArgument: " + tgtObjectVertex.getLabel()); + if (methodExecToVertexMap.get(prevMethodExec).getLocals().contains(targetObjectVertex)) { + methodExecToVertexMap.get(prevMethodExec).getLocals().remove(targetObjectVertex); + System.out.println(methodExecToVertexMap.get(prevMethodExec).getLabel() + " :removeLocal: " + targetObjectVertex.getLabel()); + } else if (methodExecToVertexMap.get(prevMethodExec).getArguments().contains(targetObjectVertex)) { + methodExecToVertexMap.get(prevMethodExec).getArguments().remove(targetObjectVertex); + System.out.println(methodExecToVertexMap.get(prevMethodExec).getLabel() + " :removeArgument: " + targetObjectVertex.getLabel()); } } - List methodExecList = new ArrayList<>(methodExecToVertexMap.keySet()); - System.out.println(methodExecList.size()); if (nextAlias == null || (nextAlias != null && !prevMethodExec.getSignature().equals(nextAlias.getMethodSignature()))) { - if (methodExecList.size() > 1) { - removeCalledMethodExecutionVertex(null, prevMethodExec.getCallerMethodExecution(), prevMethodExec); - } else { - removeCalledMethodExecutionVertex(null, null, prevMethodExec); - } - } - updateObjectVertices(); - } else { - // this to another - srcClassName = methodInvStatement.getThisClassName(); - srcObjId = methodInvStatement.getThisObjId(); - tgtObjId = calledMethodExec.getReturnValue().getId(); - ObjectVertex tgtObjectVertex = objectToVertexMap.get(tgtObjId); - - createObjectRefrence(srcClassName, srcObjId, tgtObjId); - if (methodExecToVertexMap.containsKey(prevMethodExec)) { - if (methodExecToVertexMap.get(prevMethodExec).getLocals().contains(tgtObjectVertex)) { - methodExecToVertexMap.get(prevMethodExec).getLocals().remove(tgtObjectVertex); - System.out.println(methodExecToVertexMap.get(prevMethodExec).getLabel() + " :removeLocal: " + tgtObjectVertex.getLabel()); - } else if (methodExecToVertexMap.get(prevMethodExec).getArguments().contains(tgtObjectVertex)) { - methodExecToVertexMap.get(prevMethodExec).getArguments().remove(tgtObjectVertex); - System.out.println(methodExecToVertexMap.get(prevMethodExec).getLabel() + " :removeArgument: " + tgtObjectVertex.getLabel()); - } - } - if (nextAlias == null || (nextAlias != null && !calledMethodExec.getSignature().equals(nextAlias.getMethodSignature()))) { - removeCalledMethodExecutionVertex(objectToVertexMap.get(srcObjId), prevMethodExec, calledMethodExec); + removeCalledMethodExecutionVertex(objectToVertexMap.get(sourceObjectId), prevMethodExec.getCallerMethodExecution(), prevMethodExec); updateObjectVertices(); } } - + + if(statement instanceof MethodInvocation) { + MethodInvocation methodInvStatement = (MethodInvocation) statement; + MethodExecution calledMethodExec = methodInvStatement.getCalledMethodExecution(); + String methodSignature = calledMethodExec.getSignature(); + String srcClassName = null; + String srcObjId = null; + String tgtObjId = null; + + //Array��List�̂Ƃ��������x����t����i�m���ɕ������Ă�����̂Ƃ�)getSignature->contains("List.get(") || "Map.get(") <�z���C�g���X�g> +// if (methodExec.getSignature().contains("List.add(") || +// methodExec.getSignature().contains("Map.put(")) { + if (calledMethodExec.isCollectionType() + && (methodSignature.contains("add(") + || methodSignature.contains("set(") + || methodSignature.contains("put(") + || methodSignature.contains("push(") + || methodSignature.contains("addElement("))) { + + srcClassName = calledMethodExec.getThisClassName(); + srcObjId = calledMethodExec.getThisObjId(); + tgtObjId = calledMethodExec.getArguments().get(0).getId(); + ObjectVertex tgtObjectVertex = objectToVertexMap.get(tgtObjId); + + if (!methodExecToVertexMap.containsKey(calledMethodExec)) { + createMethodExecutionVertex(calledMethodExec.getThisObjId(), methodInvStatement.getCallerSideMethodName(), calledMethodExec); + update(); + moveArgumentObjectVertex(calledMethodExec, tgtObjectVertex, methodExecToVertexMap.get(calledMethodExec)); + update(); + createObjectRefrence(srcClassName, srcObjId, tgtObjId); + removeCalledMethodExecutionVertex(null, prevMethodExec, calledMethodExec); + } else { + createObjectRefrence(srcClassName, srcObjId, tgtObjId); + } + if (methodExecToVertexMap.containsKey(prevMethodExec)) { + if (methodExecToVertexMap.get(prevMethodExec).getLocals().contains(tgtObjectVertex)) { + methodExecToVertexMap.get(prevMethodExec).getLocals().remove(tgtObjectVertex); + System.out.println(methodExecToVertexMap.get(prevMethodExec).getLabel() + " :removeLocal: " + tgtObjectVertex.getLabel()); + } else if (methodExecToVertexMap.get(prevMethodExec).getArguments().contains(tgtObjectVertex)) { + methodExecToVertexMap.get(prevMethodExec).getArguments().remove(tgtObjectVertex); + System.out.println(methodExecToVertexMap.get(prevMethodExec).getLabel() + " :removeArgument: " + tgtObjectVertex.getLabel()); + } + } + List methodExecList = new ArrayList<>(methodExecToVertexMap.keySet()); + System.out.println(methodExecList.size()); + if (nextAlias == null || (nextAlias != null && !prevMethodExec.getSignature().equals(nextAlias.getMethodSignature()))) { + if (methodExecList.size() > 1) { + removeCalledMethodExecutionVertex(null, prevMethodExec.getCallerMethodExecution(), prevMethodExec); + } else { + removeCalledMethodExecutionVertex(null, null, prevMethodExec); + } + } + updateObjectVertices(); + } else { + // this to another + srcClassName = methodInvStatement.getThisClassName(); + srcObjId = methodInvStatement.getThisObjId(); + tgtObjId = calledMethodExec.getReturnValue().getId(); + ObjectVertex tgtObjectVertex = objectToVertexMap.get(tgtObjId); + + createObjectRefrence(srcClassName, srcObjId, tgtObjId); + if (methodExecToVertexMap.containsKey(prevMethodExec)) { + if (methodExecToVertexMap.get(prevMethodExec).getLocals().contains(tgtObjectVertex)) { + methodExecToVertexMap.get(prevMethodExec).getLocals().remove(tgtObjectVertex); + System.out.println(methodExecToVertexMap.get(prevMethodExec).getLabel() + " :removeLocal: " + tgtObjectVertex.getLabel()); + } else if (methodExecToVertexMap.get(prevMethodExec).getArguments().contains(tgtObjectVertex)) { + methodExecToVertexMap.get(prevMethodExec).getArguments().remove(tgtObjectVertex); + System.out.println(methodExecToVertexMap.get(prevMethodExec).getLabel() + " :removeArgument: " + tgtObjectVertex.getLabel()); + } + } + if (nextAlias == null || (nextAlias != null && !calledMethodExec.getSignature().equals(nextAlias.getMethodSignature()))) { + removeCalledMethodExecutionVertex(objectToVertexMap.get(srcObjId), prevMethodExec, calledMethodExec); + updateObjectVertices(); + } + } + + } } // MethodExecution tempMethodExec = alias.getMethodExecution();