diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF
index 4ef7b30..b2a2927 100644
--- a/META-INF/MANIFEST.MF
+++ b/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: TraceDebugger
-Bundle-SymbolicName: org.ntlab.traceDebugger3;singleton:=true
+Bundle-SymbolicName: org.ntlab.traceDebugger;singleton:=true
Bundle-Version: 1.0.0.qualifier
Automatic-Module-Name: org.ntlab.objectFlowAnalyzer2
Require-Bundle: org.eclipse.ui;bundle-version="3.109.100",
@@ -13,4 +13,5 @@
org.ntlab.traceAnalysisPlatform;bundle-version="1.0.0",
org.eclipse.ui.editors;bundle-version="3.11.100",
org.eclipse.jface.text;bundle-version="3.13.0",
- org.eclipse.ui.ide;bundle-version="3.14.0"
+ org.eclipse.ui.ide;bundle-version="3.14.0",
+ org.eclipse.text
diff --git a/bin/.gitignore b/bin/.gitignore
new file mode 100644
index 0000000..cf1db2e
--- /dev/null
+++ b/bin/.gitignore
@@ -0,0 +1 @@
+/org/
diff --git a/bin/org/ntlab/traceDebugger/DebuggingController.class b/bin/org/ntlab/traceDebugger/DebuggingController.class
index 47c1e53..de9e45f 100644
--- a/bin/org/ntlab/traceDebugger/DebuggingController.class
+++ b/bin/org/ntlab/traceDebugger/DebuggingController.class
Binary files differ
diff --git a/bin/org/ntlab/traceDebugger/JavaEditorOperator.class b/bin/org/ntlab/traceDebugger/JavaEditorOperator.class
index e3a0a70..a650bcc 100644
--- a/bin/org/ntlab/traceDebugger/JavaEditorOperator.class
+++ b/bin/org/ntlab/traceDebugger/JavaEditorOperator.class
Binary files differ
diff --git a/bin/org/ntlab/traceDebugger/TraceDebuggerPlugin.class b/bin/org/ntlab/traceDebugger/TraceDebuggerPlugin.class
index 394c546..5e005bf 100644
--- a/bin/org/ntlab/traceDebugger/TraceDebuggerPlugin.class
+++ b/bin/org/ntlab/traceDebugger/TraceDebuggerPlugin.class
Binary files differ
diff --git a/bin/org/ntlab/traceDebugger/analyzerProvider/Alias.class b/bin/org/ntlab/traceDebugger/analyzerProvider/Alias.class
index 17ae051..6895cd8 100644
--- a/bin/org/ntlab/traceDebugger/analyzerProvider/Alias.class
+++ b/bin/org/ntlab/traceDebugger/analyzerProvider/Alias.class
Binary files differ
diff --git a/bin/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.class b/bin/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.class
index c7fa7f9..136e19f 100644
--- a/bin/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.class
+++ b/bin/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.class
Binary files differ
diff --git a/bin/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractor.class b/bin/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractor.class
index bc13fb4..6fde5b1 100644
--- a/bin/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractor.class
+++ b/bin/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractor.class
Binary files differ
diff --git a/bin/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractorJSON.class b/bin/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractorJSON.class
index e6da5b6..5d55faa 100644
--- a/bin/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractorJSON.class
+++ b/bin/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractorJSON.class
Binary files differ
diff --git a/bin/org/ntlab/traceDebugger/analyzerProvider/ExtractedStructure.class b/bin/org/ntlab/traceDebugger/analyzerProvider/ExtractedStructure.class
index f01bc15..3bda7b5 100644
--- a/bin/org/ntlab/traceDebugger/analyzerProvider/ExtractedStructure.class
+++ b/bin/org/ntlab/traceDebugger/analyzerProvider/ExtractedStructure.class
Binary files differ
diff --git a/bin/org/ntlab/traceDebugger/analyzerProvider/ObjectFlowAnalyzer.class b/bin/org/ntlab/traceDebugger/analyzerProvider/ObjectFlowAnalyzer.class
deleted file mode 100644
index d425f31..0000000
--- a/bin/org/ntlab/traceDebugger/analyzerProvider/ObjectFlowAnalyzer.class
+++ /dev/null
Binary files differ
diff --git a/bin/org/ntlab/traceDebugger/analyzerProvider/ObjectFlowAnalyzerLaunchConfiguration.class b/bin/org/ntlab/traceDebugger/analyzerProvider/ObjectFlowAnalyzerLaunchConfiguration.class
index dfe2ec5..4789c96 100644
--- a/bin/org/ntlab/traceDebugger/analyzerProvider/ObjectFlowAnalyzerLaunchConfiguration.class
+++ b/bin/org/ntlab/traceDebugger/analyzerProvider/ObjectFlowAnalyzerLaunchConfiguration.class
Binary files differ
diff --git a/plugin.xml b/plugin.xml
index f3e94ef..8839c9f 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -55,36 +55,81 @@
+
+
+
+
+
+
+
+
+
+
+ textStylePreferenceValue="BOX"
+ verticalRulerPreferenceKey="clvertical"
+ verticalRulerPreferenceValue="true">
+
+
diff --git a/src/org/ntlab/traceDebugger/DebuggingController.java b/src/org/ntlab/traceDebugger/DebuggingController.java
index 5c0ce48..e0637b1 100644
--- a/src/org/ntlab/traceDebugger/DebuggingController.java
+++ b/src/org/ntlab/traceDebugger/DebuggingController.java
@@ -50,7 +50,8 @@
}
// InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "void Company.pay(Money,Person)", null);
// InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "void worstCase.P.setM(worstCase.M)", null);
- InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "public void org.jhotdraw.draw.DefaultDrawingView.addToSelection(org.jhotdraw.draw.Figure)", null);
+// InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "public void org.jhotdraw.draw.DefaultDrawingView.addToSelection(org.jhotdraw.draw.Figure)", null);
+ InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "void E.setC(C)", null);
if (inputDialog.open() != InputDialog.OK) return false;
String methodSignature = inputDialog.getValue();
inputDialog = new InputDialog(null, "line No dialog", "Input line no", "", null);
@@ -236,26 +237,38 @@
refresh(false);
return true;
}
-
+
/**
* ���݂̃f�o�b�O�ʒu�𒊏o�����f���^�̒�ӂ̃g���[�X�|�C���g�ɍ��킹�� (�Ƃ肠�����m�F���邾���p)
* @return
*/
public boolean tmp() {
DeltaExtractionAnalyzer analyzer = (DeltaExtractionAnalyzer)TraceDebuggerPlugin.getAnalyzer();
- ReferencePoint rp = analyzer.getBottomPoint();
- long previousTime = debuggingTp.getStatement().getTimeStamp();
- long rpTime = rp.getTime();
- debuggingTp = rp.getTracePoint();
-// if (rpTime < previousTime) {
-// traceBreakPoints.reverseAll(rpTime);
-// } else {
-// traceBreakPoints.forwardAll(rpTime);
-// }
+ TracePoint tp = analyzer.getBottomPoint();
+ debuggingTp = tp.duplicate();
refresh(false);
return true;
}
+// /**
+// * ���݂̃f�o�b�O�ʒu�𒊏o�����f���^�̒�ӂ̃g���[�X�|�C���g�ɍ��킹�� (�Ƃ肠�����m�F���邾���p)
+// * @return
+// */
+// public boolean tmp() {
+// DeltaExtractionAnalyzer analyzer = (DeltaExtractionAnalyzer)TraceDebuggerPlugin.getAnalyzer();
+// ReferencePoint rp = analyzer.getBottomPoint();
+// long previousTime = debuggingTp.getStatement().getTimeStamp();
+// long rpTime = rp.getTime();
+// debuggingTp = rp.getTracePoint();
+//// if (rpTime < previousTime) {
+//// traceBreakPoints.reverseAll(rpTime);
+//// } else {
+//// traceBreakPoints.forwardAll(rpTime);
+//// }
+// refresh(false);
+// return true;
+// }
+
private void refresh(boolean isReturned) {
MethodExecution me = debuggingTp.getMethodExecution();
int lineNo = debuggingTp.getStatement().getLineNo();
diff --git a/src/org/ntlab/traceDebugger/JavaEditorOperator.java b/src/org/ntlab/traceDebugger/JavaEditorOperator.java
index 0e5ade2..0f1dcf7 100644
--- a/src/org/ntlab/traceDebugger/JavaEditorOperator.java
+++ b/src/org/ntlab/traceDebugger/JavaEditorOperator.java
@@ -1,24 +1,14 @@
package org.ntlab.traceDebugger;
import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
-import java.util.Map;
-
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
-import org.eclipse.debug.core.DebugPlugin;
-import org.eclipse.debug.core.IBreakpointManager;
-import org.eclipse.debug.core.model.IBreakpoint;
-import org.eclipse.debug.core.model.ILineBreakpoint;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IMethod;
@@ -29,31 +19,21 @@
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.IRegion;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.editors.text.FileDocumentProvider;
import org.eclipse.ui.ide.IDE;
-import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.texteditor.ITextEditor;
import org.ntlab.traceAnalysisPlatform.tracer.trace.ClassInfo;
import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodExecution;
import org.ntlab.traceAnalysisPlatform.tracer.trace.TraceJSON;
-import org.ntlab.traceDebugger.analyzerProvider.Alias;
public class JavaEditorOperator {
- private static List markers = new ArrayList<>();
-
- public static void openSrcFileOfAlias(Alias alias) {
- MethodExecution methodExecution = alias.getMethodExecution();
- int lineNo = alias.getLineNo();
- openSrcFileOfMethodExecution(methodExecution, lineNo);
- }
+// private static List markers = new ArrayList<>();
/**
* �����œn����meCaller���ɂ���methodExecution����`����Ă���N���X�̃\�[�X�R�[�h��Ώ�Eclipse�̃G�f�B�^�ŊJ������
@@ -101,31 +81,69 @@
}
}
- public static void markAndOpenJavaFile(MethodExecution methodExecution, int lineNo, String message, String markerId) {
- IFile file = findIFile(methodExecution);
+ public static void markAndOpenJavaFile(IMarker marker) {
+ IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
try {
- FileEditorInput input = new FileEditorInput(file);
- FileDocumentProvider provider = new FileDocumentProvider();
- provider.connect(input);
- IDocument document = provider.getDocument(input);
- IMarker marker = file.createMarker(markerId);
- Map attributes = new HashMap<>();
- attributes.put(IMarker.MESSAGE, message);
- attributes.put(IMarker.TRANSIENT, true);
- if (lineNo > 1) {
- IRegion r = document.getLineInformation(lineNo - 1);
- attributes.put(IMarker.LINE_NUMBER, lineNo);
- attributes.put(IMarker.CHAR_START, r.getOffset());
- attributes.put(IMarker.CHAR_END, r.getOffset() + r.getLength());
- }
- marker.setAttributes(attributes);
- markers.add(marker);
- IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
IDE.openEditor(page, marker);
- } catch (CoreException | BadLocationException e) {
+ } catch (PartInitException e) {
e.printStackTrace();
}
- }
+ }
+
+// public static void markAndOpenJavaFile(Alias alias, int lineNo, String markerId) {
+// try {
+// IFile file = findIFile(alias.getMethodExecution());
+// DeltaMarkerManager mgr = DeltaMarkerManager.getInstance();
+// IMarker marker = mgr.addMarker(alias, file, lineNo, markerId);
+// IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+// IDE.openEditor(page, marker);
+// } catch (PartInitException e) {
+// e.printStackTrace();
+// }
+// }
+
+// public static void markAndOpenJavaFile(MethodExecution methodExecution, int lineNo, String findString, String message, String markerId) {
+// IFile file = findIFile(methodExecution);
+// try {
+// FileEditorInput input = new FileEditorInput(file);
+// FileDocumentProvider provider = new FileDocumentProvider();
+// provider.connect(input);
+// IDocument document = provider.getDocument(input);
+// FindReplaceDocumentAdapter findAdapter = new FindReplaceDocumentAdapter(document);
+// IMarker marker = file.createMarker(markerId);
+// Map attributes = new HashMap<>();
+// attributes.put(IMarker.MESSAGE, message);
+// attributes.put(IMarker.TRANSIENT, true);
+// if (lineNo > 1) {
+// // ����s���̎w�肵�����������n�C���C�g (���݂��Ȃ��ꍇ�͓���s�S�̂��n�C���C�g)
+// IRegion lineRegion = document.getLineInformation(lineNo - 1);
+// IRegion findStringRegion = findAdapter.find(lineRegion.getOffset(), findString, true, true, true, false);
+// if (findStringRegion != null) {
+// attributes.put(IMarker.CHAR_START, findStringRegion.getOffset());
+// attributes.put(IMarker.CHAR_END, findStringRegion.getOffset() + findStringRegion.getLength());
+// } else {
+// attributes.put(IMarker.CHAR_START, lineRegion.getOffset());
+// attributes.put(IMarker.CHAR_END, lineRegion.getOffset() + lineRegion.getLength());
+// }
+// attributes.put(IMarker.LINE_NUMBER, lineNo);
+// } else {
+// // ���\�b�h�V�O�l�`�����n�C���C�g
+// IType type = findIType(methodExecution);
+// IMethod method = findIMethod(methodExecution, type);
+// int start = method.getSourceRange().getOffset();
+// int end = start + method.getSource().indexOf(")") + 1;
+// attributes.put(IMarker.CHAR_START, start);
+// attributes.put(IMarker.CHAR_END, end);
+// }
+//
+// marker.setAttributes(attributes);
+// markers.add(marker);
+// IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+// IDE.openEditor(page, marker);
+// } catch (CoreException | BadLocationException e) {
+// e.printStackTrace();
+// }
+// }
// private static void tmp() {
// IBreakpointManager mgr = DebugPlugin.getDefault().getBreakpointManager();
@@ -170,20 +188,20 @@
return ResourcesPlugin.getWorkspace().getRoot().getFile(path);
}
- public static void deleteMarkers(String markerId) {
- Iterator it = markers.iterator();
- while (it.hasNext()) {
- IMarker marker = it.next();
- try {
- if (marker.getType().equals(markerId)) {
- marker.delete();
- it.remove();
- }
- } catch (CoreException e) {
- e.printStackTrace();
- }
- }
- }
+// public static void deleteMarkers(String markerId) {
+// Iterator it = markers.iterator();
+// while (it.hasNext()) {
+// IMarker marker = it.next();
+// try {
+// if (marker.getType().equals(markerId)) {
+// marker.delete();
+// it.remove();
+// }
+// } catch (CoreException e) {
+// e.printStackTrace();
+// }
+// }
+// }
public static IType findIType(MethodExecution methodExecution) {
String declaringClassName = methodExecution.getDeclaringClassName();
@@ -263,7 +281,7 @@
}
}
- private static IMethod findIMethod(MethodExecution methodExecution, IType type) {
+ public static IMethod findIMethod(MethodExecution methodExecution, IType type) {
IMethod method = null;
if (type != null) {
String methodSignature = methodExecution.getSignature();
diff --git a/src/org/ntlab/traceDebugger/TraceDebuggerPlugin.java b/src/org/ntlab/traceDebugger/TraceDebuggerPlugin.java
index dd5ad9a..0e6ee82 100644
--- a/src/org/ntlab/traceDebugger/TraceDebuggerPlugin.java
+++ b/src/org/ntlab/traceDebugger/TraceDebuggerPlugin.java
@@ -2,7 +2,6 @@
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.ntlab.traceDebugger.analyzerProvider.AbstractAnalyzer;
-import org.ntlab.traceDebugger.analyzerProvider.ObjectFlowAnalyzer;
import org.osgi.framework.BundleContext;
/**
diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/Alias.java b/src/org/ntlab/traceDebugger/analyzerProvider/Alias.java
index 370f2e7..f07924f 100644
--- a/src/org/ntlab/traceDebugger/analyzerProvider/Alias.java
+++ b/src/org/ntlab/traceDebugger/analyzerProvider/Alias.java
@@ -1,91 +1,62 @@
package org.ntlab.traceDebugger.analyzerProvider;
-import java.util.ArrayList;
-
-import org.ntlab.traceAnalysisPlatform.tracer.trace.ArrayAccess;
-import org.ntlab.traceAnalysisPlatform.tracer.trace.ArrayCreate;
-import org.ntlab.traceAnalysisPlatform.tracer.trace.ArrayUpdate;
-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.Statement;
-import org.ntlab.traceAnalysisPlatform.tracer.trace.Trace;
import org.ntlab.traceAnalysisPlatform.tracer.trace.TracePoint;
-/**
- * �I�u�W�F�N�g�̎Q�Ə��(�G�C���A�X)��\���N���X
- * @author Isitani
- *
- */
public class Alias {
private String objectId;
private TracePoint occurrencePoint; // ���Y�I�u�W�F�N�g�̎Q�Ƃ��s���Ă�����s�ӏ��ɑΉ�����TracePoint
- /**
- * ���Y�I�u�W�F�N�g�̎Q�Ƃ�TracePoint�ɂ����Ăǂ��Ɍ���Ă��邩��\��
- * 0 �t�B�[���h�A�N�Z�X���̃R���e�i �������� ���\�b�h�Ăяo�����̃��V�[�o
- * 1, 2, 3 �c�c n �t�B�[���h�A�N�Z�X���̃t�B�[���h(1) �������� ���\�b�h�Ăяo������n�Ԗڂ̎����� (1���珇�Ԃ�)
- * -1 ���\�b�h�Ăяo�����̖߂�l
- *
- * ��1: d = a.m(b, c);
- *
- * ��1�̎��s���ɂ�����, a�̓��\�b�h�Ăяo���̃��V�[�o�Ȃ̂�0, b�̓��\�b�h�Ăяo����1�Ԗڂ̎������Ȃ̂�1,
- * c�̓��\�b�h�Ăяo����2�Ԗڂ̎������Ȃ̂�2, a.m(b, c)�̖߂�l��-1 �ƂȂ�.
- *
- * ��2: d = a.f;
- * ��2�̎��s���ɂ�����, a�̓t�B�[���h�̃R���e�i�Ȃ̂�0, b�̓t�B�[���h�Ȃ̂�1 �ƂȂ�.
- *
- */
- private int occurrenceExp;
- public static final int OCCURRENCE_EXP_CONTAINER = 0;
- public static final int OCCURRENCE_EXP_RECEIVER = 0;
- public static final int OCCURRENCE_EXP_FIELD = 1;
- public static final int OCCURRENCE_EXP_ARRAY = 1;
- public static final int OCCURRENCE_EXP_FIRST_ARG = 1;
- public static final int OCCURRENCE_EXP_RETURN = -1;
+ private AliasType aliasType;
+ private int index;
- private static final String FIELD_ACCESS = "Field Access";
- private static final String FIELD_UPDATE = "Field Update";
- private static final String ARRAY_ACCESS = "Array Access";
- private static final String ARRAY_UPDATE = "Array Update";
- private static final String ARRAY_CREATE = "Array Create";
- private static final String METHOD_INVOCATION = "Method Invocation";
- private static final String CREATION = "Creation";
-
- public Alias(String objectId, TracePoint occurrencePoint, int occurrenceExp) {
+ public enum AliasType {
+ // ���\�b�h�ւ̓���
+ FORMAL_PARAMETER,
+ THIS,
+ METHOD_INVOCATION,
+ CONSTRACTOR_INVOCATION,
+
+ // �ǐՃI�u�W�F�N�g�̐�ւ�
+ FIELD,
+ CONTAINER,
+ ARRAY_ELEMENT,
+ ARRAY,
+ ARRAY_CREATE,
+
+ // ���\�b�h����̏o��
+ ACTUAL_ARGUMENT,
+ RECEIVER,
+ RETURN_VALUE
+ }
+
+ public Alias(AliasType aliasType, int index, String objectId, TracePoint occurrencePoint) {
+ this.aliasType = aliasType;
+ this.index = index;
this.objectId = objectId;
this.occurrencePoint = occurrencePoint;
- this.occurrenceExp = occurrenceExp;
+ }
+
+ public AliasType getAliasType() {
+ return aliasType;
+ }
+
+ public int getIndex() {
+ return index;
}
public String getObjectId() {
return objectId;
}
-
+
public TracePoint getOccurrencePoint() {
return occurrencePoint;
}
-
- public int getOccurrenceExp() {
- return occurrenceExp;
- }
public MethodExecution getMethodExecution() {
return occurrencePoint.getMethodExecution();
}
- public String getMethodExecutionClassName() {
- MethodExecution methodExecution = occurrencePoint.getMethodExecution();
- return Trace.getDeclaringType(methodExecution.getSignature(), methodExecution.isConstructor());
- }
-
- public String getSourceFileName() {
- String methodExecutionClassName = getMethodExecutionClassName();
- methodExecutionClassName = methodExecutionClassName.replace(".", "");
- return methodExecutionClassName + ".java";
- }
-
public String getMethodSignature() {
return occurrencePoint.getMethodExecution().getCallerSideSignature();
}
@@ -94,147 +65,8 @@
Statement statement = occurrencePoint.getStatement();
return statement.getLineNo();
}
-
- public String getStatementType() {
- Statement statement = occurrencePoint.getStatement();
- String statementType = "";
- if (statement instanceof FieldAccess) {
- statementType = FIELD_ACCESS;
- } else if (statement instanceof FieldUpdate) {
- statementType = FIELD_UPDATE;
- } else if (statement instanceof ArrayAccess) {
- statementType = ARRAY_ACCESS;
- } else if (statement instanceof ArrayUpdate) {
- statementType = ARRAY_UPDATE;
- } else if (statement instanceof ArrayCreate) {
- statementType = ARRAY_CREATE;
- } else if (statement instanceof MethodInvocation) {
- MethodInvocation mi = (MethodInvocation)statement;
- if (mi.getCalledMethodExecution().isConstructor()) {
- statementType = CREATION;
- } else {
- statementType = METHOD_INVOCATION;
- }
- }
- return statementType;
- }
- public String getStatementSignature() {
- Statement statement = occurrencePoint.getStatement();
- String statementSignature = "";
- if (statement instanceof FieldAccess) {
- FieldAccess fa = (FieldAccess)statement;
- statementSignature = fa.getFieldName();
- } else if (statement instanceof FieldUpdate) {
- FieldUpdate fu = (FieldUpdate)statement;
- statementSignature = fu.getFieldName();
- } else if (statement instanceof ArrayAccess) {
- ArrayAccess aa = (ArrayAccess)statement;
- statementSignature = aa.getArrayClassName() + "[" + aa.getIndex() + "]";
- } else if (statement instanceof ArrayUpdate) {
- ArrayUpdate au = (ArrayUpdate)statement;
- statementSignature = au.getArrayClassName() + "[" + au.getIndex() + "]";
- } else if (statement instanceof ArrayCreate) {
- ArrayCreate ac = (ArrayCreate)statement;
- statementSignature = ac.getArrayClassName();
- } else if (statement instanceof MethodInvocation) {
- MethodExecution me = ((MethodInvocation)statement).getCalledMethodExecution();
- statementSignature = me.getCallerSideSignature();
- }
- return statementSignature;
- }
-
- public String getClassName() {
- Statement statement = occurrencePoint.getStatement();
- String className = "";
- if (statement instanceof FieldAccess) {
- if (occurrenceExp == OCCURRENCE_EXP_CONTAINER) {
- className = ((FieldAccess) statement).getContainerClassName();
- } else if (occurrenceExp == OCCURRENCE_EXP_FIELD) {
- className = ((FieldAccess) statement).getValueClassName();
- }
- } else if (statement instanceof FieldUpdate) {
- if (occurrenceExp == OCCURRENCE_EXP_CONTAINER) {
- className = ((FieldUpdate) statement).getContainerClassName();
- } else if (occurrenceExp == OCCURRENCE_EXP_FIELD) {
- className = ((FieldUpdate) statement).getValueClassName();
- }
- } else if (statement instanceof ArrayAccess) {
- className = ((ArrayAccess) statement).getValueClassName();
- } else if (statement instanceof ArrayUpdate) {
- className = ((ArrayUpdate) statement).getValueClassName();
- } else if (statement instanceof ArrayCreate) {
- className = ((ArrayCreate) statement).getArrayClassName();
- } else if (statement instanceof MethodInvocation) {
- MethodExecution me = ((MethodInvocation)statement).getCalledMethodExecution();
- if (occurrenceExp == OCCURRENCE_EXP_RETURN) {
- className = me.getReturnValue().getActualType();
- } else if (occurrenceExp == OCCURRENCE_EXP_RECEIVER) {
- className = me.getThisClassName();
- } else {
- int index = occurrenceExp - OCCURRENCE_EXP_FIRST_ARG;
- ArrayList args = me.getArguments();
- if (index >= 0 && index < args.size()) {
- className = me.getArguments().get(index).getActualType();
- }
- }
- }
- return className;
- }
-
- public String getOccurrenceText() {
- String statementType = getStatementType();
- switch (statementType) {
- case FIELD_ACCESS:
- case FIELD_UPDATE:
- return (occurrenceExp == OCCURRENCE_EXP_CONTAINER) ? "Container" : "Field";
- case ARRAY_ACCESS:
- case ARRAY_UPDATE:
- return (occurrenceExp == OCCURRENCE_EXP_CONTAINER) ? "Array Object" : "Array Value";
- case ARRAY_CREATE:
- return "New Array";
- case METHOD_INVOCATION:
- if (occurrenceExp <= 0) {
- return (occurrenceExp == OCCURRENCE_EXP_RECEIVER) ? "Receiver" : "Return Value";
- }
- final String[] ORDER_TEXT = {"th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th"}; // 0-13�ɑΉ�
- if (occurrenceExp % 100 >= ORDER_TEXT.length) {
- return occurrenceExp + ORDER_TEXT[occurrenceExp % 10] + " arg"; // ��2����14�ȏ�Ȃ�, ��1���̐����ɑΉ�������
- } else if (occurrenceExp % 100 >= 0) {
- return occurrenceExp + ORDER_TEXT[occurrenceExp % 100] + " arg"; // ��2����0�ȏ�13�ȉ��Ȃ�, ��2���̐����ɑΉ�������
- }
- case CREATION:
- return "New Object";
- }
- return String.valueOf(occurrenceExp);
- }
-
- public boolean isOrigin() {
- Statement statement = occurrencePoint.getStatement();
- if (statement instanceof MethodInvocation) {
- MethodExecution calledMethodExecution = ((MethodInvocation)statement).getCalledMethodExecution();
- return calledMethodExecution.isConstructor();
- } else if (statement instanceof ArrayCreate) {
- return true;
- }
- return false;
- }
-
- @Override
- public String toString() {
- Statement statement = occurrencePoint.getStatement();
- String className = getClassName();
- String methodSignature = getMethodSignature();
- String statementType = getStatementType();
- String statementSigunarure = getStatementSignature();
- String indent = " ";
- StringBuilder str = new StringBuilder();
- str.append("objId: " + objectId + " (class = " + className + ")" + "\n");
- str.append("tp: " + occurrencePoint + "\n");
- str.append(indent + "signature: " + methodSignature + "\n");
- str.append(indent + "lineNo: " + statement.getLineNo() + "\n");
- str.append(indent + "statementType: " + statementType + " -> " + statementSigunarure + "\n");
- str.append("occurrenceExp: " + occurrenceExp + "\n");
- return str.toString();
+ public void setIndex(int index) {
+ this.index = index;
}
}
\ No newline at end of file
diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java
index 0621515..231f5b5 100644
--- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java
+++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java
@@ -1,10 +1,21 @@
package org.ntlab.traceDebugger.analyzerProvider;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.jface.text.FindReplaceDocumentAdapter;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.ui.PartInitException;
+import org.ntlab.traceAnalysisPlatform.tracer.trace.ArrayAccess;
+import org.ntlab.traceAnalysisPlatform.tracer.trace.ArrayUpdate;
+import org.ntlab.traceAnalysisPlatform.tracer.trace.BlockEnter;
+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;
import org.ntlab.traceAnalysisPlatform.tracer.trace.Statement;
import org.ntlab.traceAnalysisPlatform.tracer.trace.Trace;
@@ -16,18 +27,22 @@
public class DeltaExtractionAnalyzer extends AbstractAnalyzer {
private static DeltaExtractionAnalyzer getInstance = null;
private DeltaExtractorJSON deltaExtractor;
- private MethodExecution coordinator;
- private ReferencePoint coordinatorPoint;
- private List srcSidePoints = new ArrayList<>();
- private List dstSidePoints = new ArrayList<>();
- private ReferencePoint bottomPoint;
- private Delta delta;
- private static final String DELTA_MARKER_ID = "org.ntlab.traceDebugger.deltaMarker";
+ private ExtractedStructure extractedStructure;
+// private MethodExecution coordinator;
+// private ReferencePoint coordinatorPoint;
+// private List srcSideRelatedPoints = new ArrayList<>();
+// private List dstSideRelatedPoints = new ArrayList<>();
+
+ private TracePoint bottomPoint;
+ public static final String DELTA_MARKER_ID = "org.ntlab.traceDebugger.deltaMarker";
+ public static final String DELTA_MARKER_ID_2 = "org.ntlab.traceDebugger.deltaMarker2"; // ����
public DeltaExtractionAnalyzer(Trace trace) {
super(trace);
deltaExtractor = new DeltaExtractorJSON((TraceJSON)trace);
- JavaEditorOperator.deleteMarkers(DELTA_MARKER_ID);
+ DeltaMarkerManager mgr = DeltaMarkerManager.getInstance();
+ mgr.deleteMarkers(DELTA_MARKER_ID);
+ mgr.deleteMarkers(DELTA_MARKER_ID_2);
}
private static DeltaExtractionAnalyzer getInstance() {
@@ -37,20 +52,24 @@
return getInstance;
}
- public ReferencePoint getBottomPoint() {
+ public TracePoint getBottomPoint() {
return bottomPoint;
}
- public ReferencePoint getCoordinatorPoint() {
- return coordinatorPoint;
- }
+// public ReferencePoint getCoordinatorPoint() {
+// return coordinatorPoint;
+// }
+//
+// public List getSrcSideRelatedPoints() {
+// return srcSideRelatedPoints;
+// }
+//
+// public List getDstSideRelatedPoints() {
+// return dstSideRelatedPoints;
+// }
- public List getSrcSidePoints() {
- return srcSidePoints;
- }
-
- public List getDstSidePoints() {
- return dstSidePoints;
+ public ExtractedStructure geExtractedStructure() {
+ return extractedStructure;
}
public void extractDelta(Variable variable) {
@@ -62,102 +81,126 @@
Reference reference = new Reference(srcId, dstId, srcClassName, dstClassName);
reset();
- bottomPoint = createReferencePoint(reference, before, true);
- coordinatorPoint = createCoordinatorReferencePoint(coordinator, bottomPoint.getMethodExecution());
- if (delta != null) {
- for (Reference srcSideReference : delta.getSrcSide()) {
- ReferencePoint rp = createReferencePoint(srcSideReference, before, false);
- if (rp != null) srcSidePoints.add(rp);
- }
- for (Reference dstSideReference : delta.getDstSide()) {
- ReferencePoint rp = createReferencePoint(dstSideReference, before, false);
- if (rp != null) dstSidePoints.add(rp);
- }
- Collections.reverse(srcSidePoints);
- Collections.reverse(dstSidePoints);
- }
- confirm();
-
- String message;
- int cnt = 1;
- for (ReferencePoint rp : srcSidePoints) {
- message = String.format("%s%03d: %s", "SrcSide", cnt, rp.getReferenceMessage());
- markAndOpenJavaFile(rp, message);
- cnt++;
- }
- cnt = 1;
- for (ReferencePoint rp : dstSidePoints) {
- message = String.format("%s%03d: %s", "DstSide", cnt, rp.getReferenceMessage());
- markAndOpenJavaFile(rp, message);
- cnt++;
- }
- message = String.format("%s: %s", "Coordinator", coordinatorPoint.getReferenceMessage());
- markAndOpenJavaFile(coordinatorPoint, message);
- message = String.format("%s: %s", "Bottom", bottomPoint.getReferenceMessage());
- markAndOpenJavaFile(bottomPoint, message);
- }
-
- private ReferencePoint createReferencePoint(Reference reference, TracePoint before, boolean isBottom) {
- ExtractedStructure extractedStructure = deltaExtractor.extract(reference, before.duplicate());
- if (extractedStructure == null) return null;
+ DeltaRelatedAliasCollector aliasCollector = new DeltaRelatedAliasCollector(srcId, dstId);
+ extractedStructure = deltaExtractor.extract(reference, before.duplicate(), aliasCollector);
MethodExecution creationCallTree = extractedStructure.getCreationCallTree();
- long beforeTime = before.getStatement().getTimeStamp();
- if (isBottom) {
- coordinator = extractedStructure.getCoordinator();
- delta = extractedStructure.getDelta();
+ List srcSideRelatedAliases = aliasCollector.getSrcSideRelatedAliases();
+ List dstSideRelatedAliases = aliasCollector.getDstSideRelatedAliases();
+ MethodExecution coordinator = extractedStructure.getCoordinator();
+
+ bottomPoint = findTracePoint(reference, creationCallTree, before.getStatement().getTimeStamp());
+// String message = String.format("Bottom %s", createMessage(bottomPoint.getStatement()));
+ String message = String.format("Bottom %s", "");
+ markAndOpenJavaFile(bottomPoint.getMethodExecution(), bottomPoint.getStatement().getLineNo(), message, DELTA_MARKER_ID);
+ for (Alias alias: srcSideRelatedAliases) {
+ markAndOpenJavaFile(alias, DELTA_MARKER_ID);
}
- return new ReferencePoint(reference, creationCallTree, beforeTime);
+ for (Alias alias : dstSideRelatedAliases) {
+ markAndOpenJavaFile(alias, DELTA_MARKER_ID_2);
+ }
+ markAndOpenJavaFile(coordinator, -1 , "Coordinator", DELTA_MARKER_ID);
}
- private ReferencePoint createCoordinatorReferencePoint(MethodExecution coordinator, MethodExecution bottom) {
- MethodExecution me = bottom;
- MethodExecution childMe = null;
- while (me != null) {
- if (coordinator.equals(me)) break;
- childMe = me;
- me = me.getParent();
+ private TracePoint findTracePoint(Reference reference, MethodExecution methodExecution, long beforeTime) {
+ List statements = methodExecution.getStatements();
+ for (int i = statements.size() - 1; i >= 0; i--) {
+ Statement statement = statements.get(i);
+ if (!(statement instanceof FieldUpdate)) continue;
+ if (statement.getTimeStamp() > beforeTime) continue;
+ FieldUpdate fu = (FieldUpdate)statement;
+ if (fu.getContainerObjId().equals(reference.getSrcObjectId())
+ && fu.getValueObjId().equals(reference.getDstObjectId())) {
+ return new TracePoint(methodExecution, i);
+ }
}
- Statement statement = null;
- if (me != null && childMe != null) {
- statement = me.getStatements().get(childMe.getCallerStatementExecution());
- }
- return new ReferencePoint(null, me, statement);
+ return null;
}
+
+// private String createMessage(Alias alias) {
+// switch (alias.getAliasType()) {
+// // ���\�b�h�ւ̓���
+// case FORMAL_PARAMETOR:
+// case THIS:
+// case METHOD_INVOCATION:
+// case CONSTRACTOR_INVOCATION:
+//
+// // �ǐՃI�u�W�F�N�g�̐�ւ�
+// case FIELD:
+// case CONTAINER:
+// case ARRAY_ELEMENT:
+// case ARRAY:
+//
+// // ���\�b�h����̏o��
+// case ACTUAL_ARGUMENT:
+// case RECEIVER:
+// case RETURN_VALUE:
+//
+// }
+// return "";
+// }
+
+// private String createFindString(Statement statement) {
+// if (statement instanceof FieldAccess) {
+// FieldAccess fa = (FieldAccess)statement;
+// String fieldName = fa.getFieldName();
+// return fieldName.substring(fieldName.lastIndexOf(".") + 1);
+// } else if (statement instanceof ArrayAccess) {
+// ArrayAccess aa = (ArrayAccess)statement;
+// return "";
+// } else if (statement instanceof MethodInvocation) {
+// MethodInvocation mi = (MethodInvocation)statement;
+// MethodExecution me = mi.getCalledMethodExecution();
+// String signature = me.getSignature();
+// signature = signature.substring(signature.lastIndexOf(".") + 1, signature.lastIndexOf("("));
+// return signature;
+// }
+// return "";
+// }
+//
+// private String createMessage(Statement statement) {
+// if (statement instanceof FieldAccess) {
+// FieldAccess fa = (FieldAccess)statement;
+// String fieldName = fa.getFieldName();
+// String containerObjId = fa.getContainerObjId();
+// String valueObjId = fa.getValueObjId();
+// return "FA: " + fieldName + " (" + containerObjId + " -> " + valueObjId + ")";
+// } else if (statement instanceof ArrayAccess) {
+// ArrayAccess aa = (ArrayAccess)statement;
+// String arrayObjId = aa.getArrayObjectId();
+// String valueObjId = aa.getValueObjectId();
+// return "AA: " + " (" + arrayObjId + " -> " + valueObjId + ")";
+// } else if (statement instanceof MethodInvocation) {
+// MethodInvocation mi = (MethodInvocation)statement;
+// MethodExecution me = mi.getCalledMethodExecution();
+// String signature = me.getSignature();
+// return "MI: " + signature;
+// }
+// return "";
+// }
+
private void reset() {
- coordinator = null;
- srcSidePoints.clear();
- dstSidePoints.clear();
bottomPoint = null;
- delta = null;
- JavaEditorOperator.deleteMarkers(DELTA_MARKER_ID);
+ DeltaMarkerManager mgr = DeltaMarkerManager.getInstance();
+ mgr.deleteMarkers(DELTA_MARKER_ID);
+ mgr.deleteMarkers(DELTA_MARKER_ID_2);
}
- private void markAndOpenJavaFile(ReferencePoint rp, String message) {
- if (rp == null) return;
- MethodExecution methodExecution = rp.getMethodExecution();
- int lineNo = rp.getLineNo();
- JavaEditorOperator.markAndOpenJavaFile(methodExecution, lineNo, message, DELTA_MARKER_ID);
+ private void markAndOpenJavaFile(Alias alias, String markerId) {
+// MethodExecution me = tp.getMethodExecution();
+// int lineNo = tp.getStatement().getLineNo();
+// JavaEditorOperator.markAndOpenJavaFile(me, lineNo, findString, message, markerId, deltaMarkerMgr);
+
+ IFile file = JavaEditorOperator.findIFile(alias.getMethodExecution());
+ DeltaMarkerManager mgr = DeltaMarkerManager.getInstance();
+ IMarker marker = mgr.addMarker(alias, file, markerId);
+ JavaEditorOperator.markAndOpenJavaFile(marker);
}
- private void confirm() {
- System.out.println();
- System.out.println();
- System.out.println("Coordinator:");
- System.out.println(" " + coordinator);
- System.out.println();
- System.out.println("SrcSide:");
- for (ReferencePoint point : srcSidePoints) {
- System.out.println(" " + point);
- }
- System.out.println();
- System.out.println("DstSide: ");
- for (ReferencePoint point : dstSidePoints) {
- System.out.println(" " + point);
- }
- System.out.println();
- System.out.println("Bottom:");
- System.out.println(" " + bottomPoint);
- System.out.println();
+ private void markAndOpenJavaFile(MethodExecution methodExecution, int lineNo, String message, String markerId) {
+ IFile file = JavaEditorOperator.findIFile(methodExecution);
+ DeltaMarkerManager mgr = DeltaMarkerManager.getInstance();
+ IMarker marker = mgr.addMarker(methodExecution, lineNo, file, message, markerId);
+ JavaEditorOperator.markAndOpenJavaFile(marker);
}
}
\ No newline at end of file
diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractor.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractor.java
index ca2a414..79fed07 100644
--- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractor.java
+++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractor.java
@@ -36,6 +36,14 @@
protected static final boolean DEBUG1 = true;
protected static final boolean DEBUG2 = true;
+ protected final IAliasCollector defaultAliasCollector = new IAliasCollector() {
+ @Override
+ public void changeTrackingObject(String from, String to) {
+ }
+ @Override
+ public void addAlias(Alias alias) {
+ }
+ };
public DeltaExtractor(String traceFile) {
trace = new Trace(traceFile);
@@ -83,6 +91,19 @@
* @throws TraceFileException
*/
protected MethodExecution callerSearch(Trace trace, TracePoint tracePoint, ArrayList objList, MethodExecution childMethodExecution) {
+ return callerSearch(trace, tracePoint, objList, childMethodExecution, defaultAliasCollector);
+ }
+
+ /**
+ * �f���^���o�A���S���Y���̌Ăяo�����T�������icalleeSearch�Ƒ��ݍċA�ɂȂ��Ă���j
+ * @param trace�@��͑Ώۃg���[�X
+ * @param methodExecution �T�����郁�\�b�h���s
+ * @param objList�@�ǐՒ��̃I�u�W�F�N�g
+ * @param child�@���O�ɒT�����Ă����Ăяo����̃��\�b�h���s
+ * @return ���������R�[�f�B�l�[�^
+ * @throws TraceFileException
+ */
+ protected MethodExecution callerSearch(Trace trace, TracePoint tracePoint, ArrayList objList, MethodExecution childMethodExecution, IAliasCollector aliasCollector) {
MethodExecution methodExecution = tracePoint.getMethodExecution();
methodExecution.setAugmentation(new DeltaAugmentationInfo());
eStructure.createParent(methodExecution);
@@ -228,7 +249,7 @@
((DeltaAugmentationInfo)prevChildMethodExecution.getAugmentation()).setTraceObjectId(Integer.parseInt(retObj)); // �ǐՑΏ�
TracePoint prevChildTracePoint = tracePoint.duplicate();
prevChildTracePoint.stepBackNoReturn();
- calleeSearch(trace, prevChildTracePoint, objList, prevChildMethodExecution.isStatic(), retIndex); // �Ăяo�����T��
+ calleeSearch(trace, prevChildTracePoint, objList, prevChildMethodExecution.isStatic(), retIndex, aliasCollector); // �Ăяo�����T��
if (objList.get(retIndex) != null && objList.get(retIndex).equals(prevChildMethodExecution.getThisObjId())
&& thisObjectId.equals(prevChildMethodExecution.getThisObjId())) {
// �Ăяo����Ńt�B�[���h�Ɉˑ����Ă����ꍇ�̏���
@@ -418,7 +439,7 @@
// }
if (tracePoint.isValid()) {
finalCount = 0;
- return callerSearch(trace, tracePoint, objList, methodExecution); // �Ăяo����������ɒT��
+ return callerSearch(trace, tracePoint, objList, methodExecution, aliasCollector); // �Ăяo����������ɒT��
}
}
@@ -434,7 +455,7 @@
if (finalCount <= LOST_DECISION_EXTENSION) {
// final�ϐ����Q�Ƃ��Ă���ꍇ�R���������ł��Ȃ��\��������̂ŁA�ǐՂ������I�������P�\���Ԃ�݂���
if (tracePoint.isValid()) {
- MethodExecution c = callerSearch(trace, tracePoint, objList, methodExecution); // �Ăяo����������ɒT��
+ MethodExecution c = callerSearch(trace, tracePoint, objList, methodExecution, aliasCollector); // �Ăяo����������ɒT��
if (((DeltaAugmentationInfo)c.getAugmentation()).isCoodinator()) {
methodExecution = c; // �ǐՂ𑱂������ʃR�[�f�B�l�[�^����������
}
@@ -489,7 +510,7 @@
* @param index�@objList���̂ǂ̃I�u�W�F�N�g��ǐՂ��Ă��̃��\�b�h���s�ɓ����Ă����̂�
* @throws TraceFileException
*/
- protected void calleeSearch(Trace trace, TracePoint tracePoint, ArrayList objList, Boolean isStatic, int index) {
+ protected void calleeSearch(Trace trace, TracePoint tracePoint, ArrayList objList, Boolean isStatic, int index, IAliasCollector aliasCollector) {
MethodExecution methodExecution = tracePoint.getMethodExecution();
Boolean isResolved = false;
String objectId = objList.get(index); // calleeSearch() �ł͒ǐՑΏۂ̃I�u�W�F�N�g�͈�����A��objList��index�Ԗڂ̗v�f�ȊO�ύX���Ă͂����Ȃ�
@@ -589,7 +610,7 @@
((DeltaAugmentationInfo)childMethodExecution.getAugmentation()).setTraceObjectId(Integer.parseInt(objectId));
TracePoint childTracePoint = tracePoint.duplicate();
childTracePoint.stepBackNoReturn();
- calleeSearch(trace, childTracePoint, objList, childMethodExecution.isStatic(), index); // �Ăяo���������ɒT��
+ calleeSearch(trace, childTracePoint, objList, childMethodExecution.isStatic(), index, aliasCollector); // �Ăяo���������ɒT��
if (childMethodExecution.isConstructor()) {
// �R���X�g���N�^�Ăяo���������ꍇ
if (objectId.equals(srcObject.getId())) {
@@ -770,6 +791,17 @@
* @return ���o����
*/
public ExtractedStructure extract(Reference targetRef, TracePoint before) {
+ return extract(targetRef, before, defaultAliasCollector);
+ }
+
+ /**
+ * �v�ύX��̃A���S���Y���̋N�����\�b�h(������)
+ * @param targetRef �ΏۂƂȂ�Q��
+ * @param before �T���J�n�g���[�X�|�C���g(������ȑO��T��)
+ * @param aliasCollector �f���^���o���ɒǐՂ����I�u�W�F�N�g�̑S�G�C���A�X�����W���郊�X�i
+ * @return ���o����
+ */
+ public ExtractedStructure extract(Reference targetRef, TracePoint before, IAliasCollector aliasCollector) {
TracePoint creationTracePoint;
if (targetRef.isArray()) {
// srcId �̔z��� dstId ���������Ă���\�������郁�\�b�h���s���擾�i�z���p�̏����j
@@ -788,7 +820,7 @@
if (creationTracePoint == null) {
return null;
}
- return extractSub(creationTracePoint, targetRef);
+ return extractSub(creationTracePoint, targetRef, aliasCollector);
}
/**
@@ -801,13 +833,30 @@
Statement statement = creationTracePoint.getStatement();
if (statement instanceof FieldUpdate) {
Reference targetRef = ((FieldUpdate)statement).getReference();
- return extractSub(creationTracePoint, targetRef);
+ return extractSub(creationTracePoint, targetRef, defaultAliasCollector);
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * �v�ύX��̃A���S���Y���̋N�����\�b�h(������)
+ * @param creationTracePoint �I�u�W�F�N�g�ԎQ�Ɛ����g���[�X�|�C���g(�t�B�[���h�ւ̑��)
+ * @param aliasCollector �f���^���o���ɒǐՂ����I�u�W�F�N�g�̑S�G�C���A�X�����W���郊�X�i
+ * @return ���o����
+ */
+ public ExtractedStructure extract(TracePoint creationTracePoint, IAliasCollector aliasCollector) {
+ creationTracePoint = creationTracePoint.duplicate();
+ Statement statement = creationTracePoint.getStatement();
+ if (statement instanceof FieldUpdate) {
+ Reference targetRef = ((FieldUpdate)statement).getReference();
+ return extractSub(creationTracePoint, targetRef, aliasCollector);
} else {
return null;
}
}
- private ExtractedStructure extractSub(TracePoint creationTracePoint, Reference targetRef) {
+ private ExtractedStructure extractSub(TracePoint creationTracePoint, Reference targetRef, IAliasCollector aliasCollector) {
eStructure = new ExtractedStructure();
ArrayList objList = new ArrayList();
srcObject = targetRef.getSrcObject();
@@ -825,10 +874,14 @@
} else {
objList.add(null);
}
- return extractSub2(creationTracePoint, objList);
+ return extractSub2(creationTracePoint, objList, aliasCollector);
+ }
+
+ public ExtractedStructure extract(TracePoint tracePoint, ObjectReference argObj) {
+ return extract(tracePoint, argObj, defaultAliasCollector);
}
- public ExtractedStructure extract(TracePoint tracePoint, ObjectReference argObj) {
+ public ExtractedStructure extract(TracePoint tracePoint, ObjectReference argObj, IAliasCollector aliasCollector) {
MethodExecution methodExecution = tracePoint.getMethodExecution();
eStructure = new ExtractedStructure();
ArrayList objList = new ArrayList();
@@ -841,12 +894,12 @@
if (DEBUG1) {
System.out.println("extract delta of:" + methodExecution.getSignature() + " -> " + argObj.getActualType() + "(" + argObj.getId() + ")");
}
- return extractSub2(tracePoint, objList);
+ return extractSub2(tracePoint, objList, aliasCollector);
}
- private ExtractedStructure extractSub2(TracePoint creationTracePoint, ArrayList objList) {
+ private ExtractedStructure extractSub2(TracePoint creationTracePoint, ArrayList objList, IAliasCollector aliasCollector) {
eStructure.setCreationMethodExecution(creationTracePoint.getMethodExecution());
- MethodExecution coordinator = callerSearch(trace, creationTracePoint, objList, null);
+ MethodExecution coordinator = callerSearch(trace, creationTracePoint, objList, null, aliasCollector);
eStructure.setCoordinator(coordinator);
if (DEBUG2) {
if (((DeltaAugmentationInfo)coordinator.getAugmentation()).isCoodinator()) {
@@ -880,32 +933,53 @@
}
/**
- * �Q�ƌ��ƎQ�Ɛ�̃I�u�W�F�N�g���w�肵�ăf���^�𒊏o����(�I�����C����͗p)
- * @param srcObj �Q�ƌ��I�u�W�F�N�g
- * @param dstObj �Q�Ɛ�I�u�W�F�N�g
+ * ���ۂ̎Q�ƌ��ƎQ�Ɛ�̃I�u�W�F�N�g���w�肵�ăf���^�𒊏o����(�I�����C����͗p)
+ * @param srcObj ��������ɂ���Q�ƌ��I�u�W�F�N�g
+ * @param dstObj ��������ɂ���Q�Ɛ�I�u�W�F�N�g
* @param before �T���J�n�g���[�X�|�C���g(������ȑO��T��)
* @return�@���o����
*/
public ExtractedStructure extract(Object srcObj, Object dstObj, TracePoint before) {
- Reference targetRef = new Reference(Integer.toString(System.identityHashCode(srcObj)), Integer.toString(System.identityHashCode(dstObj)), null, null);
- return extract(targetRef, before);
+ return extract(srcObj, dstObj, before, defaultAliasCollector);
}
-
/**
- * ���\�b�h���s���̃g���[�X�|�C���g�ƎQ�Ɛ�I�u�W�F�N�g���w�肵�ăf���^�𒊏o����(�I�����C����͗p)
+ * ���ۂ̎Q�ƌ��ƎQ�Ɛ�̃I�u�W�F�N�g���w�肵�ăf���^�𒊏o����(�I�����C����͗p)
+ * @param srcObj ��������ɂ���Q�ƌ��I�u�W�F�N�g
+ * @param dstObj ��������ɂ���Q�Ɛ�I�u�W�F�N�g
+ * @param before �T���J�n�g���[�X�|�C���g(������ȑO��T��)
+ * @param aliasCollector �f���^���o���ɒǐՂ����I�u�W�F�N�g�̑S�G�C���A�X�����W���郊�X�i
+ * @return�@���o����
+ */
+ public ExtractedStructure extract(Object srcObj, Object dstObj, TracePoint before, IAliasCollector aliasCollector) {
+ Reference targetRef = new Reference(Integer.toString(System.identityHashCode(srcObj)), Integer.toString(System.identityHashCode(dstObj)), null, null);
+ return extract(targetRef, before, aliasCollector);
+ }
+
+ /**
+ * ���\�b�h���s���̃g���[�X�|�C���g�Ǝ��ۂ̎Q�Ɛ�I�u�W�F�N�g���w�肵�ăf���^�𒊏o����(�I�����C����͗p)
* @param tracePoint ���\�b�h���s���̃g���[�X�|�C���g
- * @param arg �Q�Ɛ�I�u�W�F�N�g(���[�J���ϐ�������ɂ��Q�Ɛ�)
+ * @param arg ��������ɂ���Q�Ɛ�I�u�W�F�N�g(���[�J���ϐ�������ɂ��Q�Ɛ�)
* @return ���o����
*/
public ExtractedStructure extract(TracePoint tracePoint, Object arg) {
- ObjectReference argObj = new ObjectReference(Integer.toString(System.identityHashCode(arg)));
- return extract(tracePoint, argObj);
+ return extract(tracePoint, arg, defaultAliasCollector);
}
/**
- * �w�肵���X���b�h��Ō��ݎ��s���̃��\�b�h���s���擾����(�I�����C����͗p)
- * @param thread �ΏۃX���b�h
+ * ���\�b�h���s���̃g���[�X�|�C���g�Ǝ��ۂ̎Q�Ɛ�I�u�W�F�N�g���w�肵�ăf���^�𒊏o����(�I�����C����͗p)
+ * @param tracePoint ���\�b�h���s���̃g���[�X�|�C���g
+ * @param arg ��������ɂ���Q�Ɛ�I�u�W�F�N�g(���[�J���ϐ�������ɂ��Q�Ɛ�)
+ * @return ���o����
+ */
+ public ExtractedStructure extract(TracePoint tracePoint, Object arg, IAliasCollector aliasCollector) {
+ ObjectReference argObj = new ObjectReference(Integer.toString(System.identityHashCode(arg)));
+ return extract(tracePoint, argObj, aliasCollector);
+ }
+
+ /**
+ * �w�肵�����ۂ̃X���b�h��Ō��ݎ��s���̃��\�b�h���s���擾����(�I�����C����͗p)
+ * @param thread ���ݎ��s���̑ΏۃX���b�h
* @return thread ��Ō��ݎ��s���̃��\�b�h���s
*/
public MethodExecution getCurrentMethodExecution(Thread thread) {
@@ -1038,4 +1112,4 @@
//}
// return eStructure;
// }
-}
+}
\ No newline at end of file
diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractorJSON.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractorJSON.java
index 29b2b9f..53020a1 100644
--- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractorJSON.java
+++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractorJSON.java
@@ -1,6 +1,9 @@
package org.ntlab.traceDebugger.analyzerProvider;
import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import org.ntlab.traceAnalysisPlatform.tracer.trace.ArrayAccess;
import org.ntlab.traceAnalysisPlatform.tracer.trace.ArrayCreate;
@@ -29,7 +32,7 @@
public DeltaExtractorJSON(TraceJSON trace) {
super(trace);
}
-
+
/**
* �f���^���o�A���S���Y���̌Ăяo�����T�������icalleeSearch�Ƒ��ݍċA�ɂȂ��Ă���j
* @param trace�@��͑Ώۃg���[�X
@@ -39,7 +42,7 @@
* @return ���������R�[�f�B�l�[�^
* @throws TraceFileException
*/
- protected MethodExecution callerSearch(Trace trace, TracePoint tracePoint, ArrayList objList, MethodExecution childMethodExecution) {
+ protected MethodExecution callerSearch(Trace trace, TracePoint tracePoint, ArrayList objList, MethodExecution childMethodExecution, IAliasCollector aliasCollector) {
MethodExecution methodExecution = tracePoint.getMethodExecution();
methodExecution.setAugmentation(new DeltaAugmentationInfo());
eStructure.createParent(methodExecution);
@@ -52,6 +55,8 @@
ObjectReference thisObj = new ObjectReference(thisObjectId, methodExecution.getThisClassName(),
Trace.getDeclaringType(methodExecution.getSignature(), methodExecution.isConstructor()), Trace.getDeclaringType(methodExecution.getCallerSideSignature(), methodExecution.isConstructor()));
+ HashMap aliasList = new HashMap<>();
+
if (childMethodExecution == null) {
// �T���J�n���͈�U�폜���A�Ăяo�����̒T���𑱂���ۂɕ���������
removeList.add(thisObjectId); // ��ň�U�AthisObject ����菜��
@@ -65,6 +70,16 @@
removeList.add(thisObjectId); // ��ň�U�AthisObject ����菜��
isTrackingThis = true; // �Ăяo�����T���O�ɕ���
}
+
+ aliasCollector.addAlias(new Alias(Alias.AliasType.RECEIVER, 0, childMethodExecution.getThisObjId(), tracePoint.duplicate()));
+ }
+
+ if (childMethodExecution != null) {
+ for (String objId : objList) {
+ if (!objId.equals(childMethodExecution.getThisObjId())) {
+ aliasCollector.addAlias(new Alias(Alias.AliasType.ACTUAL_ARGUMENT, -1, objId, tracePoint.duplicate())); // argIndex�͕s��
+ }
+ }
}
if (childMethodExecution != null && childMethodExecution.isConstructor()) {
@@ -100,11 +115,13 @@
int index = objList.indexOf(refObjectId);
if (index != -1) {
String ownerObjectId = fs.getContainerObjId();
+
if (ownerObjectId.equals(thisObjectId)) {
// �t�B�[���h�Q�Ƃ̏ꍇ
removeList.add(refObjectId);
existsInFields++; // set�������get�����o������\��������
- removeList.add(thisObjectId); // ��ň�U�AthisObject ����菜��
+ removeList.add(thisObjectId); // ��ň�U�AthisObject ����菜��
+ aliasList.put(refObjectId, new Alias(Alias.AliasType.FIELD, 0, refObjectId, tracePoint.duplicate()));
} else {
// ���ڎQ�Ƃ̏ꍇ
if (refObjectId.equals(srcObject.getId())) {
@@ -117,6 +134,9 @@
dstObject = new ObjectReference(ownerObjectId, fs.getContainerClassName());
}
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.addAlias(new Alias(Alias.AliasType.CONTAINER, 0, ownerObjectId, tracePoint.duplicate()));
}
}
} else if (statement instanceof ArrayAccess) {
@@ -136,6 +156,9 @@
dstObject = new ObjectReference(arrayObjectId, aa.getArrayClassName());
}
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.addAlias(new Alias(Alias.AliasType.ARRAY, 0, arrayObjectId, tracePoint.duplicate()));
}
} else if (statement instanceof ArrayCreate) {
ArrayCreate ac = (ArrayCreate)statement;
@@ -147,6 +170,7 @@
removeList.add(arrayObjectId);
existsInFields++;
removeList.add(thisObjectId); // ��ň�U�AthisObject ����菜��
+ aliasList.put(arrayObjectId, new Alias(Alias.AliasType.ARRAY_CREATE, 0, arrayObjectId, tracePoint.duplicate()));
}
} else if (statement instanceof MethodInvocation) {
MethodExecution prevChildMethodExecution = ((MethodInvocation)statement).getCalledMethodExecution();
@@ -159,6 +183,7 @@
if (retIndex != -1) {
// �߂�l���R��������
prevChildMethodExecution.setAugmentation(new DeltaAugmentationInfo());
+
if (prevChildMethodExecution.isConstructor()) {
// �ǐՑΏۂ�constractor���Ă�ł�����(�I�u�W�F�N�g�̐�����������)field�Ɠ��l�ɏ���
String newObjId = ret.getId();
@@ -168,9 +193,11 @@
removeList.add(thisObjectId); // ��ň�U�AthisObject ����菜��
((DeltaAugmentationInfo)prevChildMethodExecution.getAugmentation()).setTraceObjectId(Integer.parseInt(newObjId)); // �ǐՑΏ�
((DeltaAugmentationInfo)prevChildMethodExecution.getAugmentation()).setSetterSide(false); // getter�Ăяo���Ɠ��l
+ aliasList.put(newObjId, new Alias(Alias.AliasType.CONSTRACTOR_INVOCATION, 0, newObjId, tracePoint.duplicate()));
continue;
}
String retObj = objList.get(retIndex);
+ aliasCollector.addAlias(new Alias(Alias.AliasType.METHOD_INVOCATION, 0, retObj, tracePoint.duplicate()));
if (removeList.contains(retObj)) {
// ��xget�Ō��o���ăt�B�[���h�Ɉˑ����Ă���Ɣ��f�������{���̗R�����߂�l���������Ƃ����������̂ŁA�t�B�[���h�ւ̈ˑ����L�����Z������
removeList.remove(retObj);
@@ -182,12 +209,14 @@
((DeltaAugmentationInfo)prevChildMethodExecution.getAugmentation()).setTraceObjectId(Integer.parseInt(retObj)); // �ǐՑΏ�
TracePoint prevChildTracePoint = tracePoint.duplicate();
prevChildTracePoint.stepBackNoReturn();
- calleeSearch(trace, prevChildTracePoint, objList, prevChildMethodExecution.isStatic(), retIndex); // �Ăяo�����T��
- if (objList.get(retIndex) != null && objList.get(retIndex).equals(prevChildMethodExecution.getThisObjId())
- && thisObjectId.equals(prevChildMethodExecution.getThisObjId())) {
- // �Ăяo����Ńt�B�[���h�Ɉˑ����Ă����ꍇ�̏���
- removeList.add(thisObjectId); // ��ň�U�AthisObject ����菜��
- isTrackingThis = true; // �Ăяo�����T���O�ɕ���
+ calleeSearch(trace, prevChildTracePoint, objList, prevChildMethodExecution.isStatic(), retIndex, aliasCollector); // �Ăяo�����T��
+ if (objList.get(retIndex) != null && objList.get(retIndex).equals(prevChildMethodExecution.getThisObjId())) {
+ if ( thisObjectId.equals(prevChildMethodExecution.getThisObjId())) {
+ // �Ăяo����Ńt�B�[���h�Ɉˑ����Ă����ꍇ�̏���
+ removeList.add(thisObjectId); // ��ň�U�AthisObject ����菜��
+ isTrackingThis = true; // �Ăяo�����T���O�ɕ���
+ }
+ aliasCollector.addAlias(new Alias(Alias.AliasType.RECEIVER, 0, objList.get(retIndex), tracePoint.duplicate()));
}
if (isLost) {
checkList.add(objList.get(retIndex));
@@ -206,14 +235,14 @@
}
// �����̎擾
- ArrayList argments = methodExecution.getArguments();
+ ArrayList arguments = methodExecution.getArguments();
// �����ƃt�B�[���h�ɓ���ID�̃I�u�W�F�N�g������ꍇ��z��
Reference r;
for (int i = 0; i < removeList.size(); i++) {
String removeId = removeList.get(i);
- if (argments.contains(new ObjectReference(removeId))) {
- removeList.remove(removeId); // �t�B�[���h�ƈ����̗����ɒǐՑΏۂ����݂����ꍇ�A������D��
+ if (arguments.contains(new ObjectReference(removeId))) {
+ removeList.remove(removeId); // �t�B�[���h�ƈ����̗����ɒǐՑΏۂ����݂����ꍇ�A������D��(���A�P�[�X)
} else if(objList.contains(removeId)) {
// �t�B�[���h�ɂ����Ȃ������ꍇ(�������A�I�u�W�F�N�g�̐������t�B�[���h�Ɠ��l�Ɉ���)
objList.remove(removeId); // �ǐՑΏۂ���O��
@@ -231,7 +260,10 @@
eStructure.addDstSide(r);
dstObject = thisObj;
isSrcSide = false;
- }
+ }
+ aliasCollector.addAlias(aliasList.get(removeId));
+ aliasCollector.changeTrackingObject(removeId, thisObjectId);
+ aliasCollector.addAlias(new Alias(Alias.AliasType.THIS, 0, thisObjectId, aliasList.get(removeId).getOccurrencePoint()));
}
}
}
@@ -243,10 +275,11 @@
String objectId = objList.get(i);
if (objectId != null) {
ObjectReference trackingObj = new ObjectReference(objectId);
- if (argments.contains(trackingObj)) {
+ if (arguments.contains(trackingObj)) {
// �������R��������
existsInAnArgument = true;
((DeltaAugmentationInfo)methodExecution.getAugmentation()).setTraceObjectId(Integer.parseInt(objectId));
+ aliasCollector.addAlias(new Alias(Alias.AliasType.FORMAL_PARAMETER, arguments.indexOf(trackingObj), trackingObj.getId(), methodExecution.getEntryPoint()));
} else {
// �R�����ǂ��ɂ�������Ȃ�����
boolean isSrcSide2 = true;
@@ -266,14 +299,14 @@
if (existsInFields > 0 || isTrackingThis) {
// this�I�u�W�F�N�g��ǐՒ��̏ꍇ
if (!Trace.isNull(thisObjectId)) {
- objList.add(thisObjectId); // ����ɒT������ꍇ�A��U��菜���� thisObject ��
+ objList.add(thisObjectId); // ����ɒT������ꍇ�A��U��菜���� thisObject ��
} else {
objList.add(null); // ������static�Ăяo���������ꍇ�A����ȏ�ǐՂ��Ȃ�
}
}
if (tracePoint.isValid()) {
finalCount = 0;
- return callerSearch(trace, tracePoint, objList, methodExecution); // �Ăяo����������ɒT��
+ return callerSearch(trace, tracePoint, objList, methodExecution, aliasCollector); // �Ăяo����������ɒT��
}
}
@@ -289,7 +322,7 @@
if (finalCount <= LOST_DECISION_EXTENSION) {
// final�ϐ����Q�Ƃ��Ă���ꍇ�R���������ł��Ȃ��\��������̂ŁA�ǐՂ������I�������P�\���Ԃ�݂���
if (tracePoint.isValid()) {
- MethodExecution c = callerSearch(trace, tracePoint, objList, methodExecution); // �Ăяo����������ɒT��
+ MethodExecution c = callerSearch(trace, tracePoint, objList, methodExecution, aliasCollector); // �Ăяo����������ɒT��
if (((DeltaAugmentationInfo)c.getAugmentation()).isCoodinator()) {
methodExecution = c; // �ǐՂ𑱂������ʃR�[�f�B�l�[�^����������
}
@@ -344,7 +377,7 @@
* @param index�@objList���̂ǂ̃I�u�W�F�N�g��ǐՂ��Ă��̃��\�b�h���s�ɓ����Ă����̂�
* @throws TraceFileException
*/
- protected void calleeSearch(Trace trace, TracePoint tracePoint, ArrayList objList, Boolean isStatic, int index) {
+ protected void calleeSearch(Trace trace, TracePoint tracePoint, ArrayList objList, Boolean isStatic, int index, IAliasCollector aliasCollector) {
MethodExecution methodExecution = tracePoint.getMethodExecution();
Boolean isResolved = false;
String objectId = objList.get(index); // calleeSearch() �ł͒ǐՑΏۂ̃I�u�W�F�N�g�͈�����A��objList��index�Ԗڂ̗v�f�ȊO�ύX���Ă͂����Ȃ�
@@ -354,8 +387,10 @@
Trace.getDeclaringType(methodExecution.getCallerSideSignature(), methodExecution.isConstructor()));
((DeltaAugmentationInfo)methodExecution.getAugmentation()).setSetterSide(false); // ��{�I��getter�Ăяo���̂͂������A����
- ArrayList argments = methodExecution.getArguments();
+ ArrayList arguments = methodExecution.getArguments();
ObjectReference trackingObj = null;
+
+ aliasCollector.addAlias(new Alias(Alias.AliasType.RETURN_VALUE, 0, objectId, tracePoint.duplicate()));
//static���o�R�����null�������Ă��鎞������
if (objectId != null) {
String returnType = Trace.getReturnType(methodExecution.getSignature());
@@ -377,7 +412,7 @@
// ���ڎQ�Ƃ���уt�B�[���h�Q�Ƃ̒T��
if (statement instanceof FieldAccess) {
FieldAccess fs = (FieldAccess)statement;
- if (objectId != null && objectId.equals(fs.getValueObjId())) {
+ if (objectId != null && objectId.equals(fs.getValueObjId())) {
String ownerObjectId = fs.getContainerObjId();
if (ownerObjectId.equals(thisObjectId)) {
// �t�B�[���h�Q�Ƃ̏ꍇ
@@ -390,6 +425,9 @@
dstObject = thisObj;
trackingObj = dstObject;
}
+ aliasCollector.addAlias(new Alias(Alias.AliasType.FIELD, 0, objectId, tracePoint.duplicate()));
+ aliasCollector.changeTrackingObject(objectId, ownerObjectId);
+ 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);
@@ -406,6 +444,9 @@
dstObject = new ObjectReference(ownerObjectId, fs.getContainerClassName());
trackingObj = dstObject;
}
+ aliasCollector.addAlias(new Alias(Alias.AliasType.FIELD, 0, objectId, tracePoint.duplicate()));
+ aliasCollector.changeTrackingObject(objectId, ownerObjectId);
+ aliasCollector.addAlias(new Alias(Alias.AliasType.CONTAINER, 0, ownerObjectId, tracePoint.duplicate()));
if (Trace.isNull(ownerObjectId)) objectId = null; // static�ϐ��̏ꍇ
else objectId = ownerObjectId;
objList.set(index, objectId);
@@ -428,6 +469,9 @@
dstObject = new ObjectReference(arrayObjectId, aa.getArrayClassName());
trackingObj = dstObject;
}
+ aliasCollector.addAlias(new Alias(Alias.AliasType.ARRAY_ELEMENT, aa.getIndex(), objectId, tracePoint.duplicate()));
+ aliasCollector.changeTrackingObject(objectId, arrayObjectId);
+ aliasCollector.addAlias(new Alias(Alias.AliasType.ARRAY, 0, arrayObjectId, tracePoint.duplicate()));
objectId = arrayObjectId;
objList.set(index, objectId);
isResolved = true;
@@ -458,7 +502,8 @@
((DeltaAugmentationInfo)childMethodExecution.getAugmentation()).setTraceObjectId(Integer.parseInt(objectId));
TracePoint childTracePoint = tracePoint.duplicate();
childTracePoint.stepBackNoReturn();
- calleeSearch(trace, childTracePoint, objList, childMethodExecution.isStatic(), index); // �Ăяo���������ɒT��
+ aliasCollector.addAlias(new Alias(Alias.AliasType.METHOD_INVOCATION, 0, ret.getId(), tracePoint.duplicate()));
+ calleeSearch(trace, childTracePoint, objList, childMethodExecution.isStatic(), index, aliasCollector); // �Ăяo���������ɒT��
if (childMethodExecution.isConstructor()) {
// �R���X�g���N�^�Ăяo���������ꍇ
if (objectId.equals(srcObject.getId())) {
@@ -495,14 +540,20 @@
checkList.add(objList.get(index));
isLost = false;
}
+ if (objectId != null) {
+ if (childMethodExecution.getThisObjId().equals(objectId)) {
+ aliasCollector.addAlias(new Alias(Alias.AliasType.RECEIVER, 0, objectId, tracePoint.duplicate()));
+ }
+ }
}
}
} while (tracePoint.stepBackOver());
//�����T��
- if (argments.contains(new ObjectReference(objectId))) {
+ if (arguments.contains(new ObjectReference(objectId))) {
((DeltaAugmentationInfo)methodExecution.getAugmentation()).setSetterSide(true); // �������K�v?
isResolved = true;
+ aliasCollector.addAlias(new Alias(Alias.AliasType.FORMAL_PARAMETER, arguments.indexOf(new ObjectReference(objectId)), objectId, methodExecution.getEntryPoint()));
}
}
@@ -543,4 +594,4 @@
isLost = true; // final�ϐ�������N���X�ŎQ�Ƃ��Ă���\�������邪�AcalleeSearch()�͕K���Ăяo�����ɕ��A���Ă����̂ŁA�����ł͉������Ȃ�
}
}
-}
+}
\ No newline at end of file
diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java
new file mode 100644
index 0000000..86414d9
--- /dev/null
+++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java
@@ -0,0 +1,550 @@
+package org.ntlab.traceDebugger.analyzerProvider;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.ISourceRange;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.dom.AST;
+import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.ASTParser;
+import org.eclipse.jdt.core.dom.ASTVisitor;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.Expression;
+import org.eclipse.jdt.core.dom.MemberRef;
+import org.eclipse.jdt.core.dom.MethodDeclaration;
+import org.eclipse.jdt.core.dom.QualifiedName;
+import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.FindReplaceDocumentAdapter;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.ui.editors.text.FileDocumentProvider;
+import org.eclipse.ui.part.FileEditorInput;
+import org.ntlab.traceAnalysisPlatform.tracer.trace.ArrayAccess;
+import org.ntlab.traceAnalysisPlatform.tracer.trace.BlockEnter;
+import org.ntlab.traceAnalysisPlatform.tracer.trace.FieldAccess;
+import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodExecution;
+import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodInvocation;
+import org.ntlab.traceAnalysisPlatform.tracer.trace.Statement;
+import org.ntlab.traceDebugger.JavaEditorOperator;
+
+public class DeltaMarkerManager {
+ private static final DeltaMarkerManager theInstance = new DeltaMarkerManager();
+ private Map> markers = new HashMap<>();
+
+ private DeltaMarkerManager() {
+
+ }
+
+ public static DeltaMarkerManager getInstance() {
+ return theInstance;
+ }
+
+ public IMarker addMarker(Alias alias, IFile file, String markerId) {
+ try {
+ IMarker marker = file.createMarker(markerId);
+ Map attributes = new HashMap<>();
+ setAttributesForAlias(attributes, alias, file, markerId);
+ attributes.put(IMarker.TRANSIENT, true);
+ marker.setAttributes(attributes);
+ addMarker(markerId, marker);
+ return marker;
+ } catch (CoreException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ public IMarker addMarker(MethodExecution me, int lineNo, IFile file, String message, String markerId) {
+ try {
+ IMarker marker = file.createMarker(markerId);
+ Map attributes = new HashMap<>();
+ setAttributesForMethodExecution(attributes, me, file, lineNo, markerId);
+ attributes.put(IMarker.MESSAGE, message);
+ attributes.put(IMarker.TRANSIENT, true);
+ marker.setAttributes(attributes);
+ addMarker(markerId, marker);
+ return marker;
+ } catch (CoreException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ private void addMarker(String markerId, IMarker marker) {
+ List markerList = markers.get(markerId);
+ if (markerList == null) {
+ markerList = new ArrayList();
+ markers.put(markerId, markerList);
+ }
+ markerList.add(marker);
+ }
+
+ public Map> getMarkers() {
+ return markers;
+ }
+
+ private void setAttributesForAlias(final Map attributes, Alias alias, IFile file, String markerId) {
+ try {
+ FileEditorInput input = new FileEditorInput(file);
+ FileDocumentProvider provider = new FileDocumentProvider();
+ provider.connect(input);
+ IDocument document = provider.getDocument(input);
+// FindReplaceDocumentAdapter findAdapter = new FindReplaceDocumentAdapter(document);
+ Statement statement = alias.getOccurrencePoint().getStatement();
+
+ String aliasType = alias.getAliasType().toString();
+ String statements = alias.getOccurrencePoint().getStatement().toString();
+ System.out.println(aliasType + ": " + statements);
+ StringBuilder message = new StringBuilder();
+ if (markerId.equals(DeltaExtractionAnalyzer.DELTA_MARKER_ID)) {
+ message.append("SrcSide: ");
+ } else if (markerId.equals(DeltaExtractionAnalyzer.DELTA_MARKER_ID_2)) {
+ message.append("DstSide: ");
+ }
+ message.append(alias.getAliasType().toString());
+ message.append(" (id = " + alias.getObjectId() + ")");
+
+ ASTParser parser = ASTParser.newParser(AST.JLS10);
+ MethodExecution methodExecution = alias.getMethodExecution();
+ IType type = JavaEditorOperator.findIType(methodExecution);
+ IMethod method = JavaEditorOperator.findIMethod(methodExecution, type);
+ ICompilationUnit unit = method.getCompilationUnit();
+ parser.setSource(unit);
+ ASTNode node = parser.createAST(new NullProgressMonitor());
+ ASTVisitor visitor = createVisitor(alias, method, document, parser, attributes);
+
+ if (visitor != null) node.accept(visitor);
+ attributes.put(IMarker.MESSAGE, message.toString());
+ attributes.put(IMarker.LINE_NUMBER, alias.getLineNo());
+ } catch (CoreException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private ASTVisitor createVisitor(Alias alias, IMethod method, IDocument document, ASTParser parser, final Map attributes) {
+ ASTVisitor visitor = new ASTVisitor() {
+ };
+ try {
+ Statement statement = alias.getOccurrencePoint().getStatement();
+ final ICompilationUnit unit = method.getCompilationUnit();
+ final String source = unit.getSource();
+ switch (alias.getAliasType()) {
+ // ���\�b�h�ւ̓���
+ case FORMAL_PARAMETER: {
+ ISourceRange range = method.getSourceRange();
+ parser.setSourceRange(range.getOffset(), range.getLength());
+ final int index = alias.getIndex();
+ visitor = new ASTVisitor() {
+ @Override
+ public boolean visit(MethodDeclaration node) {
+ Object obj = node.parameters().get(index);
+ if (obj instanceof SingleVariableDeclaration) {
+ SingleVariableDeclaration parameter = (SingleVariableDeclaration)obj;
+ int start = parameter.getStartPosition();
+ int end = start + parameter.getLength();
+ attributes.put(IMarker.CHAR_START, start);
+ attributes.put(IMarker.CHAR_END, end);
+ }
+ return false;
+ }
+ };
+ return visitor;
+ }
+ case THIS: {
+ if (statement instanceof FieldAccess) {
+ final FieldAccess fa = (FieldAccess)statement;
+ IRegion lineRegion = document.getLineInformation(fa.getLineNo() - 1);
+ parser.setSourceRange(lineRegion.getOffset(), lineRegion.getLength());
+ visitor = new ASTVisitor() {
+ @Override
+ public boolean visit(org.eclipse.jdt.core.dom.FieldAccess node) {
+ String name1 = node.getName().toString();
+ String name2 = fa.getFieldName();
+ name2 = name2.substring(name2.lastIndexOf(".") + 1);
+ if (!(name1.equals(name2))) return false;
+ int start = node.getStartPosition();
+ if (source.startsWith("this.", start)) {
+ attributes.put(IMarker.CHAR_START, start);
+ attributes.put(IMarker.CHAR_END, start + "this".length());
+ }
+ return false;
+ }
+ };
+ }
+ return visitor;
+ }
+ case METHOD_INVOCATION: {
+ if (statement instanceof MethodInvocation) {
+ final MethodInvocation mi = (MethodInvocation)statement;
+ final MethodExecution calledMe = mi.getCalledMethodExecution();
+ IRegion lineRegion = document.getLineInformation(mi.getLineNo() - 1);
+ parser.setSourceRange(lineRegion.getOffset(), lineRegion.getLength());
+ visitor = new ASTVisitor() {
+ @Override
+ public boolean visit(org.eclipse.jdt.core.dom.MethodInvocation node) {
+ String name1 = node.getName().toString();
+ String name2 = calledMe.getCallerSideSignature();
+ name2 = name2.substring(name2.lastIndexOf(".") + 1, name2.indexOf("("));
+ if (!(name1.equals(name2))) return false;
+ String receiverName = node.getExpression().toString();
+ int start = node.getStartPosition() + (receiverName + ".").length();
+ // int end = start + name1.length();
+ int end = node.getStartPosition() + node.getLength();
+ attributes.put(IMarker.CHAR_START, start);
+ attributes.put(IMarker.CHAR_END, end);
+ return false;
+ }
+ };
+ }
+ return visitor;
+ }
+ case CONSTRACTOR_INVOCATION: {
+ if (statement instanceof MethodInvocation) {
+ final MethodInvocation mi = (MethodInvocation)statement;
+ final MethodExecution calledMe = mi.getCalledMethodExecution();
+ IRegion lineRegion = document.getLineInformation(mi.getLineNo() - 1);
+ parser.setSourceRange(lineRegion.getOffset(), lineRegion.getLength());
+ visitor = new ASTVisitor() {
+ @Override
+ public boolean visit(org.eclipse.jdt.core.dom.ConstructorInvocation node) {
+// String name1 = node.getClass().getName();
+// String name2 = calledMe.getCallerSideSignature();
+// name2 = name2.substring(0, name2.indexOf("("));
+// if (!(name1.equals(name2))) return false;
+// int start = node.getStartPosition();
+// int end = start + name1.length();
+// attributes.put(IMarker.CHAR_START, start);
+// attributes.put(IMarker.CHAR_END, end);
+ return false;
+ }
+ };
+ }
+ return visitor;
+ }
+ // �ǐՃI�u�W�F�N�g�̐�ւ�
+ case FIELD: {
+ if (statement instanceof FieldAccess) {
+ final FieldAccess fa = (FieldAccess)statement;
+ IRegion lineRegion = document.getLineInformation(fa.getLineNo() - 1);
+ parser.setSourceRange(lineRegion.getOffset(), lineRegion.getLength());
+ visitor = new ASTVisitor() {
+ @Override
+ public boolean visit(org.eclipse.jdt.core.dom.FieldAccess node) {
+ String name1 = node.getName().toString();
+ String name2 = fa.getFieldName();
+ name2 = name2.substring(name2.lastIndexOf(".") + 1);
+ if (!(name1.equals(name2))) return false;
+ int start = node.getStartPosition();
+ int end = start + node.getLength();
+ if (source.startsWith("this.", start)) {
+ attributes.put(IMarker.CHAR_START, start + "this.".length());
+ } else {
+ attributes.put(IMarker.CHAR_START, start);
+ }
+ attributes.put(IMarker.CHAR_END, end);
+ return false;
+ }
+ };
+ }
+ return visitor;
+ }
+ case CONTAINER: {
+ if (statement instanceof FieldAccess) {
+ final FieldAccess fa = (FieldAccess)statement;
+ IRegion lineRegion = document.getLineInformation(fa.getLineNo() - 1);
+ parser.setSourceRange(lineRegion.getOffset(), lineRegion.getLength());
+ visitor = new ASTVisitor() {
+ @Override
+ public boolean visit(QualifiedName node) {
+ String name1 = node.getName().toString();
+ String name2 = fa.getFieldName();
+ name2 = name2.substring(name2.lastIndexOf(".") + 1);
+ if (!(name1.equals(name2))) return false;
+ int start = node.getStartPosition();
+ int end = start + node.getLength();
+ // end = start + source.substring(start, end).lastIndexOf(".");
+ attributes.put(IMarker.CHAR_START, start);
+ attributes.put(IMarker.CHAR_END, end);
+ return false;
+ }
+ };
+ }
+ return visitor;
+ }
+ case ARRAY_ELEMENT:
+ break;
+ case ARRAY:
+ break;
+ // ���\�b�h����̏o��
+ case ACTUAL_ARGUMENT: {
+ if (statement instanceof MethodInvocation) {
+ final MethodInvocation mi = (MethodInvocation)statement;
+ final MethodExecution calledMe = mi.getCalledMethodExecution();
+ final int index = alias.getIndex();
+ calledMe.getArguments().get(alias.getIndex());
+ IRegion lineRegion = document.getLineInformation(mi.getLineNo() - 1);
+ parser.setSourceRange(lineRegion.getOffset(), lineRegion.getLength());
+ visitor = new ASTVisitor() {
+ @Override
+ public boolean visit(org.eclipse.jdt.core.dom.MethodInvocation node) {
+ String name1 = node.getName().toString();
+ String name2 = calledMe.getCallerSideSignature();
+ name2 = name2.substring(name2.lastIndexOf(".") + 1, name2.indexOf("("));
+ if (!(name1.equals(name2))) return false;
+ Object obj = node.arguments().get(index);
+ if (obj instanceof Expression) {
+ Expression argument = (Expression)obj;
+ int start = argument.getStartPosition();
+ int end = start + argument.getLength();
+ attributes.put(IMarker.CHAR_START, start);
+ attributes.put(IMarker.CHAR_END, end);
+ }
+ return false;
+ }
+ };
+ }
+ return visitor;
+ }
+ case RECEIVER: {
+ if (statement instanceof MethodInvocation) {
+ final MethodInvocation mi = (MethodInvocation)statement;
+ final MethodExecution calledMe = mi.getCalledMethodExecution();
+ IRegion lineRegion = document.getLineInformation(mi.getLineNo() - 1);
+ parser.setSourceRange(lineRegion.getOffset(), lineRegion.getLength());
+ visitor = new ASTVisitor() {
+ @Override
+ public boolean visit(org.eclipse.jdt.core.dom.MethodInvocation node) {
+ String name1 = node.getName().toString();
+ String name2 = calledMe.getCallerSideSignature();
+ name2 = name2.substring(name2.lastIndexOf(".") + 1, name2.indexOf("("));
+ if (!(name1.equals(name2))) return false;
+ String receiverName = node.getExpression().toString();
+ int start = node.getStartPosition();
+ int end = start + (receiverName).length();
+ attributes.put(IMarker.CHAR_START, start);
+ attributes.put(IMarker.CHAR_END, end);
+ return false;
+ }
+ };
+ }
+ return visitor;
+ }
+ case RETURN_VALUE:
+ // note: �ǂ��Ń��^�[���������̏��(�s�ԍ���)���g���[�X�ɂ͋L�^����Ă��Ȃ�
+ ISourceRange range = method.getSourceRange();
+ parser.setSourceRange(range.getOffset(), range.getLength());
+ visitor = new ASTVisitor(){
+ public boolean visit(org.eclipse.jdt.core.dom.ReturnStatement node) {
+ int start = node.getStartPosition();
+ int end = start + node.getLength();
+ attributes.put(IMarker.CHAR_START, start);
+ attributes.put(IMarker.CHAR_END, end);
+ return false;
+ }
+ };
+ return visitor;
+ }
+ } catch (JavaModelException | BadLocationException e) {
+ e.printStackTrace();
+ }
+ return visitor;
+ }
+
+// private void setAttributesForAlias(Map attributes, Alias alias, IFile file, String markerId) {
+// try {
+// FileEditorInput input = new FileEditorInput(file);
+// FileDocumentProvider provider = new FileDocumentProvider();
+// provider.connect(input);
+// IDocument document = provider.getDocument(input);
+// FindReplaceDocumentAdapter findAdapter = new FindReplaceDocumentAdapter(document);
+// IRegion lineRegion = document.getLineInformation(alias.getLineNo() - 1);
+// Statement statement = alias.getOccurrencePoint().getStatement();
+//
+// String type = alias.getAliasType().toString();
+// String statements = alias.getOccurrencePoint().getStatement().toString();
+// System.out.println(type + ": " + statements);
+// StringBuilder message = new StringBuilder();
+// if (markerId.equals(DeltaExtractionAnalyzer.DELTA_MARKER_ID)) {
+// message.append("SrcSide: ");
+// } else if (markerId.equals(DeltaExtractionAnalyzer.DELTA_MARKER_ID_2)) {
+// message.append("DstSide: ");
+// }
+// message.append(alias.getAliasType().toString());
+// message.append(" (id = " + alias.getObjectId() + ")");
+//
+// switch (alias.getAliasType()) {
+// // ���\�b�h�ւ̓���
+// case FORMAL_PARAMETER:
+// if (statement instanceof BlockEnter) {
+// BlockEnter be = (BlockEnter)statement;
+// IRegion region = document.getLineInformation(alias.getLineNo() - 2);
+// if (region == null) break;
+// attributes.put(IMarker.CHAR_START, region.getOffset());
+// attributes.put(IMarker.CHAR_END, region.getOffset() + region.getLength());
+// }
+// break;
+// case THIS:
+// if (statement instanceof FieldAccess) {
+// FieldAccess fa = (FieldAccess)statement;
+// IRegion region = findAdapter.find(lineRegion.getOffset(), "this", true, true, true, false);
+// if (region == null) break;
+// attributes.put(IMarker.CHAR_START, region.getOffset());
+// attributes.put(IMarker.CHAR_END, region.getOffset() + region.getLength());
+// }
+// break;
+// case METHOD_INVOCATION:
+// case CONSTRACTOR_INVOCATION:
+// if (statement instanceof MethodInvocation) {
+// MethodInvocation mi = (MethodInvocation)statement;
+// MethodExecution me = mi.getCalledMethodExecution();
+// String signature = me.getSignature();
+// signature = signature.substring(signature.lastIndexOf(".") + 1, signature.lastIndexOf("("));
+// IRegion region = findAdapter.find(lineRegion.getOffset(), signature, true, true, true, false);
+// if (region == null) break;
+// attributes.put(IMarker.CHAR_START, region.getOffset());
+// attributes.put(IMarker.CHAR_END, region.getOffset() + region.getLength());
+// }
+// break;
+// // �ǐՃI�u�W�F�N�g�̐�ւ�
+// case FIELD:
+// if (statement instanceof FieldAccess) {
+// FieldAccess fa = (FieldAccess)statement;
+// String fieldName = fa.getFieldName();
+// fieldName = fieldName.substring(fieldName.lastIndexOf(".") + 1);
+// IRegion region = null;
+// int start = lineRegion.getOffset();
+// while (true) {
+// region = findAdapter.find(start, fieldName, true, true, true, false);
+// if (region == null) break;
+// if (findAdapter.charAt(region.getOffset() - 1) == '.') break;
+// start = region.getOffset() + 1;
+// }
+// if (region == null) break;
+// attributes.put(IMarker.CHAR_START, region.getOffset());
+// attributes.put(IMarker.CHAR_END, region.getOffset() + region.getLength());
+// }
+// break;
+// case CONTAINER:
+// if (statement instanceof FieldAccess) {
+// FieldAccess fa = (FieldAccess)statement;
+// String fieldName = fa.getFieldName();
+// IRegion region = findAdapter.find(lineRegion.getOffset(), fieldName, true, true, true, false);
+// if (region == null) break;
+// attributes.put(IMarker.CHAR_START, region.getOffset());
+// attributes.put(IMarker.CHAR_END, region.getOffset() + region.getLength());
+// }
+// break;
+// case ARRAY_ELEMENT:
+// if (statement instanceof ArrayAccess) {
+// ArrayAccess aa = (ArrayAccess)statement;
+// String arrayIndex = "[" + aa.getIndex() + "]";
+// IRegion region = findAdapter.find(lineRegion.getOffset(), arrayIndex, true, true, true, false);
+// if (region == null) break;
+// attributes.put(IMarker.CHAR_START, region.getOffset());
+// attributes.put(IMarker.CHAR_END, region.getOffset() + region.getLength());
+// }
+// break;
+// case ARRAY:
+// if (statement instanceof ArrayAccess) {
+// ArrayAccess aa = (ArrayAccess)statement;
+// String arrayIndex = "[" + aa.getIndex() + "]";
+// IRegion region = findAdapter.find(lineRegion.getOffset(), arrayIndex, true, true, true, false);
+// if (region == null) break;
+// attributes.put(IMarker.CHAR_START, region.getOffset());
+// attributes.put(IMarker.CHAR_END, region.getOffset() + region.getLength());
+// }
+// break;
+// // ���\�b�h����̏o��
+// case ACTUAL_ARGUMENT:
+// if (statement instanceof MethodInvocation) {
+// MethodInvocation mi = (MethodInvocation)statement;
+// MethodExecution me = mi.getCalledMethodExecution();
+// String signature = me.getSignature();
+// signature = signature.substring(signature.lastIndexOf(".") + 1, signature.lastIndexOf("("));
+// IRegion region = findAdapter.find(lineRegion.getOffset(), signature, true, true, true, false);
+// if (region == null) break;
+// attributes.put(IMarker.CHAR_START, region.getOffset());
+// attributes.put(IMarker.CHAR_END, region.getOffset() + region.getLength());
+// }
+// break;
+// case RECEIVER:
+// if (statement instanceof MethodInvocation) {
+// MethodInvocation mi = (MethodInvocation)statement;
+// MethodExecution me = mi.getCalledMethodExecution();
+// String signature = me.getSignature();
+// signature = signature.substring(signature.lastIndexOf(".") + 1, signature.lastIndexOf("("));
+// IRegion region = findAdapter.find(lineRegion.getOffset(), signature, true, true, true, false);
+// if (region == null) break;
+// attributes.put(IMarker.CHAR_START, region.getOffset());
+// attributes.put(IMarker.CHAR_END, region.getOffset() + region.getLength());
+// }
+// break;
+// case RETURN_VALUE:
+// if (statement instanceof FieldAccess) {
+// FieldAccess fa = (FieldAccess)statement;
+// String fieldName = fa.getFieldName();
+// IRegion region = findAdapter.find(lineRegion.getOffset(), fieldName, true, true, true, false);
+// if (region == null) break;
+// attributes.put(IMarker.CHAR_START, region.getOffset());
+// attributes.put(IMarker.CHAR_END, region.getOffset() + region.getLength());
+// }
+// break;
+// }
+// attributes.put(IMarker.MESSAGE, message.toString());
+// attributes.put(IMarker.LINE_NUMBER, alias.getLineNo());
+// } catch (CoreException | BadLocationException e) {
+// e.printStackTrace();
+// }
+// }
+
+ private void setAttributesForMethodExecution(Map attributes, MethodExecution methodExecution, IFile file, int lineNo, String markerId) {
+ try {
+ FileEditorInput input = new FileEditorInput(file);
+ FileDocumentProvider provider = new FileDocumentProvider();
+ provider.connect(input);
+ IDocument document = provider.getDocument(input);
+ if (lineNo > 1) {
+ IRegion lineRegion = document.getLineInformation(lineNo - 1);
+ attributes.put(IMarker.CHAR_START, lineRegion.getOffset());
+ attributes.put(IMarker.CHAR_END, lineRegion.getOffset() + lineRegion.getLength());
+ attributes.put(IMarker.LINE_NUMBER, lineNo);
+ } else {
+ // note: ���\�b�h�V�O�l�`�����n�C���C�g
+ IType type = JavaEditorOperator.findIType(methodExecution);
+ IMethod method = JavaEditorOperator.findIMethod(methodExecution, type);
+ int start = method.getSourceRange().getOffset();
+ int end = start + method.getSource().indexOf(")") + 1;
+ attributes.put(IMarker.CHAR_START, start);
+ attributes.put(IMarker.CHAR_END, end);
+ }
+ } catch (CoreException | BadLocationException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void deleteMarkers(String markerId) {
+ List markerList = markers.get(markerId);
+ if (markerList == null) return;
+ for (IMarker marker : markerList) {
+ try {
+ marker.delete();
+ } catch (CoreException e) {
+ e.printStackTrace();
+ }
+ }
+ markerList.clear();
+ markers.remove(markerId);
+ }
+}
diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaRelatedAliasCollector.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaRelatedAliasCollector.java
new file mode 100644
index 0000000..6a46d22
--- /dev/null
+++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaRelatedAliasCollector.java
@@ -0,0 +1,61 @@
+package org.ntlab.traceDebugger.analyzerProvider;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DeltaRelatedAliasCollector implements IAliasCollector {
+ private List srcSideRelatedAliases = new ArrayList<>();
+ private List dstSideRelatedAliases = new ArrayList<>();
+ private List srcSideIdList = new ArrayList<>();
+ private List dstSideIdList = new ArrayList<>();
+
+ public DeltaRelatedAliasCollector(String srcId, String dstId) {
+ srcSideIdList.add(srcId);
+ dstSideIdList.add(dstId);
+ }
+
+ @Override
+ public void addAlias(Alias alias) {
+ String objId = alias.getObjectId();
+ if (srcSideIdList.contains(objId)) {
+ if (alias.getAliasType().equals(Alias.AliasType.ACTUAL_ARGUMENT)) {
+ Alias formalParameterAlias = srcSideRelatedAliases.get(srcSideRelatedAliases.size() - 1);
+ alias.setIndex(formalParameterAlias.getIndex());
+ }
+ srcSideRelatedAliases.add(alias);
+ System.out.println("Src " + alias.getAliasType() + ": " + alias.getMethodSignature() + " line" + alias.getLineNo() + " index" + alias.getIndex());
+ } else if (dstSideIdList.contains(objId)) {
+ if (alias.getAliasType().equals(Alias.AliasType.ACTUAL_ARGUMENT)) {
+ Alias formalParameterAlias = dstSideRelatedAliases.get(dstSideRelatedAliases.size() - 1);
+ alias.setIndex(formalParameterAlias.getIndex());
+ }
+ dstSideRelatedAliases.add(alias);
+ System.out.println("Dst " + alias.getAliasType() + ": " + alias.getMethodSignature() + " line" + alias.getLineNo() + " index" + alias.getIndex());
+ }
+ }
+
+ @Override
+ public void changeTrackingObject(String from, String to) {
+ if (srcSideIdList.contains(from)) {
+ srcSideIdList.add(to);
+ } else if (dstSideIdList.contains(from)) {
+ dstSideIdList.add(to);
+ }
+ }
+
+ public List getSrcSideRelatedAliases() {
+ return srcSideRelatedAliases;
+ }
+
+ public List getDstSideRelatedAliases() {
+ return dstSideRelatedAliases;
+ }
+
+ public void addSrcSideRelatedAlias(Alias alias) {
+ srcSideRelatedAliases.add(alias);
+ }
+
+ public void addDstSideRelatedAlias(Alias alias) {
+ dstSideRelatedAliases.add(alias);
+ }
+}
diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/ExtractedStructure.java b/src/org/ntlab/traceDebugger/analyzerProvider/ExtractedStructure.java
index 9f0a275..8bea6d8 100644
--- a/src/org/ntlab/traceDebugger/analyzerProvider/ExtractedStructure.java
+++ b/src/org/ntlab/traceDebugger/analyzerProvider/ExtractedStructure.java
@@ -1,7 +1,11 @@
package org.ntlab.traceDebugger.analyzerProvider;
+import java.util.ArrayList;
+import java.util.List;
+
import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodExecution;
import org.ntlab.traceAnalysisPlatform.tracer.trace.Reference;
+import org.ntlab.traceAnalysisPlatform.tracer.trace.TracePoint;
public class ExtractedStructure {
@@ -10,7 +14,11 @@
private MethodExecution coordinator = null;
private MethodExecution parent = null;
private MethodExecution creationCallTree;
-
+// private List srcSideRelatedTracePoints = new ArrayList<>();
+// private List dstSideRelatedTracePoints = new ArrayList<>();
+// private List srcSideRelatedAliases = new ArrayList<>();
+// private List dstSideRelatedAliases = new ArrayList<>();
+
public Delta getDelta() {
return delta;
}
@@ -64,5 +72,36 @@
public MethodExecution getCreationCallTree() {
return creationCallTree;
}
+
+// public List getSrcSideRelatedTracePoints() {
+// return srcSideRelatedTracePoints;
+// }
+//
+// public List getDstSideRelatedTracePoints() {
+// return dstSideRelatedTracePoints;
+// }
+//
+// public void addSrcSideRelatedTracePoint(TracePoint tp) {
+// srcSideRelatedTracePoints.add(tp);
+// }
+//
+// public void addDstSideRelatedTracePoint(TracePoint tp) {
+// dstSideRelatedTracePoints.add(tp);
+// }
+// public List getSrcSideRelatedAliases() {
+// return srcSideRelatedAliases;
+// }
+//
+// public List getDstSideRelatedAliases() {
+// return dstSideRelatedAliases;
+// }
+//
+// public void addSrcSideRelatedAlias(Alias alias) {
+// srcSideRelatedAliases.add(alias);
+// }
+//
+// public void addDstSideRelatedAlias(Alias alias) {
+// dstSideRelatedAliases.add(alias);
+// }
}
diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/IAliasCollector.java b/src/org/ntlab/traceDebugger/analyzerProvider/IAliasCollector.java
new file mode 100644
index 0000000..ca1b1ad
--- /dev/null
+++ b/src/org/ntlab/traceDebugger/analyzerProvider/IAliasCollector.java
@@ -0,0 +1,9 @@
+package org.ntlab.traceDebugger.analyzerProvider;
+
+public interface IAliasCollector {
+
+ void addAlias(Alias alias);
+
+ void changeTrackingObject(String from, String to);
+
+}
diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/ObjectFlowAnalyzer.java b/src/org/ntlab/traceDebugger/analyzerProvider/ObjectFlowAnalyzer.java
deleted file mode 100644
index 468a23c..0000000
--- a/src/org/ntlab/traceDebugger/analyzerProvider/ObjectFlowAnalyzer.java
+++ /dev/null
@@ -1,237 +0,0 @@
-package org.ntlab.traceDebugger.analyzerProvider;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.ntlab.traceAnalysisPlatform.tracer.trace.ArrayAccess;
-import org.ntlab.traceAnalysisPlatform.tracer.trace.ArrayCreate;
-import org.ntlab.traceAnalysisPlatform.tracer.trace.ArrayUpdate;
-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;
-import org.ntlab.traceAnalysisPlatform.tracer.trace.Statement;
-import org.ntlab.traceAnalysisPlatform.tracer.trace.Trace;
-import org.ntlab.traceAnalysisPlatform.tracer.trace.TraceJSON;
-import org.ntlab.traceAnalysisPlatform.tracer.trace.TracePoint;
-
-public class ObjectFlowAnalyzer extends AbstractAnalyzer {
- private static ObjectFlowAnalyzer getInstance = null;
-
- public ObjectFlowAnalyzer(Trace trace) {
- super(trace);
- }
-
- private static ObjectFlowAnalyzer getInstance() {
- if (getInstance == null) {
- getInstance = new ObjectFlowAnalyzer(TraceJSON.getInstance());
- }
- return getInstance;
- }
-
- public static ArrayList findAllSeedAliasesStatic(MethodExecution me) {
- return getInstance().findAllSeedAliases(me);
- }
-
- public ArrayList findAllSeedAliases(MethodExecution me) {
- ArrayList seedAliasList = new ArrayList<>();
- List statements = me.getStatements();
- String[] primitives = {"byte", "short", "int", "long", "float", "double", "char", "boolean"};
- List primitiveList = Arrays.asList(primitives);
- for (int i = 0; i < statements.size(); i++) {
- TracePoint tp = me.getTracePoint(i);
- Statement statement = statements.get(i);
- if (statement instanceof FieldAccess) {
- FieldAccess fa = (FieldAccess)statement;
- String objId = fa.getContainerObjId();
- if (objId != null && !(objId.equals("0")) && !(primitiveList.contains(fa.getContainerClassName()))) {
- seedAliasList.add(new Alias(objId, tp, Alias.OCCURRENCE_EXP_CONTAINER));
- }
- objId = fa.getValueObjId();
- if (objId != null && !(objId.equals("0")) && !(primitiveList.contains(fa.getValueClassName()))) {
- seedAliasList.add(new Alias(objId, tp, Alias.OCCURRENCE_EXP_FIELD));
- }
- } else if (statement instanceof FieldUpdate) {
- FieldUpdate fu = (FieldUpdate)statement;
- String objId = fu.getContainerObjId();
- if (objId != null && !(objId.equals("0")) && !(primitiveList.contains(fu.getContainerClassName()))) {
- seedAliasList.add(new Alias(objId, tp, Alias.OCCURRENCE_EXP_CONTAINER));
- }
- objId = fu.getValueObjId();
- if (objId != null && !(objId.equals("0")) && !(primitiveList.contains(fu.getValueClassName()))) {
- seedAliasList.add(new Alias(objId, tp, Alias.OCCURRENCE_EXP_FIELD));
- }
- } else if (statement instanceof ArrayAccess) {
- ArrayAccess aa = (ArrayAccess)statement;
- String valueObjId = aa.getValueObjectId();
- if (valueObjId != null && !(valueObjId.equals("0")) && !(primitiveList.contains(aa.getValueClassName()))) {
- seedAliasList.add(new Alias(valueObjId, tp, Alias.OCCURRENCE_EXP_ARRAY));
- }
- } else if (statement instanceof ArrayUpdate) {
- ArrayUpdate au = (ArrayUpdate)statement;
- String valueObjId = au.getValueObjectId();
- if (valueObjId != null && !(valueObjId.equals("0")) && !(primitiveList.contains(au.getValueClassName()))) {
- seedAliasList.add(new Alias(valueObjId, tp, Alias.OCCURRENCE_EXP_ARRAY));
- }
- } else if (statement instanceof ArrayCreate) {
- ArrayCreate ac = (ArrayCreate)statement;
- String arrayObjId = ac.getArrayObjectId();
- if (arrayObjId != null && !(arrayObjId.equals("0")) && !(primitiveList.contains(ac.getArrayClassName()))) {
- seedAliasList.add(new Alias(arrayObjId, tp, Alias.OCCURRENCE_EXP_RETURN));
- }
- } else if (statement instanceof MethodInvocation) {
- MethodExecution calledMe = ((MethodInvocation)statement).getCalledMethodExecution();
- String thisObjId = calledMe.getThisObjId();
- if (thisObjId != null && !(thisObjId.equals("0"))) {
- seedAliasList.add(new Alias(thisObjId, tp, Alias.OCCURRENCE_EXP_RECEIVER));
- }
- List args = calledMe.getArguments();
- for (int j = 0; j < args.size(); j++) {
- ObjectReference arg = args.get(j);
- String argValueId = arg.getId();
- if (argValueId != null && !(argValueId.equals("0")) && !(primitiveList.contains(arg.getActualType()))) {
- seedAliasList.add(new Alias(argValueId, tp, (j + Alias.OCCURRENCE_EXP_FIRST_ARG)));
- }
- }
- ObjectReference returnValue = calledMe.getReturnValue();
- if (returnValue != null) {
- String returnValueId = returnValue.getId();
- if (returnValueId != null && !(returnValueId.equals("0") && !(primitiveList.contains(returnValue.getActualType())))) {
- seedAliasList.add(new Alias(returnValueId, tp, Alias.OCCURRENCE_EXP_RETURN));
- }
- }
- }
- }
- return seedAliasList;
- }
-
- private TracePoint getRecentlyFieldUpdate(TracePoint tp) {
- Statement statement = tp.getStatement();
- if (statement instanceof FieldAccess) {
- FieldAccess fa = (FieldAccess)statement;
- return trace.getFieldUpdateTracePoint(fa.getReference(), tp);
- }
- return null;
- }
-
- private TracePoint getRecentlyArrayUpdate(TracePoint tp) {
- Statement statement = tp.getStatement();
- if (statement instanceof ArrayAccess) {
- ArrayAccess aa = (ArrayAccess)statement;
- // aa.getReference()���Ȃ��̂ʼn��ɂ�����ۂ�Reference������ēn��
- return trace.getArraySetTracePoint(new Reference(aa.getArrayObjectId(), aa.getValueObjectId(), aa.getArrayClassName(), aa.getValueClassName()), tp);
- }
- return null;
- }
-
- public static ArrayList> getObjectFlowStatic(Alias startAlias) {
- return getInstance().getObjectFlow(startAlias);
- }
-
- public ArrayList> getObjectFlow(Alias startAlias) {
- ArrayList> aliasLists = new ArrayList<>();
- ArrayList aliasList = new ArrayList<>();
- aliasLists.add(aliasList);
-// aliasList.add(alias);
- String objId = startAlias.getObjectId();
- TracePoint tp = startAlias.getOccurrencePoint().duplicate();
- ArrayList> resultLists = getObjectFlow(aliasLists, objId, tp, 0);
- return resultLists;
- }
-
- private ArrayList> getObjectFlow(ArrayList> aliasLists,
- String objId, TracePoint tp, int side) {
- ArrayList aliasList = aliasLists.get(aliasLists.size() - 1); // ����getObjectFlow���\�b�h���s���Ō��������G�C���A�X�����Ă������X�g
- do {
- Statement statement = tp.getStatement();
- if (statement instanceof FieldAccess) {
- // �t�B�[���h�Q�Ƃ̏ꍇ
- FieldAccess fa = (FieldAccess)statement;
- if (fa.getValueObjId().equals(objId)) {
- // ���Y�n�_�ł̃G�C���A�X�����X�g�ɒlj��������, �t�B�[���h�ŏI�X�V�ɔ�ԃp�^�[���Ƃ��̂܂ܑk��p�^�[���Ƃŕ���
- aliasList.add(new Alias(objId, tp.duplicate(), Alias.OCCURRENCE_EXP_FIELD));
- aliasList = new ArrayList<>(aliasList); // ���X�g���̂��f�B�[�v�R�s�[���Ă���(�t�B�[���h�ŏI�X�V�ɔ�ԍċA�����I�����, ���̂܂ܑk��p�^�[���ŗp����)
- TracePoint fieldUpdateTp = getRecentlyFieldUpdate(tp);
- aliasLists = getObjectFlow(aliasLists, objId, fieldUpdateTp, 0);
- aliasLists.add(aliasList); // �ċA�����ɓ���O�Ƀf�B�[�v�R�s�[���Ă������X�g���Ō���ɒlj� (�ȍ~�̑k��ɂ���Č������G�C���A�X�͂��̃��X�g�ɓ������)
- }
- } else if (statement instanceof ArrayAccess) {
- // �z��v�f�Q�Ƃ̏ꍇ
- ArrayAccess aa = (ArrayAccess)statement;
- if (aa.getValueObjectId().equals(objId)) {
- aliasList.add(new Alias(objId, tp.duplicate(), Alias.OCCURRENCE_EXP_ARRAY));
- aliasList = new ArrayList<>(aliasList);
- TracePoint arrayUpdateTp = getRecentlyArrayUpdate(tp);
- aliasLists = getObjectFlow(aliasLists, objId, arrayUpdateTp, 0);
- aliasLists.add(aliasList);
- }
- } else if (statement instanceof FieldUpdate) {
- // �t�B�[���h�X�V�̏ꍇ
- FieldUpdate fu = (FieldUpdate)statement;
- if (fu.getValueObjId().equals(objId)) {
- aliasList.add(new Alias(objId, tp.duplicate(), Alias.OCCURRENCE_EXP_FIELD));
- }
- } else if (statement instanceof ArrayUpdate) {
- // �z��v�f�X�V�̏ꍇ
- ArrayUpdate au = (ArrayUpdate)statement;
- if (au.getValueObjectId().equals(objId)) {
- aliasList.add(new Alias(objId, tp.duplicate(), Alias.OCCURRENCE_EXP_ARRAY));
- }
- } else if (statement instanceof ArrayCreate) {
- // �z���̏ꍇ
- ArrayCreate ac = (ArrayCreate)statement;
- if (ac.getArrayObjectId().equals(objId)) {
- aliasList.add(new Alias(objId, tp.duplicate(), Alias.OCCURRENCE_EXP_RETURN)); // �z���� new �^��[] �̖߂�l
- return aliasLists; // �z���ӏ��̓G�C���A�X�̋N���Ȃ̂ł���ȑO�ɂ͂����Ȃ��͂�
- }
- } else if (statement instanceof MethodInvocation) {
- // ���\�b�h�Ăяo���̏ꍇ
- MethodExecution calledMethodExecution = ((MethodInvocation)statement).getCalledMethodExecution();
- ObjectReference returnValue = calledMethodExecution.getReturnValue();
- if (returnValue.getId().equals(objId)) {
- // �߂�l�ɃG�C���A�X�̃I�u�W�F�N�gID����v�����ꍇ
- ArrayList aliasListBeforeMethodBackEntry = new ArrayList<>(aliasList); // �Ăяo����̃��\�b�h���s�ɐ���O�̃G�C���A�X���X�g���R�s�[���Ă���
- aliasList.add(new Alias(objId, tp.duplicate(), Alias.OCCURRENCE_EXP_RETURN));
- if (calledMethodExecution.isConstructor()) {
- return aliasLists; // �R���X�g���N�^�Ăяo���ӏ��̓G�C���A�X�̋N���Ȃ̂ł���ȑO�ɂ͂����Ȃ��͂�
- }
- TracePoint exitTp = calledMethodExecution.getExitPoint(); // �Ăяo�����\�b�h���s�̍ŏI�X�e�[�g�����g���w��tp���擾
- aliasLists = getObjectFlow(aliasLists, objId, exitTp, side + 1); // �Ăяo����̃��\�b�h���s�ɐ���
- aliasList = aliasLists.get(aliasLists.size() - 1);
- if (aliasList.get(aliasList.size() - 1).isOrigin()) {
- // �Ăяo����̃��\�b�h���s�ɐ�������ł��̃I�u�W�F�N�g�̋N��(�R���X�g���N�^or�z��)�ɓ��B���Ă����ꍇ, �Ăяo����̃��\�b�h���s�ɐ���O�̃��X�g��p���ĐV�K�ɒǐՂs����
- aliasLists.add(aliasListBeforeMethodBackEntry);
- aliasList = aliasListBeforeMethodBackEntry;
- }
- }
- }
- } while (tp.stepBackOver()); // �Ăяo�����ɖ߂邩����ȏ�H��Ȃ��Ȃ�܂Ń��[�v
- if (!tp.isValid()) {
- return aliasLists; // ����ȏチ�\�b�h���s��k��Ȃ��ꍇ(main���\�b�h�̂���ɑO�Ȃ�)�͂��̎��_�ŏI��
- }
- // --- ���̎��_�� tracePoint�� �Ăяo�������w���Ă��� (���O�܂ők���Ă������\�b�h���s�ɂ��Ẵ��\�b�h�Ăяo�����w���Ă���) ---
- MethodExecution calledMethodExecution = ((MethodInvocation)tp.getStatement()).getCalledMethodExecution();
- ArrayList args = calledMethodExecution.getArguments();
- boolean isExistingInArgs = false;
- for (int i = 0; i < args.size(); i++) {
- if (args.get(i).getId().equals(objId)) {
- // ���\�b�h�Ăяo���̎������ɃG�C���A�X�̃I�u�W�F�N�gID����v�����ꍇ
- aliasList.add(new Alias(objId, tp.duplicate(), (i + Alias.OCCURRENCE_EXP_FIRST_ARG)));
- isExistingInArgs = true;
- if (side == 0) {
- // �T���J�n���\�b�h���s�܂��̓t�B�[���h��z��v�f�̍ŏI�X�V�T���Ŕ��̃��\�b�h���s����, �X�^�b�N�g���[�X�ł��ǂ��S���\�b�h���s�̏ꍇ
- TracePoint previousTp = tp.duplicate();
- previousTp.stepBackOver();
- aliasLists = getObjectFlow(aliasLists, objId, previousTp, 0); // �Ăяo�����̃��\�b�h���s�ɖ߂�
- }
- }
- }
- if (!isExistingInArgs) {
- aliasLists.remove(aliasLists.size() - 1); // �����ɃG�C���A�X���Ȃ������ꍇ�͂��̉�̒ǐՃG�C���A�X���X�g���폜����
- }
- return aliasLists;
- }
-}
diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/ObjectFlowAnalyzerLaunchConfiguration.java b/src/org/ntlab/traceDebugger/analyzerProvider/ObjectFlowAnalyzerLaunchConfiguration.java
index d48312e..cc034f2 100644
--- a/src/org/ntlab/traceDebugger/analyzerProvider/ObjectFlowAnalyzerLaunchConfiguration.java
+++ b/src/org/ntlab/traceDebugger/analyzerProvider/ObjectFlowAnalyzerLaunchConfiguration.java
@@ -8,9 +8,11 @@
import org.ntlab.traceAnalysisPlatform.IAdditionalLaunchConfiguration;
public class ObjectFlowAnalyzerLaunchConfiguration implements IAdditionalLaunchConfiguration {
- public static final String ANALYZER_PATH = "org/ntlab/traceDebugger/analyzerProvider/ObjectFlowAnalyzer.class";
+// public static final String ANALYZER_PATH = "org/ntlab/traceDebugger/analyzerProvider/ObjectFlowAnalyzer.class";
+ public static final String ANALYZER_PATH = "org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.class";
public static final String ANALYZER_PACKAGE = "org.ntlab.traceDebugger.analyzerProvider";
- public static final String ANALYZER_CLASS = "ObjectFlowAnalyzer";
+// public static final String ANALYZER_CLASS = "ObjectFlowAnalyzer";
+ public static final String ANALYZER_CLASS = "DeltaExtractionAnalyzer";
@Override
public String[] getAdditionalClasspaths() {