デルタ抽出アルゴリズムの修正の反映とブレークポイントのビューの表示内容の微調整を行った。
1 parent 627f069 commit f79f8b2d6dc425069b253146a174a086bd21808a
r-isitani authored on 18 Aug 2020
Showing 2 changed files
View
4
src/org/ntlab/traceDebugger/BreakPointView.java
table.setHeaderVisible(true);
table.setLinesVisible(true);
 
// テーブルのカラムを作成
String[] tableColumnTexts = {"Available", "Line", "Signature"};
int[] tableColumnWidth = {80, 80, 500};
String[] tableColumnTexts = {"", "Line", "Signature"};
int[] tableColumnWidth = {30, 80, 500};
TableColumn[] tableColumns = new TableColumn[tableColumnTexts.length];
for (int i = 0; i < tableColumns.length; i++) {
tableColumns[i] = new TableColumn(table, SWT.NULL);
tableColumns[i].setText(tableColumnTexts[i]);
View
98
src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractorJSON.java
package org.ntlab.traceDebugger.analyzerProvider;
 
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import java.util.Map.Entry;
import org.ntlab.traceAnalysisPlatform.tracer.trace.ArrayAccess;
import org.ntlab.traceAnalysisPlatform.tracer.trace.ArrayCreate;
import org.ntlab.traceAnalysisPlatform.tracer.trace.FieldAccess;
import org.ntlab.traceAnalysisPlatform.tracer.trace.FieldUpdate;
import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodExecution;
import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodInvocation;
import org.ntlab.traceAnalysisPlatform.tracer.trace.ObjectReference;
import org.ntlab.traceAnalysisPlatform.tracer.trace.Reference;
//コレクション型対応
Reference r;
if (methodExecution.isCollectionType()) {
if (objectId != null) {
// コレクション型の場合、内部で個々の要素を直接保持していると仮定する
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());
if (methodExecution.getSignature().contains("Collections.unmodifiable")
|| methodExecution.getSignature().contains("Collections.checked")
|| methodExecution.getSignature().contains("Collections.synchronized")
|| methodExecution.getSignature().contains("Arrays.asList")
|| methodExecution.getSignature().contains("Arrays.copyOf")) {
// 配列やコレクションの間の変換の場合、変換元の第一引数に依存する
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 {
// コレクション型の場合、内部で個々の要素を直接保持していると仮定する
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());
}
}
isResolved = true; // 必要なのでは?
}
if (objectId == null && isResolved && !isStatic) { // static 呼び出しからの戻り値を返している場合