diff --git a/src/org/ntlab/deltaExtractor/DeltaExtractor.java b/src/org/ntlab/deltaExtractor/DeltaExtractor.java index e5a295e..23fc536 100644 --- a/src/org/ntlab/deltaExtractor/DeltaExtractor.java +++ b/src/org/ntlab/deltaExtractor/DeltaExtractor.java @@ -38,7 +38,7 @@ protected static final boolean DEBUG2 = true; protected final IAliasCollector defaultAliasCollector = new IAliasCollector() { @Override - public void changeTrackingObject(String from, String to) { + public void changeTrackingObject(String from, String to, boolean isSrcSide) { } @Override public void addAlias(Alias alias) { diff --git a/src/org/ntlab/deltaExtractor/DeltaExtractorJSON.java b/src/org/ntlab/deltaExtractor/DeltaExtractorJSON.java index 227537a..16be00d 100644 --- a/src/org/ntlab/deltaExtractor/DeltaExtractorJSON.java +++ b/src/org/ntlab/deltaExtractor/DeltaExtractorJSON.java @@ -126,18 +126,21 @@ aliasList.put(refObjectId, new Alias(Alias.AliasType.FIELD, 0, refObjectId, tracePoint.duplicate())); } else { // ���ڎQ�Ƃ̏ꍇ + boolean isSrcSideChanged = false; if (refObjectId.equals(srcObject.getId())) { eStructure.addSrcSide(new Reference(ownerObjectId, refObjectId, fs.getContainerClassName(), srcObject.getActualType())); srcObject = new ObjectReference(ownerObjectId, fs.getContainerClassName()); + isSrcSideChanged = true; } else if(refObjectId.equals(dstObject.getId())) { eStructure.addDstSide(new Reference(ownerObjectId, refObjectId, fs.getContainerClassName(), dstObject.getActualType())); dstObject = new ObjectReference(ownerObjectId, fs.getContainerClassName()); + isSrcSideChanged = false; } objList.set(index, ownerObjectId); aliasCollector.addAlias(new Alias(Alias.AliasType.FIELD, 0, refObjectId, tracePoint.duplicate())); - aliasCollector.changeTrackingObject(refObjectId, ownerObjectId); //�ǐՑΏۃI�u�W�F�N�g�̐؂�ւ� + aliasCollector.changeTrackingObject(refObjectId, ownerObjectId, isSrcSideChanged); //�ǐՑΏۃI�u�W�F�N�g�̐؂�ւ� aliasCollector.addAlias(new Alias(Alias.AliasType.CONTAINER, 0, ownerObjectId, tracePoint.duplicate())); } } @@ -147,19 +150,22 @@ int index = objList.indexOf(elementObjectId); if (index != -1) { // �z��A�N�Z�X�̏ꍇ + boolean isSrcSideChanged = false; String arrayObjectId = aa.getArrayObjectId(); if (elementObjectId.equals(srcObject.getId())) { eStructure.addSrcSide(new Reference(arrayObjectId, elementObjectId, aa.getArrayClassName(), srcObject.getActualType())); srcObject = new ObjectReference(arrayObjectId, aa.getArrayClassName()); + isSrcSideChanged = true; } else if(elementObjectId.equals(dstObject.getId())) { eStructure.addDstSide(new Reference(arrayObjectId, elementObjectId, aa.getArrayClassName(), dstObject.getActualType())); dstObject = new ObjectReference(arrayObjectId, aa.getArrayClassName()); + isSrcSideChanged = false; } objList.set(index, arrayObjectId); aliasCollector.addAlias(new Alias(Alias.AliasType.ARRAY_ELEMENT, aa.getIndex(), elementObjectId, tracePoint.duplicate())); - aliasCollector.changeTrackingObject(elementObjectId, arrayObjectId); //�ǐՑΏۃI�u�W�F�N�g�̐؂�ւ� + aliasCollector.changeTrackingObject(elementObjectId, arrayObjectId, isSrcSideChanged); //�ǐՑΏۃI�u�W�F�N�g�̐؂�ւ� aliasCollector.addAlias(new Alias(Alias.AliasType.ARRAY, 0, arrayObjectId, tracePoint.duplicate())); } } else if (statement instanceof ArrayCreate) { @@ -264,7 +270,7 @@ isSrcSide = false; } aliasCollector.addAlias(aliasList.get(removeId)); - aliasCollector.changeTrackingObject(removeId, thisObjectId); + aliasCollector.changeTrackingObject(removeId, thisObjectId, isSrcSide); aliasCollector.addAlias(new Alias(Alias.AliasType.THIS, 0, thisObjectId, aliasList.get(removeId).getOccurrencePoint())); } } @@ -418,36 +424,42 @@ String ownerObjectId = fs.getContainerObjId(); if (ownerObjectId.equals(thisObjectId)) { // �t�B�[���h�Q�Ƃ̏ꍇ + boolean isSrcSideChanged = false; if (objectId.equals(srcObject.getId())) { eStructure.addSrcSide(new Reference(thisObj, srcObject)); srcObject = thisObj; trackingObj = srcObject; + isSrcSideChanged = true; } else if(objectId.equals(dstObject.getId())) { eStructure.addDstSide(new Reference(thisObj, dstObject)); dstObject = thisObj; trackingObj = dstObject; + isSrcSideChanged = false; } aliasCollector.addAlias(new Alias(Alias.AliasType.FIELD, 0, objectId, tracePoint.duplicate())); - aliasCollector.changeTrackingObject(objectId, ownerObjectId); + aliasCollector.changeTrackingObject(objectId, ownerObjectId, isSrcSideChanged); aliasCollector.addAlias(new Alias(Alias.AliasType.THIS, 0, ownerObjectId, tracePoint.duplicate())); if (Trace.isNull(thisObjectId)) objectId = null; // static�ϐ��̏ꍇ else objectId = thisObjectId; objList.set(index, objectId); } else { // ���ڎQ�Ƃ̏ꍇ + boolean isSrcSideChanged = false; if (objectId.equals(srcObject.getId())) { eStructure.addSrcSide(new Reference(ownerObjectId, objectId, fs.getContainerClassName(), srcObject.getActualType())); srcObject = new ObjectReference(ownerObjectId, fs.getContainerClassName()); trackingObj = srcObject; + isSrcSideChanged = true; } else if(objectId.equals(dstObject.getId())) { eStructure.addDstSide(new Reference(ownerObjectId, objectId, fs.getContainerClassName(), dstObject.getActualType())); dstObject = new ObjectReference(ownerObjectId, fs.getContainerClassName()); trackingObj = dstObject; + isSrcSideChanged = false; } aliasCollector.addAlias(new Alias(Alias.AliasType.FIELD, 0, objectId, tracePoint.duplicate())); - aliasCollector.changeTrackingObject(objectId, ownerObjectId); + aliasCollector.changeTrackingObject(objectId, ownerObjectId, isSrcSideChanged); aliasCollector.addAlias(new Alias(Alias.AliasType.CONTAINER, 0, ownerObjectId, tracePoint.duplicate())); if (Trace.isNull(ownerObjectId)) objectId = null; // static�ϐ��̏ꍇ else objectId = ownerObjectId; @@ -459,20 +471,23 @@ ArrayAccess aa = (ArrayAccess)statement; if (objectId != null && objectId.equals(aa.getValueObjectId())) { // �z��A�N�Z�X�̏ꍇ + boolean isSrcSideChanged = false; String arrayObjectId = aa.getArrayObjectId(); if (objectId.equals(srcObject.getId())) { eStructure.addSrcSide(new Reference(arrayObjectId, objectId, aa.getArrayClassName(), srcObject.getActualType())); srcObject = new ObjectReference(arrayObjectId, aa.getArrayClassName()); trackingObj = srcObject; + isSrcSideChanged = true; } else if(objectId.equals(dstObject.getId())) { eStructure.addDstSide(new Reference(arrayObjectId, objectId, aa.getArrayClassName(), dstObject.getActualType())); dstObject = new ObjectReference(arrayObjectId, aa.getArrayClassName()); trackingObj = dstObject; + isSrcSideChanged = false; } aliasCollector.addAlias(new Alias(Alias.AliasType.ARRAY_ELEMENT, aa.getIndex(), objectId, tracePoint.duplicate())); - aliasCollector.changeTrackingObject(objectId, arrayObjectId); + aliasCollector.changeTrackingObject(objectId, arrayObjectId, isSrcSideChanged); aliasCollector.addAlias(new Alias(Alias.AliasType.ARRAY, 0, arrayObjectId, tracePoint.duplicate())); objectId = arrayObjectId; objList.set(index, objectId); @@ -482,17 +497,20 @@ ArrayCreate ac = (ArrayCreate)statement; if (objectId != null && objectId.equals(ac.getArrayObjectId())) { // �z�񐶐��̏ꍇ + boolean isSrcSideChanged = false; if (objectId.equals(srcObject.getId())) { eStructure.addSrcSide(new Reference(thisObj, srcObject)); srcObject = thisObj; trackingObj = srcObject; + isSrcSideChanged = true; } else if(objectId.equals(dstObject.getId())) { eStructure.addDstSide(new Reference(thisObj, dstObject)); dstObject = thisObj; trackingObj = dstObject; + isSrcSideChanged = false; } aliasCollector.addAlias(new Alias(Alias.AliasType.ARRAY_CREATE, 0, ac.getArrayObjectId(), tracePoint.duplicate())); - aliasCollector.changeTrackingObject(ac.getArrayObjectId(), thisObjectId); + aliasCollector.changeTrackingObject(ac.getArrayObjectId(), thisObjectId, isSrcSideChanged); aliasCollector.addAlias(new Alias(Alias.AliasType.THIS, 0, thisObjectId, tracePoint.duplicate())); if (Trace.isNull(thisObjectId)) objectId = null; // static�ϐ��̏ꍇ else objectId = thisObjectId; @@ -521,7 +539,7 @@ eStructure.addSrcSide(r); srcObject = thisObj; trackingObj = srcObject; - aliasCollector.changeTrackingObject(objectId, thisObjectId); + 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); @@ -529,7 +547,7 @@ eStructure.addDstSide(r); dstObject = thisObj; trackingObj = dstObject; - aliasCollector.changeTrackingObject(objectId, thisObjectId); + aliasCollector.changeTrackingObject(objectId, thisObjectId, false); aliasCollector.addAlias(new Alias(Alias.AliasType.THIS, 0, thisObjectId, tracePoint.duplicate())); } if (Trace.isNull(thisObjectId)) objectId = null; // static�ϐ��̏ꍇ @@ -580,14 +598,14 @@ r.setCollection(true); eStructure.addSrcSide(r); srcObject = thisObj; - aliasCollector.changeTrackingObject(objectId, thisObjectId); + 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); + aliasCollector.changeTrackingObject(objectId, thisObjectId, false); aliasCollector.addAlias(new Alias(Alias.AliasType.THIS, 0, thisObjectId, tracePoint.duplicate())); } } diff --git a/src/org/ntlab/deltaExtractor/IAliasCollector.java b/src/org/ntlab/deltaExtractor/IAliasCollector.java index d3b807f..0794023 100644 --- a/src/org/ntlab/deltaExtractor/IAliasCollector.java +++ b/src/org/ntlab/deltaExtractor/IAliasCollector.java @@ -4,6 +4,6 @@ void addAlias(Alias alias); - void changeTrackingObject(String from, String to); + void changeTrackingObject(String from, String to, boolean isSrcSide); } \ No newline at end of file diff --git a/src/org/ntlab/deltaViewer/DeltaAliasCollector.java b/src/org/ntlab/deltaViewer/DeltaAliasCollector.java index 2d37b6f..a7f6083 100644 --- a/src/org/ntlab/deltaViewer/DeltaAliasCollector.java +++ b/src/org/ntlab/deltaViewer/DeltaAliasCollector.java @@ -72,7 +72,7 @@ } @Override - public void changeTrackingObject(String fromObjId, String toObjId) { + public void changeTrackingObject(String fromObjId, String toObjId, boolean isSrcSide) { System.out.println(fromObjId + " -> " + toObjId); }