diff --git a/bin/org/ntlab/traceDebugger/DebuggingController.class b/bin/org/ntlab/traceDebugger/DebuggingController.class
index de9e45f..5685d92 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/analyzerProvider/DeltaExtractionAnalyzer.class b/bin/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.class
index 136e19f..e7347ae 100644
--- a/bin/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.class
+++ b/bin/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.class
Binary files differ
diff --git a/plugin.xml b/plugin.xml
index 8839c9f..02f69a7 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -48,7 +48,7 @@
name="DeltaMarker"
point="org.eclipse.core.resources.markers">
+ value="false">
@@ -59,7 +59,7 @@
name="DeltaMarker2"
point="org.eclipse.core.resources.markers">
+ value="false">
diff --git a/src/org/ntlab/traceDebugger/DebuggingController.java b/src/org/ntlab/traceDebugger/DebuggingController.java
index e0637b1..6bde82c 100644
--- a/src/org/ntlab/traceDebugger/DebuggingController.java
+++ b/src/org/ntlab/traceDebugger/DebuggingController.java
@@ -51,7 +51,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", "void E.setC(C)", null);
+// InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "void E.setC(C)", null);
+ InputDialog inputDialog = new InputDialog(null, "method signature dialog", "Input method signature", "void _arraySample.D.setC(_arraySample.C)", null);
if (inputDialog.open() != InputDialog.OK) return false;
String methodSignature = inputDialog.getValue();
inputDialog = new InputDialog(null, "line No dialog", "Input line no", "", null);
diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java
index 231f5b5..08aae6c 100644
--- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java
+++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java
@@ -1,21 +1,11 @@
package org.ntlab.traceDebugger.analyzerProvider;
-import java.util.ArrayList;
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;
@@ -25,49 +15,30 @@
import org.ntlab.traceDebugger.Variable;
public class DeltaExtractionAnalyzer extends AbstractAnalyzer {
- private static DeltaExtractionAnalyzer getInstance = null;
+ private static DeltaExtractionAnalyzer theInstance = null;
private DeltaExtractorJSON deltaExtractor;
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);
DeltaMarkerManager mgr = DeltaMarkerManager.getInstance();
- mgr.deleteMarkers(DELTA_MARKER_ID);
- mgr.deleteMarkers(DELTA_MARKER_ID_2);
+ mgr.deleteMarkers(DeltaMarkerManager.DELTA_MARKER_ID);
+ mgr.deleteMarkers(DeltaMarkerManager.DELTA_MARKER_ID_2);
}
private static DeltaExtractionAnalyzer getInstance() {
- if (getInstance == null) {
- getInstance = new DeltaExtractionAnalyzer(TraceJSON.getInstance());
+ if (theInstance == null) {
+ theInstance = new DeltaExtractionAnalyzer(TraceJSON.getInstance());
}
- return getInstance;
+ return theInstance;
}
public TracePoint getBottomPoint() {
return bottomPoint;
}
-// public ReferencePoint getCoordinatorPoint() {
-// return coordinatorPoint;
-// }
-//
-// public List getSrcSideRelatedPoints() {
-// return srcSideRelatedPoints;
-// }
-//
-// public List getDstSideRelatedPoints() {
-// return dstSideRelatedPoints;
-// }
-
public ExtractedStructure geExtractedStructure() {
return extractedStructure;
}
@@ -80,6 +51,7 @@
TracePoint before = variable.getTracePoint();
Reference reference = new Reference(srcId, dstId, srcClassName, dstClassName);
+ // �f���^���o
reset();
DeltaRelatedAliasCollector aliasCollector = new DeltaRelatedAliasCollector(srcId, dstId);
extractedStructure = deltaExtractor.extract(reference, before.duplicate(), aliasCollector);
@@ -87,18 +59,28 @@
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()));
+
+ // �f���^���o�̌��ʂ����Ƀ\�[�X�R�[�h�]�\������
+ mark(bottomPoint, srcSideRelatedAliases, dstSideRelatedAliases, coordinator);
+ }
+
+ private void mark(TracePoint bottomPoint, List srcSideRelatedAliases, List dstSideRelatedAliases, MethodExecution coordinator) {
String message = String.format("Bottom %s", "");
- markAndOpenJavaFile(bottomPoint.getMethodExecution(), bottomPoint.getStatement().getLineNo(), message, DELTA_MARKER_ID);
+ markAndOpenJavaFile(bottomPoint.getMethodExecution(), bottomPoint.getStatement().getLineNo(), message, DeltaMarkerManager.DELTA_MARKER_ID);
+ int cnt = 1;
for (Alias alias: srcSideRelatedAliases) {
- markAndOpenJavaFile(alias, DELTA_MARKER_ID);
+ message = String.format("SrcSide%03d %s (id = %s)", cnt, alias.getAliasType().toString(), alias.getObjectId());
+ markAndOpenJavaFile(alias, message, DeltaMarkerManager.DELTA_MARKER_ID);
+ cnt++;
}
+ cnt = 1;
for (Alias alias : dstSideRelatedAliases) {
- markAndOpenJavaFile(alias, DELTA_MARKER_ID_2);
+ message = String.format("DstSide%03d %s (id = %s)", cnt, alias.getAliasType().toString(), alias.getObjectId());
+ markAndOpenJavaFile(alias, message, DeltaMarkerManager.DELTA_MARKER_ID_2);
+ cnt++;
}
- markAndOpenJavaFile(coordinator, -1 , "Coordinator", DELTA_MARKER_ID);
+ markAndOpenJavaFile(coordinator, -1 , "Coordinator", DeltaMarkerManager.DELTA_MARKER_ID);
}
private TracePoint findTracePoint(Reference reference, MethodExecution methodExecution, long beforeTime) {
@@ -116,84 +98,17 @@
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() {
bottomPoint = null;
DeltaMarkerManager mgr = DeltaMarkerManager.getInstance();
- mgr.deleteMarkers(DELTA_MARKER_ID);
- mgr.deleteMarkers(DELTA_MARKER_ID_2);
+ mgr.deleteMarkers(DeltaMarkerManager.DELTA_MARKER_ID);
+ mgr.deleteMarkers(DeltaMarkerManager.DELTA_MARKER_ID_2);
}
- private void markAndOpenJavaFile(Alias alias, String markerId) {
-// MethodExecution me = tp.getMethodExecution();
-// int lineNo = tp.getStatement().getLineNo();
-// JavaEditorOperator.markAndOpenJavaFile(me, lineNo, findString, message, markerId, deltaMarkerMgr);
-
+ private void markAndOpenJavaFile(Alias alias, String message, String markerId) {
IFile file = JavaEditorOperator.findIFile(alias.getMethodExecution());
DeltaMarkerManager mgr = DeltaMarkerManager.getInstance();
- IMarker marker = mgr.addMarker(alias, file, markerId);
+ IMarker marker = mgr.addMarker(alias, file, message, markerId);
JavaEditorOperator.markAndOpenJavaFile(marker);
}
diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java
index 86414d9..2d893a8 100644
--- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java
+++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java
@@ -2,7 +2,6 @@
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -12,7 +11,6 @@
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;
@@ -21,18 +19,15 @@
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.ArrayCreate;
import org.ntlab.traceAnalysisPlatform.tracer.trace.FieldAccess;
import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodExecution;
import org.ntlab.traceAnalysisPlatform.tracer.trace.MethodInvocation;
@@ -42,6 +37,8 @@
public class DeltaMarkerManager {
private static final DeltaMarkerManager theInstance = new DeltaMarkerManager();
private Map> markers = new HashMap<>();
+ public static final String DELTA_MARKER_ID = "org.ntlab.traceDebugger.deltaMarker";
+ public static final String DELTA_MARKER_ID_2 = "org.ntlab.traceDebugger.deltaMarker2";
private DeltaMarkerManager() {
@@ -50,12 +47,16 @@
public static DeltaMarkerManager getInstance() {
return theInstance;
}
+
+ public Map> getMarkers() {
+ return markers;
+ }
- public IMarker addMarker(Alias alias, IFile file, String markerId) {
+ public IMarker addMarker(Alias alias, IFile file, String message, String markerId) {
try {
IMarker marker = file.createMarker(markerId);
Map attributes = new HashMap<>();
- setAttributesForAlias(attributes, alias, file, markerId);
+ setAttributesForAlias(attributes, alias, file, message, markerId);
attributes.put(IMarker.TRANSIENT, true);
marker.setAttributes(attributes);
addMarker(markerId, marker);
@@ -90,72 +91,81 @@
}
markerList.add(marker);
}
-
- public Map> getMarkers() {
- return markers;
- }
- private void setAttributesForAlias(final Map attributes, Alias alias, IFile file, String markerId) {
+ private void setAttributesForAlias(final Map attributes, Alias alias, IFile file, String message, 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: ");
+ String statement = "";
+ try {
+ statement = alias.getOccurrencePoint().getStatement().toString(); // statement���Ȃ��ꍇ������
+ } catch (ArrayIndexOutOfBoundsException e) {
+ // e.printStackTrace();
}
- message.append(alias.getAliasType().toString());
- message.append(" (id = " + alias.getObjectId() + ")");
+ System.out.println(aliasType + ": " + statement);
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());
+ if (method != null) {
+ ICompilationUnit unit = method.getCompilationUnit();
+ parser.setSource(unit);
+ ASTNode node = parser.createAST(new NullProgressMonitor());
+ if (node instanceof CompilationUnit) {
+ CompilationUnit cUnit = (CompilationUnit)node;
+ ASTVisitor visitor = createVisitor(alias, method, cUnit, attributes);
+ if (visitor != null) {
+ node.accept(visitor);
+ }
+ }
+ }
+ attributes.put(IMarker.MESSAGE, message);
} catch (CoreException e) {
e.printStackTrace();
}
}
- private ASTVisitor createVisitor(Alias alias, IMethod method, IDocument document, ASTParser parser, final Map attributes) {
- ASTVisitor visitor = new ASTVisitor() {
- };
+ private ASTVisitor createVisitor(final Alias alias, final IMethod method, final CompilationUnit cUnit, final Map attributes) {
+ class MyASTVisitor extends ASTVisitor {
+ public boolean preVisit2(ASTNode node) {
+ if (attributes.containsKey(IMarker.LINE_NUMBER)) return false;
+ if (node instanceof org.eclipse.jdt.core.dom.MethodDeclaration) {
+ try {
+ String src1 = node.toString().replaceAll(" ", "");
+ src1 = src1.substring(0, src1.lastIndexOf("\n"));
+ String src2 = method.getSource().replaceAll(" |\t|\r", "");
+ return (src1.equals(src2));
+ } catch (JavaModelException e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+ ASTVisitor visitor = new MyASTVisitor();
try {
Statement statement = alias.getOccurrencePoint().getStatement();
- final ICompilationUnit unit = method.getCompilationUnit();
- final String source = unit.getSource();
+ final String source = method.getCompilationUnit().getSource();
switch (alias.getAliasType()) {
- // ���\�b�h�ւ̓���
+ // note: ���\�b�h�ւ̓���
case FORMAL_PARAMETER: {
- ISourceRange range = method.getSourceRange();
- parser.setSourceRange(range.getOffset(), range.getLength());
final int index = alias.getIndex();
- visitor = new ASTVisitor() {
+ visitor = new MyASTVisitor() {
@Override
- public boolean visit(MethodDeclaration node) {
+ public boolean visit(org.eclipse.jdt.core.dom.MethodDeclaration node) {
Object obj = node.parameters().get(index);
if (obj instanceof SingleVariableDeclaration) {
+ int lineNo = cUnit.getLineNumber(node.getStartPosition());
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);
+ attributes.put(IMarker.LINE_NUMBER, lineNo);
}
return false;
}
@@ -165,23 +175,73 @@
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() {
+ visitor = new MyASTVisitor() {
@Override
public boolean visit(org.eclipse.jdt.core.dom.FieldAccess node) {
+ int lineNo = cUnit.getLineNumber(node.getStartPosition());
+ if (lineNo != alias.getLineNo()) return true;
String name1 = node.getName().toString();
String name2 = fa.getFieldName();
name2 = name2.substring(name2.lastIndexOf(".") + 1);
- if (!(name1.equals(name2))) return false;
+ if (!(name1.equals(name2))) return true;
int start = node.getStartPosition();
+ attributes.put(IMarker.CHAR_START, start);
if (source.startsWith("this.", start)) {
- attributes.put(IMarker.CHAR_START, start);
- attributes.put(IMarker.CHAR_END, start + "this".length());
+ attributes.put(IMarker.CHAR_END, start + "this".length());
+ } else {
+ attributes.put(IMarker.CHAR_END, start + node.getLength());
}
+ attributes.put(IMarker.LINE_NUMBER, lineNo);
return false;
}
- };
+ @Override
+ public boolean visit(org.eclipse.jdt.core.dom.ArrayAccess node) {
+ int lineNo = cUnit.getLineNumber(node.getStartPosition());
+ if (lineNo != alias.getLineNo()) return true;
+ int start = node.getStartPosition();
+ attributes.put(IMarker.CHAR_START, start);
+ if (source.startsWith("this.", start)) {
+ attributes.put(IMarker.CHAR_END, start + "this".length());
+ } else {
+ attributes.put(IMarker.CHAR_END, start + node.getLength());
+ }
+ attributes.put(IMarker.LINE_NUMBER, lineNo);
+ return true;
+ }
+ @Override
+ public boolean visit(org.eclipse.jdt.core.dom.SimpleName node) {
+ // note: ���\�b�h�Ăяo���̃��V�[�o���t�B�[���h�̏ꍇ�̓t�B�[���h�A�N�Z�X�̃m�[�h���Ɨ��Ȃ�������ɂ���Œʂ�
+ int lineNo = cUnit.getLineNumber(node.getStartPosition());
+ if (lineNo != alias.getLineNo()) return true;
+ if (!(node.getParent() instanceof org.eclipse.jdt.core.dom.MethodInvocation)) return true;
+ String name1 = node.toString();
+ String name2 = fa.getFieldName();
+ name2 = name2.substring(name2.lastIndexOf(".") + 1);
+ if (!(name1.equals(name2))) return true;
+ int start = node.getStartPosition();
+ attributes.put(IMarker.CHAR_START, start);
+ if (source.startsWith("this.", start)) {
+ attributes.put(IMarker.CHAR_END, start + "this".length());
+ } else {
+ attributes.put(IMarker.CHAR_END, start + node.getLength());
+ }
+ attributes.put(IMarker.LINE_NUMBER, lineNo);
+ return false;
+ }
+ @Override
+ public boolean visit(org.eclipse.jdt.core.dom.ReturnStatement node) {
+ int lineNo = cUnit.getLineNumber(node.getStartPosition());
+ int start = node.getExpression().getStartPosition();
+ attributes.put(IMarker.CHAR_START, start);
+ if (source.startsWith("this.", start)) {
+ attributes.put(IMarker.CHAR_END, start + "this".length());
+ } else {
+ attributes.put(IMarker.CHAR_END, start + node.getExpression().getLength());
+ }
+ attributes.put(IMarker.LINE_NUMBER, lineNo);
+ return false;
+ }
+ };
}
return visitor;
}
@@ -189,21 +249,41 @@
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() {
+ visitor = new MyASTVisitor() {
@Override
public boolean visit(org.eclipse.jdt.core.dom.MethodInvocation node) {
+ int lineNo = cUnit.getLineNumber(node.getStartPosition());
+ if (lineNo != alias.getLineNo()) return true;
String name1 = node.getName().toString();
String name2 = calledMe.getCallerSideSignature();
- name2 = name2.substring(name2.lastIndexOf(".") + 1, name2.indexOf("("));
- if (!(name1.equals(name2))) return false;
+ name1 += "(";
+ name2 = name2.substring(0, name2.indexOf("(") + 1);
+ name2 = name2.substring(name2.lastIndexOf(".") + 1);
+ if (!(name1.equals(name2))) return true;
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);
+ attributes.put(IMarker.LINE_NUMBER, lineNo);
+ return false;
+ }
+ @Override
+ public boolean visit(org.eclipse.jdt.core.dom.ClassInstanceCreation node) {
+ int lineNo = cUnit.getLineNumber(node.getStartPosition());
+ if (lineNo != alias.getLineNo()) return true;
+ String name1 = node.toString();
+ name1 = name1.substring("new ".length(), name1.indexOf("(") + 1);
+ String name2 = calledMe.getCallerSideSignature();
+ name2 = name2.substring(0, name2.indexOf("(") + 1);
+ System.out.println(name1);
+ System.out.println(name2);
+ if (!(name1.equals(name2))) return true;
+ int start = node.getStartPosition();
+ int end = start + node.getLength();
+ attributes.put(IMarker.CHAR_START, start);
+ attributes.put(IMarker.CHAR_END, end);
+ attributes.put(IMarker.LINE_NUMBER, lineNo);
return false;
}
};
@@ -211,41 +291,46 @@
return visitor;
}
case CONSTRACTOR_INVOCATION: {
+ // note: �R���X�g���N�^�Ăяo���̍ۂ��G�C���A�X�^�C�v��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() {
+ visitor = new MyASTVisitor() {
@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);
+ public boolean visit(org.eclipse.jdt.core.dom.ClassInstanceCreation node) {
+ int lineNo = cUnit.getLineNumber(node.getStartPosition());
+ if (lineNo != alias.getLineNo()) return true;
+ String name1 = node.toString();
+ name1 = name1.substring("new ".length(), name1.indexOf("(") + 1);
+ String name2 = calledMe.getCallerSideSignature();
+ name2 = name2.substring(0, name2.indexOf("(") + 1);
+ System.out.println(name1);
+ System.out.println(name2);
+ if (!(name1.equals(name2))) return true;
+ int start = node.getStartPosition();
+ int end = start + node.getLength();
+ attributes.put(IMarker.CHAR_START, start);
+ attributes.put(IMarker.CHAR_END, end);
+ attributes.put(IMarker.LINE_NUMBER, lineNo);
return false;
}
};
}
return visitor;
}
- // �ǐՃI�u�W�F�N�g�̐�ւ�
+ // note: �ǐՃ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() {
+ visitor = new MyASTVisitor() {
@Override
public boolean visit(org.eclipse.jdt.core.dom.FieldAccess node) {
+ int lineNo = cUnit.getLineNumber(node.getStartPosition());
+ if (lineNo != alias.getLineNo()) return true;
String name1 = node.getName().toString();
String name2 = fa.getFieldName();
name2 = name2.substring(name2.lastIndexOf(".") + 1);
- if (!(name1.equals(name2))) return false;
+ if (!(name1.equals(name2))) return true;
int start = node.getStartPosition();
int end = start + node.getLength();
if (source.startsWith("this.", start)) {
@@ -254,55 +339,171 @@
attributes.put(IMarker.CHAR_START, start);
}
attributes.put(IMarker.CHAR_END, end);
+ attributes.put(IMarker.LINE_NUMBER, lineNo);
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();
+ public boolean visit(org.eclipse.jdt.core.dom.ArrayAccess node) {
+ int lineNo = cUnit.getLineNumber(node.getStartPosition());
+ if (lineNo != alias.getLineNo()) return true;
+ int start = node.getStartPosition();
+ int end = start + node.getArray().toString().length();
+ 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);
+ attributes.put(IMarker.LINE_NUMBER, lineNo);
+ return false;
+ }
+ @Override
+ public boolean visit(org.eclipse.jdt.core.dom.SimpleName node) {
+ // note: ���\�b�h�Ăяo���̃��V�[�o���t�B�[���h�̏ꍇ�̓t�B�[���h�A�N�Z�X�̃m�[�h���Ɨ��Ȃ�������ɂ���Œʂ�
+ int lineNo = cUnit.getLineNumber(node.getStartPosition());
+ if (lineNo != alias.getLineNo()) return true;
+ if (!(node.getParent() instanceof org.eclipse.jdt.core.dom.MethodInvocation)) return true;
+ String name1 = node.toString();
String name2 = fa.getFieldName();
name2 = name2.substring(name2.lastIndexOf(".") + 1);
- if (!(name1.equals(name2))) return false;
+ if (!(name1.equals(name2))) return true;
int start = node.getStartPosition();
int end = start + node.getLength();
- // end = start + source.substring(start, end).lastIndexOf(".");
+ 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);
+ attributes.put(IMarker.LINE_NUMBER, lineNo);
+ return false;
+ }
+ @Override
+ public boolean visit(org.eclipse.jdt.core.dom.ReturnStatement node) {
+ int lineNo = cUnit.getLineNumber(node.getStartPosition());
+ int start = node.getExpression().getStartPosition();
+ int end = start + node.getExpression().getLength();
attributes.put(IMarker.CHAR_START, start);
attributes.put(IMarker.CHAR_END, end);
+ attributes.put(IMarker.LINE_NUMBER, lineNo);
return false;
}
};
}
return visitor;
}
- case ARRAY_ELEMENT:
- break;
- case ARRAY:
- break;
- // ���\�b�h����̏o��
+ case CONTAINER: {
+ if (statement instanceof FieldAccess) {
+ final FieldAccess fa = (FieldAccess)statement;
+ visitor = new MyASTVisitor() {
+ @Override
+ public boolean visit(org.eclipse.jdt.core.dom.QualifiedName node) {
+ int lineNo = cUnit.getLineNumber(node.getStartPosition());
+ if (lineNo != alias.getLineNo()) return true;
+ String name1 = node.getName().toString();
+ String name2 = fa.getFieldName();
+ name2 = name2.substring(name2.lastIndexOf(".") + 1);
+ System.out.println(name1);
+ System.out.println(name2);
+ if (!(name1.equals(name2))) return true;
+ 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);
+ attributes.put(IMarker.LINE_NUMBER, lineNo);
+ return false;
+ }
+ };
+ }
+ return visitor;
+ }
+ case ARRAY_ELEMENT: {
+ // note: �z��̃Z�b�g�ƃQ�b�g�̃g���[�X�ɂ͍s�ԍ���z���L�^����Ă��Ȃ�
+ if (statement instanceof ArrayAccess) {
+ final ArrayAccess aa = (ArrayAccess)statement;
+ visitor = new MyASTVisitor() {
+ @Override
+ public boolean visit(org.eclipse.jdt.core.dom.ArrayAccess node) {
+ int index = Integer.parseInt(node.getIndex().toString());
+ if (index != aa.getIndex()) return true;
+ int lineNo = cUnit.getLineNumber(node.getStartPosition());
+ 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);
+ attributes.put(IMarker.LINE_NUMBER, lineNo);
+ return false;
+ }
+ };
+ }
+ return visitor;
+ }
+ case ARRAY: {
+ // note: �z��̃Z�b�g�ƃQ�b�g�̃g���[�X�ɂ͍s�ԍ���z���L�^����Ă��Ȃ�
+ if (statement instanceof ArrayAccess) {
+ final ArrayAccess aa = (ArrayAccess)statement;
+ visitor = new MyASTVisitor() {
+ @Override
+ public boolean visit(org.eclipse.jdt.core.dom.ArrayAccess node) {
+ int index = Integer.parseInt(node.getIndex().toString());
+ if (index != aa.getIndex()) return true;
+ int lineNo = cUnit.getLineNumber(node.getStartPosition());
+ int start = node.getStartPosition();
+ int end = start + node.getArray().toString().length();
+ 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);
+ attributes.put(IMarker.LINE_NUMBER, lineNo);
+ return false;
+ }
+ };
+ }
+ return visitor;
+ }
+ case ARRAY_CREATE: {
+ if (statement instanceof ArrayCreate) {
+ final ArrayCreate ac = (ArrayCreate)statement;
+ visitor = new MyASTVisitor() {
+ @Override
+ public boolean visit(org.eclipse.jdt.core.dom.ArrayCreation node) {
+// int lineNo = cUnit.getLineNumber(node.getStartPosition());
+// if (lineNo != ac.getLineNo()) return true;
+// int start = node.getStartPosition();
+// int end = start + node.getLength();
+// attributes.put(IMarker.CHAR_START, start);
+// attributes.put(IMarker.CHAR_END, end);
+// attributes.put(IMarker.LINE_NUMBER, lineNo);
+ return false;
+ }
+ };
+ }
+ return visitor;
+ }
+ // note: ���\�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() {
+ visitor = new MyASTVisitor() {
@Override
public boolean visit(org.eclipse.jdt.core.dom.MethodInvocation node) {
+ int lineNo = cUnit.getLineNumber(node.getStartPosition());
+ if (lineNo != alias.getLineNo()) return true;
String name1 = node.getName().toString();
String name2 = calledMe.getCallerSideSignature();
- name2 = name2.substring(name2.lastIndexOf(".") + 1, name2.indexOf("("));
- if (!(name1.equals(name2))) return false;
+ name2 = name2.substring(0, name2.indexOf("("));
+ name2 = name2.substring(name2.lastIndexOf(".") + 1);
+ if (!(name1.equals(name2))) return true;
Object obj = node.arguments().get(index);
if (obj instanceof Expression) {
Expression argument = (Expression)obj;
@@ -310,6 +511,7 @@
int end = start + argument.getLength();
attributes.put(IMarker.CHAR_START, start);
attributes.put(IMarker.CHAR_END, end);
+ attributes.put(IMarker.LINE_NUMBER, lineNo);
}
return false;
}
@@ -321,20 +523,22 @@
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() {
+ visitor = new MyASTVisitor() {
@Override
public boolean visit(org.eclipse.jdt.core.dom.MethodInvocation node) {
+ int lineNo = cUnit.getLineNumber(node.getStartPosition());
+ if (lineNo != alias.getLineNo()) return true;
String name1 = node.getName().toString();
String name2 = calledMe.getCallerSideSignature();
- name2 = name2.substring(name2.lastIndexOf(".") + 1, name2.indexOf("("));
- if (!(name1.equals(name2))) return false;
+ name2 = name2.substring(0, name2.indexOf("("));
+ name2 = name2.substring(name2.lastIndexOf(".") + 1);
+ if (!(name1.equals(name2))) return true;
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);
+ attributes.put(IMarker.LINE_NUMBER, lineNo);
return false;
}
};
@@ -343,173 +547,26 @@
}
case RETURN_VALUE:
// note: �ǂ��Ń��^�[���������̏��(�s�ԍ���)���g���[�X�ɂ͋L�^����Ă��Ȃ�
- ISourceRange range = method.getSourceRange();
- parser.setSourceRange(range.getOffset(), range.getLength());
- visitor = new ASTVisitor(){
+ visitor = new MyASTVisitor(){
public boolean visit(org.eclipse.jdt.core.dom.ReturnStatement node) {
+ int lineNo = cUnit.getLineNumber(node.getStartPosition());
int start = node.getStartPosition();
int end = start + node.getLength();
attributes.put(IMarker.CHAR_START, start);
attributes.put(IMarker.CHAR_END, end);
+ attributes.put(IMarker.LINE_NUMBER, lineNo);
return false;
}
};
return visitor;
}
- } catch (JavaModelException | BadLocationException e) {
+ } catch (JavaModelException 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) {
+ private void setAttributesForMethodExecution(final Map attributes, MethodExecution methodExecution, IFile file, int lineNo, String markerId) {
try {
FileEditorInput input = new FileEditorInput(file);
FileDocumentProvider provider = new FileDocumentProvider();
@@ -523,11 +580,34 @@
} 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);
+ final IMethod method = JavaEditorOperator.findIMethod(methodExecution, type);
+ ASTParser parser = ASTParser.newParser(AST.JLS10);
+ ICompilationUnit unit = method.getCompilationUnit();
+ parser.setSource(unit);
+ ASTNode node = parser.createAST(new NullProgressMonitor());
+ if (node instanceof CompilationUnit) {
+ final CompilationUnit cUnit = (CompilationUnit)node;
+ node.accept(new ASTVisitor() {
+ @Override
+ public boolean visit(MethodDeclaration node) {
+ try {
+ String src1 = node.toString().replaceAll(" ", "");
+ src1 = src1.substring(0, src1.lastIndexOf("\n"));
+ String src2 = method.getSource().replaceAll(" |\t|\r", "");
+ if (!(src1.equals(src2))) return false;
+ int start = node.getStartPosition();
+ int end = start + node.toString().indexOf(")") + 1;
+ int lineNo = cUnit.getLineNumber(node.getStartPosition());
+ attributes.put(IMarker.CHAR_START, start);
+ attributes.put(IMarker.CHAR_END, end);
+ attributes.put(IMarker.LINE_NUMBER, lineNo);
+ } catch (JavaModelException e) {
+ e.printStackTrace();
+ }
+ return true;
+ }
+ });
+ }
}
} catch (CoreException | BadLocationException e) {
e.printStackTrace();
diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaRelatedAliasCollector.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaRelatedAliasCollector.java
index 6a46d22..5438190 100644
--- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaRelatedAliasCollector.java
+++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaRelatedAliasCollector.java
@@ -17,20 +17,42 @@
@Override
public void addAlias(Alias alias) {
String objId = alias.getObjectId();
- if (srcSideIdList.contains(objId)) {
+ String srcOrDst = "";
+ if (srcSideIdList.contains(objId) && !(dstSideIdList.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)) {
+ srcOrDst = "Src ";
+ } else if (dstSideIdList.contains(objId) && !(srcSideIdList.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());
+ srcOrDst = "Dst ";
+ } else if (srcSideIdList.contains(objId) && dstSideIdList.contains(objId)) {
+ boolean hasSrcSide = false;
+ for (Alias ra : srcSideRelatedAliases) {
+ if (ra.getObjectId().equals(objId)) {
+ hasSrcSide = true;
+ break;
+ }
+ }
+ if (!hasSrcSide) {
+ srcSideRelatedAliases.add(alias);
+ srcOrDst = "Src ";
+ } else {
+ dstSideRelatedAliases.add(alias);
+ srcOrDst = "Dst ";
+ }
+ }
+
+ try {
+ System.out.println(srcOrDst + alias.getAliasType() + ": " + alias.getMethodSignature() + " line" + alias.getLineNo() + " index" + alias.getIndex());
+ } catch (Exception e) {
+ System.out.println(srcOrDst + alias.getAliasType() + ": " + alias.getMethodSignature());
}
}