diff --git a/src/org/ntlab/deltaViewer/CollaborationLayout.java b/src/org/ntlab/deltaViewer/CollaborationLayout.java index bf3aad3..76674f9 100644 --- a/src/org/ntlab/deltaViewer/CollaborationLayout.java +++ b/src/org/ntlab/deltaViewer/CollaborationLayout.java @@ -83,7 +83,7 @@ } // Extract the reference access history. - List references = objectCallGraph.getReferences(); + List references = new ArrayList<>(objectCallGraph.getReferences()); Map> referenceHistory = new HashMap<>(); int order = 0; for (Alias a: aliasCollector.getAliasList()) { @@ -106,13 +106,28 @@ } else if (a.getAliasType() == AliasType.RETURN_VALUE) { MethodExecution methodExec = a.getMethodExecution(); if (methodExec.getSignature().contains("List.get(") || - methodExec.getSignature().contains("Map.get(")) { + methodExec.getSignature().contains("Map.get(") || + methodExec.getSignature().contains(".next()") || + methodExec.getSignature().contains(".iterator()") || + methodExec.getSignature().contains(".listIterator()")) { String srcObjId = methodExec.getThisObjId(); String dstObjId = methodExec.getReturnValue().getId(); String srcClassName = methodExec.getThisClassName(); String dstClassName = methodExec.getReturnValue().getActualType(); idx = references.indexOf(new Reference(srcObjId, dstObjId, srcClassName, dstClassName)); - } + } else if (methodExec.isStatic() && methodExec.getCallerMethodExecution().isStatic()) { + // For calls from a static method to another static method. + String dstClassName = methodExec.getThisClassName(); + String srcClassName = methodExec.getCallerMethodExecution().getThisClassName(); + String dstObjId = methodExec.getThisObjId() + ":" + dstClassName; + String srcObjId = methodExec.getCallerMethodExecution().getThisObjId() + ":" + srcClassName; + Reference r = new Reference(srcObjId, dstObjId, srcClassName, dstClassName); + idx = references.indexOf(r); + if (idx < 0) { + references.add(r); + idx = references.indexOf(r); + } + } } else if (a.getAliasType() == AliasType.CONSTRACTOR_INVOCATION) { MethodInvocation c = (MethodInvocation) a.getOccurrencePoint().getStatement(); String srcObjId = a.getMethodExecution().getThisObjId(); diff --git a/src/org/ntlab/deltaViewer/CollaborationViewer.java b/src/org/ntlab/deltaViewer/CollaborationViewer.java index 671fce7..b2b0cf8 100644 --- a/src/org/ntlab/deltaViewer/CollaborationViewer.java +++ b/src/org/ntlab/deltaViewer/CollaborationViewer.java @@ -480,6 +480,10 @@ srcClassName = nextMethodExec.getThisClassName(); fieldName = ""; System.out.println(TAG + ": Create Map of Edge.(ClassName=" + srcClassName + ")"); + } else if (nextMethodExec.getSignature().contains(".next()") || nextMethodExec.getSignature().contains(".iterator()") || nextMethodExec.getSignature().contains(".listIterator()")) { + srcClassName = nextMethodExec.getThisClassName(); + fieldName = ""; + System.out.println(TAG + ": Create List Iterator of Edge.(ClassName=" + srcClassName + ")"); } } else { if (nextAlias.getAliasType() == AliasType.FIELD) { // When final local. diff --git a/src/org/ntlab/deltaViewer/DeltaViewer.java b/src/org/ntlab/deltaViewer/DeltaViewer.java index 2294bb9..7a96622 100644 --- a/src/org/ntlab/deltaViewer/DeltaViewer.java +++ b/src/org/ntlab/deltaViewer/DeltaViewer.java @@ -549,10 +549,17 @@ MethodExecution nextMethodExec = nextAlias.getMethodExecution(); //Array��List�̂Ƃ��������x����t����i�m���ɕ������Ă�����̂Ƃ�)getSignature->contains("List.get(") || "Map.get(") <�z���C�g���X�g> if (nextMethodExec.getSignature().contains("List.get(") || - nextMethodExec.getSignature().contains("Map.get(")) { + nextMethodExec.getSignature().contains("Map.get(") || + nextMethodExec.getSignature().contains(".next()") || + nextMethodExec.getSignature().contains(".iterator()") || + nextMethodExec.getSignature().contains(".listIterator()")) { srcClassName = nextMethodExec.getThisClassName(); - fieldName = nextMethodExec.getArguments().get(0).getId(); - System.out.println("rTHIS " + srcClassName + ", " + nextMethodExec.getArguments().get(0).getId()); + if (nextMethodExec.getArguments().size() > 0) { + fieldName = nextMethodExec.getArguments().get(0).getId(); + } else { + fieldName = ""; + } + System.out.println("rTHIS " + srcClassName + ", " + fieldName); } } else { Statement statement = nextAlias.getOccurrencePoint().getStatement(); diff --git a/src/org/ntlab/deltaViewer/ForwardAliasCollector.java b/src/org/ntlab/deltaViewer/ForwardAliasCollector.java index 93ca42f..f0d48e1 100644 --- a/src/org/ntlab/deltaViewer/ForwardAliasCollector.java +++ b/src/org/ntlab/deltaViewer/ForwardAliasCollector.java @@ -138,7 +138,10 @@ addAlias(methodInvAlias); } if (methodSignature.contains("List.get(") || - methodSignature.contains("Map.get(")) { + methodSignature.contains("Map.get(") || + methodSignature.contains(".next()") || + methodSignature.contains(".iterator()") || + methodSignature.contains(".listIterator()")) { String returnClass = mi.getCalledMethodExecution().getReturnValue().getActualType(); Reference ref = new Reference(mi.getCalledMethodExecution().getThisObjId(), returnValue, mi.getCalledMethodExecution().getThisClassName(), returnClass); ref.setCollection(true); diff --git a/src/org/ntlab/deltaViewer/ForwardLayout.java b/src/org/ntlab/deltaViewer/ForwardLayout.java index 893535f..021fb0c 100644 --- a/src/org/ntlab/deltaViewer/ForwardLayout.java +++ b/src/org/ntlab/deltaViewer/ForwardLayout.java @@ -51,7 +51,10 @@ } else if (a.getAliasType() == AliasType.RETURN_VALUE) { MethodExecution methodExec = a.getMethodExecution(); if (methodExec.getSignature().contains("List.get(") || - methodExec.getSignature().contains("Map.get(")) { + methodExec.getSignature().contains("Map.get(") || + methodExec.getSignature().contains(".next()") || + methodExec.getSignature().contains(".iterator()") || + methodExec.getSignature().contains(".listIterator()")) { String srcObjId = methodExec.getThisObjId(); String dstObjId = methodExec.getReturnValue().getId(); String srcClassName = methodExec.getThisClassName();