diff --git a/org.ntlab.traceAnalyzer/src/org/ntlab/deltaExtractor/DeltaExtractorJSON.java b/org.ntlab.traceAnalyzer/src/org/ntlab/deltaExtractor/DeltaExtractorJSON.java index 16be00d..4b1b293 100644 --- a/org.ntlab.traceAnalyzer/src/org/ntlab/deltaExtractor/DeltaExtractorJSON.java +++ b/org.ntlab.traceAnalyzer/src/org/ntlab/deltaExtractor/DeltaExtractorJSON.java @@ -592,24 +592,50 @@ Reference r; if (methodExecution.isCollectionType()) { if (objectId != null) { - // �R���N�V�����^�̏ꍇ�A�����ԁX�̗v�f�𒼐ڕێ����Ă���Ɖ��肷�� - if (objectId.equals(srcObject.getId())) { - r = new Reference(thisObj, srcObject); - r.setCollection(true); - eStructure.addSrcSide(r); - srcObject = thisObj; - aliasCollector.changeTrackingObject(objectId, thisObjectId, true); - aliasCollector.addAlias(new Alias(Alias.AliasType.THIS, 0, thisObjectId, tracePoint.duplicate())); - } else if(objectId.equals(dstObject.getId())) { - r = new Reference(thisObj, dstObject); - r.setCollection(true); - eStructure.addDstSide(r); - dstObject =thisObj; - aliasCollector.changeTrackingObject(objectId, thisObjectId, false); - aliasCollector.addAlias(new Alias(Alias.AliasType.THIS, 0, thisObjectId, tracePoint.duplicate())); + if (methodExecution.getSignature().contains("Collections.unmodifiable") + || methodExecution.getSignature().startsWith("Collections.checked") + || methodExecution.getSignature().startsWith("Collections.synchronized") + || methodExecution.getSignature().startsWith("Arrays.asList") + || methodExecution.getSignature().startsWith("Arrays.copyOf")) { + // �z���R���N�V�����̊Ԃ̕ϊ��̏ꍇ�A�ϊ����̑������Ɉˑ����� + if (arguments.size() > 0) { + if (objectId.equals(srcObject.getId())) { + r = new Reference(arguments.get(0), srcObject); + r.setCollection(true); + eStructure.addSrcSide(r); + srcObject = arguments.get(0); + aliasCollector.changeTrackingObject(objectId, arguments.get(0).getId(), true); + aliasCollector.addAlias(new Alias(Alias.AliasType.FORMAL_PARAMETER, 0, arguments.get(0).getId(), tracePoint.duplicate())); + } else if(objectId.equals(dstObject.getId())) { + r = new Reference(arguments.get(0), dstObject); + r.setCollection(true); + eStructure.addDstSide(r); + dstObject =arguments.get(0); + aliasCollector.changeTrackingObject(objectId, arguments.get(0).getId(), false); + aliasCollector.addAlias(new Alias(Alias.AliasType.FORMAL_PARAMETER, 0, arguments.get(0).getId(), tracePoint.duplicate())); + } + } + objList.set(index, arguments.get(0).getId()); + } else { + // �R���N�V�����^�̏ꍇ�A�����ԁX�̗v�f�𒼐ڕێ����Ă���Ɖ��肷�� + if (objectId.equals(srcObject.getId())) { + r = new Reference(thisObj, srcObject); + r.setCollection(true); + eStructure.addSrcSide(r); + srcObject = thisObj; + aliasCollector.changeTrackingObject(objectId, thisObjectId, true); + aliasCollector.addAlias(new Alias(Alias.AliasType.THIS, 0, thisObjectId, tracePoint.duplicate())); + } else if(objectId.equals(dstObject.getId())) { + r = new Reference(thisObj, dstObject); + r.setCollection(true); + eStructure.addDstSide(r); + dstObject =thisObj; + aliasCollector.changeTrackingObject(objectId, thisObjectId, false); + aliasCollector.addAlias(new Alias(Alias.AliasType.THIS, 0, thisObjectId, tracePoint.duplicate())); + } + objList.set(index, methodExecution.getThisObjId()); } } - objList.set(index, methodExecution.getThisObjId()); isResolved = true; // �K�v�Ȃ̂ł�? } diff --git a/org.ntlab.traceAnalyzer/src/org/ntlab/deltaExtractor/Test.java b/org.ntlab.traceAnalyzer/src/org/ntlab/deltaExtractor/Test.java index b15354d..6379f24 100644 --- a/org.ntlab.traceAnalyzer/src/org/ntlab/deltaExtractor/Test.java +++ b/org.ntlab.traceAnalyzer/src/org/ntlab/deltaExtractor/Test.java @@ -31,7 +31,7 @@ System.out.println(alias.getAliasType().toString() + ":" + alias.getObjectId() +"," + alias.getIndex() + "," + alias.getMethodSignature() + "," + alias.getLineNo()); } @Override - public void changeTrackingObject(String from, String to) { + public void changeTrackingObject(String from, String to, boolean isSrcSide) { System.out.println("Change:" + from + "�@=>�@" + to); } }); diff --git a/org.ntlab.traceAnalyzer/src/org/ntlab/trace/Trace.java b/org.ntlab.traceAnalyzer/src/org/ntlab/trace/Trace.java index ec26277..aa938f2 100644 --- a/org.ntlab.traceAnalyzer/src/org/ntlab/trace/Trace.java +++ b/org.ntlab.traceAnalyzer/src/org/ntlab/trace/Trace.java @@ -142,6 +142,8 @@ || curLine.contains("Return call(Map") || curLine.contains("Return call(Set") || curLine.contains("Return call(Linked") + || curLine.contains("Return call(Collection") + || curLine.contains("Return call(Arrays") || curLine.contains("Return call(Thread")) { isCollectionType = true; } diff --git a/org.ntlab.traceAnalyzer/src/org/ntlab/trace/TraceJSON.java b/org.ntlab.traceAnalyzer/src/org/ntlab/trace/TraceJSON.java index acc061c..01c99db 100644 --- a/org.ntlab.traceAnalyzer/src/org/ntlab/trace/TraceJSON.java +++ b/org.ntlab.traceAnalyzer/src/org/ntlab/trace/TraceJSON.java @@ -217,6 +217,8 @@ || thisClassName.contains("java.util.Map") || thisClassName.contains("java.util.Set") || thisClassName.contains("java.util.Linked") + || thisClassName.contains("java.util.Collection") + || thisClassName.contains("java.util.Arrays") || thisClassName.contains("java.lang.Thread")) { isCollectionType = true; }