diff --git a/src/org/ntlab/traceDebugger/CallTreeModels.java b/src/org/ntlab/traceDebugger/CallTreeModels.java index b4b2271..c61903d 100644 --- a/src/org/ntlab/traceDebugger/CallTreeModels.java +++ b/src/org/ntlab/traceDebugger/CallTreeModels.java @@ -31,19 +31,21 @@ public void update(DeltaMarkerManager deltaMarkerManager) { reset(); IMarker coordinatorMarker = deltaMarkerManager.getCoordinatorDeltaMarker(); - MethodExecution coordinatorME = DeltaMarkerManager.getMethodExecution(coordinatorMarker); - List markersOrderByAdding = deltaMarkerManager.getMarkersByOrder(); - for (IMarker marker : markersOrderByAdding) { - MethodExecution me = DeltaMarkerManager.getMethodExecution(marker); - CallTreeModel callTreeModel = new CallTreeModel(me); - if (!(callTreeModelsMemo.containsKey(me))) { - callTreeModelsMemo.put(me, callTreeModel); - if (!(me.equals(coordinatorME))) { - linkTreeToCoordinator(callTreeModel, coordinatorME); - } - } + if (coordinatorMarker != null) { + MethodExecution coordinatorME = DeltaMarkerManager.getMethodExecution(coordinatorMarker); + List markersOrderByAdding = deltaMarkerManager.getMarkersByOrder(); + for (IMarker marker : markersOrderByAdding) { + MethodExecution me = DeltaMarkerManager.getMethodExecution(marker); + CallTreeModel callTreeModel = new CallTreeModel(me); + if (!(callTreeModelsMemo.containsKey(me))) { + callTreeModelsMemo.put(me, callTreeModel); + if (!(me.equals(coordinatorME))) { + linkTreeToCoordinator(callTreeModel, coordinatorME); + } + } + } + createCallTreeModels(callTreeModelsMemo.get(coordinatorME)); } - createCallTreeModels(callTreeModelsMemo.get(coordinatorME)); } private void linkTreeToCoordinator(CallTreeModel currentModel, final MethodExecution coordinatorME) { diff --git a/src/org/ntlab/traceDebugger/CallTreeView.java b/src/org/ntlab/traceDebugger/CallTreeView.java index 90c2c7f..e1c9f9c 100644 --- a/src/org/ntlab/traceDebugger/CallTreeView.java +++ b/src/org/ntlab/traceDebugger/CallTreeView.java @@ -52,14 +52,13 @@ if (!(value instanceof CallTreeModel)) return; CallTreeModel callTreeModel = (CallTreeModel)value; - MethodExecution methodExecution = callTreeModel.getMethodExecution(); + MethodExecution methodExecution = callTreeModel.getMethodExecution(); highlight(methodExecution); TracePoint tp = methodExecution.getEntryPoint(); - JavaEditorOperator.openSrcFileOfMethodExecution(methodExecution, -1); + DebuggingController controller = DebuggingController.getInstance(); + controller.jumpToTheTracePoint(tp, false); CallStackView callStackView = (CallStackView)getOtherView(CallStackView.ID); - callStackView.updateByTracePoint(tp); VariableView variableView = ((VariableView)getOtherView(VariableView.ID)); - variableView.updateVariablesByTracePoint(tp, false); AbstractAnalyzer analyzer = TraceDebuggerPlugin.getAnalyzer(); if (analyzer instanceof DeltaExtractionAnalyzer) { DeltaMarkerView deltaMarkerView = ((DeltaExtractionAnalyzer)analyzer).getActiveDeltaMarkerView(); diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractor.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractor.java index 2d4a1e6..0a60157 100644 --- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractor.java +++ b/src/org/ntlab/traceDebugger/analyzerProvider/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/traceDebugger/analyzerProvider/DeltaExtractorJSON.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractorJSON.java index aa7622d..eff4c40 100644 --- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractorJSON.java +++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractorJSON.java @@ -123,18 +123,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())); } } @@ -144,19 +147,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) { @@ -261,8 +267,8 @@ isSrcSide = false; } aliasCollector.addAlias(aliasList.get(removeId)); - aliasCollector.changeTrackingObject(removeId, thisObjectId); - if (aliasList.get(removeId) != null) aliasCollector.addAlias(new Alias(Alias.AliasType.THIS, 0, thisObjectId, aliasList.get(removeId).getOccurrencePoint())); + aliasCollector.changeTrackingObject(removeId, thisObjectId, isSrcSide); + aliasCollector.addAlias(new Alias(Alias.AliasType.THIS, 0, thisObjectId, aliasList.get(removeId).getOccurrencePoint())); } } } @@ -415,36 +421,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; @@ -456,20 +468,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); @@ -479,17 +494,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; @@ -518,7 +536,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); @@ -526,7 +544,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�ϐ��̏ꍇ @@ -577,14 +595,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/traceDebugger/analyzerProvider/DeltaRelatedAliasCollector.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaRelatedAliasCollector.java index f904085..6ab3400 100644 --- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaRelatedAliasCollector.java +++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaRelatedAliasCollector.java @@ -62,12 +62,17 @@ } @Override - public void changeTrackingObject(String from, String to) { - if (srcSideIdList.contains(from)) { + public void changeTrackingObject(String from, String to, boolean isSrcSide) { + if (isSrcSide) { srcSideIdList.add(to); - } else if (dstSideIdList.contains(from)) { + } else { dstSideIdList.add(to); } +// if (srcSideIdList.contains(from)) { +// srcSideIdList.add(to); +// } else if (dstSideIdList.contains(from)) { +// dstSideIdList.add(to); +// } } public List getRelatedAliases() { diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/IAliasCollector.java b/src/org/ntlab/traceDebugger/analyzerProvider/IAliasCollector.java index ca1b1ad..31379f7 100644 --- a/src/org/ntlab/traceDebugger/analyzerProvider/IAliasCollector.java +++ b/src/org/ntlab/traceDebugger/analyzerProvider/IAliasCollector.java @@ -1,9 +1,9 @@ package org.ntlab.traceDebugger.analyzerProvider; public interface IAliasCollector { - + void addAlias(Alias alias); - - void changeTrackingObject(String from, String to); - -} + + void changeTrackingObject(String from, String to, boolean isSrcSide); + +} \ No newline at end of file