diff --git a/src/org/ntlab/traceDebugger/JavaEditorOperator.java b/src/org/ntlab/traceDebugger/JavaEditorOperator.java index 8b7c7c8..9dace41 100644 --- a/src/org/ntlab/traceDebugger/JavaEditorOperator.java +++ b/src/org/ntlab/traceDebugger/JavaEditorOperator.java @@ -36,6 +36,7 @@ public class JavaEditorOperator { // private static List markers = new ArrayList<>(); + private static String previousJavaProjectPath = ""; /** * �����œn����meCaller���ɂ���methodExecution����`����Ă���N���X�̃\�[�X�R�[�h��Ώ�Eclipse�̃G�f�B�^�ŊJ������ @@ -227,22 +228,48 @@ declaringClassName = declaringClassName.replace(".", ""); return findIType(methodExecution, declaringClassName); } - + public static IType findIType(MethodExecution methodExecution, String declaringClassName) { String projectPath = getLoaderPath(methodExecution, declaringClassName); IType type = null; if (projectPath != null) { IJavaProject javaProject = findJavaProject(projectPath); if (javaProject != null) { + previousJavaProjectPath = projectPath; try { type = javaProject.findType(declaringClassName); } catch (JavaModelException e) { e.printStackTrace(); } } + } else { + IJavaProject javaProject = findJavaProject(previousJavaProjectPath); + if (javaProject != null) { + try { + type = javaProject.findType(declaringClassName); + } catch (JavaModelException e) { + e.printStackTrace(); + } + } } return type; } + +// public static IType findIType(MethodExecution methodExecution, String declaringClassName) { +// String projectPath = getLoaderPath(methodExecution, declaringClassName); +// IType type = null; +// if (projectPath != null) { +// IJavaProject javaProject = findJavaProject(projectPath); +// if (javaProject != null) { +// try { +// type = javaProject.findType(declaringClassName); +// } catch (JavaModelException e) { +// e.printStackTrace(); +// } +// } +// } +// return type; +// } private static String getLoaderPath(MethodExecution methodExecution, String declaringClassName) { TraceJSON traceJSON = (TraceJSON)TraceDebuggerPlugin.getAnalyzer().getTrace(); diff --git a/src/org/ntlab/traceDebugger/Variable.java b/src/org/ntlab/traceDebugger/Variable.java index 00afc17..f927176 100644 --- a/src/org/ntlab/traceDebugger/Variable.java +++ b/src/org/ntlab/traceDebugger/Variable.java @@ -188,14 +188,18 @@ // FieldUpdate fieldUpdate = trace.getRecentlyFieldUpdate(thisObjData.getId(), fieldName, tp); // FieldUpdate fieldUpdate = trace.getFieldUpdate(id, fullyQualifiedFieldName, before, isReturned); TracePoint updateTracePoint = trace.getFieldUpdateTracePoint(id, fullyQualifiedFieldName, before, isReturned); - if (updateTracePoint == null) continue; - FieldUpdate fieldUpdate = (FieldUpdate)updateTracePoint.getStatement(); - - // �t�B�[���h��ID��Type���擾(String) - String fieldObjId = (fieldUpdate != null) ? fieldUpdate.getValueObjId() : "0"; - String fieldType = (fieldUpdate != null) ? fieldUpdate.getValueClassName() : "---"; - Variable fieldData = new Variable(fieldName, className, id, fieldType, fieldObjId, updateTracePoint, before, isReturned); - this.addChild(fieldData); +// if (updateTracePoint == null) continue; + if (updateTracePoint != null) { + FieldUpdate fieldUpdate = (FieldUpdate)updateTracePoint.getStatement(); + // �t�B�[���h��ID��Type���擾(String) + String fieldObjId = (fieldUpdate != null) ? fieldUpdate.getValueObjId() : "0"; + String fieldType = (fieldUpdate != null) ? fieldUpdate.getValueClassName() : "---"; + Variable fieldData = new Variable(fieldName, className, id, fieldType, fieldObjId, updateTracePoint, before, isReturned); + this.addChild(fieldData); + } else { + Variable fieldData = new Variable(fieldName, className, id, "?", "???", updateTracePoint, before, isReturned); + this.addChild(fieldData); + } } } catch (JavaModelException e) { e.printStackTrace(); diff --git a/src/org/ntlab/traceDebugger/VariableView.java b/src/org/ntlab/traceDebugger/VariableView.java index 74f4a51..6bdf355 100644 --- a/src/org/ntlab/traceDebugger/VariableView.java +++ b/src/org/ntlab/traceDebugger/VariableView.java @@ -15,6 +15,8 @@ import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; +import org.eclipse.jface.dialogs.InputDialog; +import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITreeViewerListener; @@ -47,6 +49,7 @@ private TreeViewer viewer; private IAction jumpAction; private IAction deltaAction; + private IAction deltaActionForCollection; private Variable selectedVariable; private Variables variables = Variables.getInstance(); public static final String ID = "org.ntlab.traceDebugger.variableView"; @@ -147,42 +150,30 @@ deltaAction = new Action() { @Override public void run() { - AbstractAnalyzer analyzer = TraceDebuggerPlugin.getAnalyzer(); - if (analyzer instanceof DeltaExtractionAnalyzer) { - DeltaExtractionAnalyzer deltaAnalyzer = (DeltaExtractionAnalyzer)analyzer; - IWorkbench workbench = PlatformUI.getWorkbench(); - IWorkbenchPage workbenchPage = workbench.getActiveWorkbenchWindow().getActivePage(); - try { - // note: ����r���[�𕡐��J���e�X�g - String subIdWithNewView = deltaAnalyzer.getNextDeltaMarkerSubId(); - DeltaMarkerView newDeltaMarkerView = (DeltaMarkerView)workbenchPage.showView(DeltaMarkerView.ID, subIdWithNewView, IWorkbenchPage.VIEW_ACTIVATE); - deltaAnalyzer.extractDelta(selectedVariable, newDeltaMarkerView, subIdWithNewView); - TracePoint coordinatorPoint = newDeltaMarkerView.getCoordinatorPoint(); - DebuggingController controller = DebuggingController.getInstance(); - controller.jumpToTheTracePoint(coordinatorPoint, false); - - DeltaMarkerManager deltaMarkerManager = newDeltaMarkerView.getDeltaMarkerManager(); - markAndExpandVariablesByDeltaMarkers(deltaMarkerManager.getMarkers()); - MethodExecution coordinatorME = coordinatorPoint.getMethodExecution(); - MethodExecution bottomME = newDeltaMarkerView.getBottomPoint().getMethodExecution(); - CallStackView callStackView = (CallStackView)getOtherView(CallStackView.ID); - callStackView.highlight(coordinatorME); - CallTreeView callTreeView = (CallTreeView)getOtherView(CallTreeView.ID); - callTreeView.setSubId(subIdWithNewView); -// callTreeView.update(coordinatorME, bottomME); -// callTreeView.highlight(coordinatorME); - callTreeView.update(deltaMarkerManager); - callTreeView.highlight(coordinatorME); - TracePointsView tracePointsView = (TracePointsView)getOtherView(TracePointsView.ID); - tracePointsView.addTracePoint(coordinatorPoint); - } catch (PartInitException e) { - e.printStackTrace(); - } - } + delta(selectedVariable, false); } }; deltaAction.setText("Extract Delta"); deltaAction.setToolTipText("Extract Delta"); + + deltaActionForCollection = new Action() { + @Override + public void run() { + InputDialog inputContainerIdDialog = new InputDialog(null, "Extract Delta for Collection", "Input cotainer id", "87478208", null); + if (inputContainerIdDialog.open() != InputDialog.OK) return; + String containerId = inputContainerIdDialog.getValue(); + InputDialog inputContainerTypeDialog = new InputDialog(null, "Extract Delta for Collection", "Input cotainer type", "java.util.LinkedHashSet", null); + if (inputContainerTypeDialog.open() != InputDialog.OK) return; + String containerType = inputContainerTypeDialog.getValue(); + String valueId = selectedVariable.getId(); + String valueType = selectedVariable.getClassName(); + TracePoint tp = DebuggingController.getInstance().getCurrentTp(); + Variable variable = new Variable("tmp", containerType, containerId, valueType, valueId, tp, false); + delta(variable, true); + } + }; + deltaActionForCollection.setText("Extract Delta for Collection"); + deltaActionForCollection.setToolTipText("Extract Delta for Collection"); } private void createToolBar() { @@ -201,6 +192,7 @@ public void menuAboutToShow(IMenuManager manager) { manager.add(jumpAction); manager.add(deltaAction); + manager.add(deltaActionForCollection); manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); } }); @@ -215,6 +207,42 @@ viewer.refresh(); } + private void delta(Variable variable, boolean isCollection) { + AbstractAnalyzer analyzer = TraceDebuggerPlugin.getAnalyzer(); + if (analyzer instanceof DeltaExtractionAnalyzer) { + DeltaExtractionAnalyzer deltaAnalyzer = (DeltaExtractionAnalyzer)analyzer; + IWorkbench workbench = PlatformUI.getWorkbench(); + IWorkbenchPage workbenchPage = workbench.getActiveWorkbenchWindow().getActivePage(); + try { + // note: ����r���[�𕡐��J���e�X�g + String subIdWithNewView = deltaAnalyzer.getNextDeltaMarkerSubId(); + DeltaMarkerView newDeltaMarkerView = (DeltaMarkerView)workbenchPage.showView(DeltaMarkerView.ID, subIdWithNewView, IWorkbenchPage.VIEW_ACTIVATE); +// deltaAnalyzer.extractDelta(selectedVariable, newDeltaMarkerView, subIdWithNewView); + deltaAnalyzer.extractDelta(variable, isCollection, newDeltaMarkerView, subIdWithNewView); + TracePoint coordinatorPoint = newDeltaMarkerView.getCoordinatorPoint(); + DebuggingController controller = DebuggingController.getInstance(); + controller.jumpToTheTracePoint(coordinatorPoint, false); + + DeltaMarkerManager deltaMarkerManager = newDeltaMarkerView.getDeltaMarkerManager(); + markAndExpandVariablesByDeltaMarkers(deltaMarkerManager.getMarkers()); + MethodExecution coordinatorME = coordinatorPoint.getMethodExecution(); + MethodExecution bottomME = newDeltaMarkerView.getBottomPoint().getMethodExecution(); + CallStackView callStackView = (CallStackView)getOtherView(CallStackView.ID); + callStackView.highlight(coordinatorME); + CallTreeView callTreeView = (CallTreeView)getOtherView(CallTreeView.ID); + callTreeView.setSubId(subIdWithNewView); +// callTreeView.update(coordinatorME, bottomME); +// callTreeView.highlight(coordinatorME); + callTreeView.update(deltaMarkerManager); + callTreeView.highlight(coordinatorME); + TracePointsView tracePointsView = (TracePointsView)getOtherView(TracePointsView.ID); + tracePointsView.addTracePoint(coordinatorPoint); + } catch (PartInitException e) { + e.printStackTrace(); + } + } + } + public void updateVariablesByTracePoint(TracePoint tp, boolean isReturned) { updateVariablesByTracePoint(null, tp, isReturned); } diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java index afd9b83..2b3b3e4 100644 --- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java +++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaExtractionAnalyzer.java @@ -8,6 +8,8 @@ import org.eclipse.ui.IViewPart; 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; @@ -45,7 +47,7 @@ return extractedStructure; } - public void extractDelta(Variable variable, DeltaMarkerView deltaMarkerView, String deltaMarkerViewSubId) { + public void extractDelta(Variable variable, boolean isColection, DeltaMarkerView deltaMarkerView, String deltaMarkerViewSubId) { addDeltaMarkerView(deltaMarkerViewSubId, deltaMarkerView); String srcId = variable.getContainerId(); String srcClassName = variable.getContainerClassName(); @@ -53,6 +55,7 @@ String dstClassName = variable.getClassName(); TracePoint before = variable.getBeforeTracePoint(); Reference reference = new Reference(srcId, dstId, srcClassName, dstClassName); + reference.setCollection(isColection); // �f���^���o DeltaRelatedAliasCollector aliasCollector = new DeltaRelatedAliasCollector(srcId, dstId); @@ -78,53 +81,74 @@ } childMe = me; me = me.getParent(); -// if (coordinator.equals(me)) { -// TracePoint coordinatorPoint = childMe.getCallerTracePoint(); -// deltaMarkerView.setCoordinatorPoint(coordinatorPoint); -// break; -// } } // �f���^���o�̌��ʂ����Ƀ\�[�X�R�[�h�𔽓]�\������ DeltaMarkerManager mgr = deltaMarkerView.getDeltaMarkerManager(); - mark(mgr, coordinator, aliasCollector, bottomPoint); + mark(mgr, coordinator, aliasCollector, bottomPoint, reference); deltaMarkerView.update(); } - + 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); + if (statement instanceof FieldUpdate) { + FieldUpdate fu = (FieldUpdate)statement; + if (fu.getContainerObjId().equals(reference.getSrcObjectId()) + && fu.getValueObjId().equals(reference.getDstObjectId())) { + return new TracePoint(methodExecution, i); + } + } else if (statement instanceof MethodInvocation) { + MethodInvocation mi = (MethodInvocation)statement; + MethodExecution me = mi.getCalledMethodExecution(); + if (me.getThisObjId().equals(reference.getSrcObjectId())) { + for (ObjectReference arg : me.getArguments()) { + if (arg.getId().equals(reference.getDstObjectId())) { + return new TracePoint(methodExecution, i); + } + } + } } } return null; } + +// 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); +// } +// } +// return null; +// } - private void mark(DeltaMarkerManager mgr, MethodExecution coordinator, DeltaRelatedAliasCollector aliasCollector, TracePoint bottomPoint) { + private void mark(DeltaMarkerManager mgr, MethodExecution coordinator, DeltaRelatedAliasCollector aliasCollector, TracePoint bottomPoint, Reference creationReference) { int srcSideCnt = 1; int dstSideCnt = 1; - mgr.markAndOpenJavaFile(coordinator, -1 , "Coordinator", DeltaMarkerManager.COORDINATOR_DELTA_MARKER); + mgr.markAndOpenJavaFileForCoordinator(coordinator, "Coordinator", DeltaMarkerManager.COORDINATOR_DELTA_MARKER); List relatedAliases = aliasCollector.getRelatedAliases(); Collections.reverse(relatedAliases); for (Alias alias : relatedAliases) { String side = aliasCollector.resolveSideInTheDelta(alias); if (side.contains(DeltaRelatedAliasCollector.SRC_SIDE)) { String message = String.format("SrcSide%03d", srcSideCnt); - mgr.markAndOpenJavaFile(alias, message, DeltaMarkerManager.SRC_SIDE_DELTA_MARKER); + mgr.markAndOpenJavaFileForAlias(alias, message, DeltaMarkerManager.SRC_SIDE_DELTA_MARKER); srcSideCnt++; } else if (side.contains(DeltaRelatedAliasCollector.DST_SIDE)) { String message = String.format("DstSide%03d", dstSideCnt); - mgr.markAndOpenJavaFile(alias, message, DeltaMarkerManager.DST_SIDE_DELTA_MARKER); + mgr.markAndOpenJavaFileForAlias(alias, message, DeltaMarkerManager.DST_SIDE_DELTA_MARKER); dstSideCnt++; } } - mgr.markAndOpenJavaFile(bottomPoint, "CreationPoint", DeltaMarkerManager.BOTTOM_DELTA_MARKER); + mgr.markAndOpenJavaFileForCreationPoint(bottomPoint, creationReference, "CreationPoint", DeltaMarkerManager.BOTTOM_DELTA_MARKER); } private void reset() { diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java index 7b7d6b5..9fde930 100644 --- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java +++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java @@ -33,6 +33,7 @@ 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.Reference; import org.ntlab.traceAnalysisPlatform.tracer.trace.Statement; import org.ntlab.traceAnalysisPlatform.tracer.trace.TracePoint; import org.ntlab.traceDebugger.JavaEditorOperator; @@ -115,32 +116,26 @@ return null; } - public void markAndOpenJavaFile(Alias alias, String message, String markerId) { + public void markAndOpenJavaFileForAlias(Alias alias, String message, String markerId) { IFile file = JavaEditorOperator.findIFile(alias.getMethodExecution()); IMarker marker = addMarker(alias, file, message, markerId); JavaEditorOperator.markAndOpenJavaFile(marker); } - - public void markAndOpenJavaFile(TracePoint tracePoint, String message, String markerId) { - MethodExecution me = tracePoint.getMethodExecution(); - Statement statement = tracePoint.getStatement(); - String objectId = null; - String objectType = null; - if (statement instanceof FieldUpdate) { - FieldUpdate fu = ((FieldUpdate)statement); - objectId = fu.getContainerObjId() + " -> " + fu.getValueObjId(); - objectType = fu.getContainerClassName() + " -> " + fu.getValueClassName(); - } + + public void markAndOpenJavaFileForCreationPoint(TracePoint creationPoint, Reference reference, String message, String markerId) { + MethodExecution me = creationPoint.getMethodExecution(); + String objectId = reference.getSrcObjectId() + " -> " + reference.getDstObjectId(); + String objectType = reference.getSrcClassName() + " -> " + reference.getDstClassName(); IFile file = JavaEditorOperator.findIFile(me); - IMarker marker = addMarker(tracePoint, file, message, objectId, objectType, markerId); + IMarker marker = addMarkerForCreationPoint(creationPoint, file, message, objectId, objectType, markerId); JavaEditorOperator.markAndOpenJavaFile(marker); } - public void markAndOpenJavaFile(MethodExecution methodExecution, int lineNo, String message, String markerId) { + public void markAndOpenJavaFileForCoordinator(MethodExecution methodExecution, String message, String markerId) { IFile file = JavaEditorOperator.findIFile(methodExecution); String objectId = methodExecution.getThisObjId(); String objectType = methodExecution.getThisClassName(); - IMarker marker = addMarker(methodExecution, lineNo, file, message, objectId, objectType, markerId); + IMarker marker = addMarkerForCoordinator(methodExecution, file, message, objectId, objectType, markerId); JavaEditorOperator.markAndOpenJavaFile(marker); } @@ -164,13 +159,13 @@ return null; } - private IMarker addMarker(TracePoint tp, IFile file, String message, String objectId, String objectType, String markerId) { + private IMarker addMarkerForCreationPoint(TracePoint tp, IFile file, String message, String objectId, String objectType, String markerId) { try { MethodExecution me = tp.getMethodExecution(); int lineNo = tp.getStatement().getLineNo(); IMarker marker = file.createMarker(markerId); Map attributes = new HashMap<>(); - setAttributesForMethodExecution(attributes, me, file, lineNo, markerId); + setAttributesForCreationPoint(attributes, me, file, lineNo, markerId); attributes.put(IMarker.MESSAGE, message); attributes.put(IMarker.TRANSIENT, true); attributes.put(DELTA_MARKER_ATR_DATA, tp); @@ -185,11 +180,11 @@ return null; } - private IMarker addMarker(MethodExecution me, int lineNo, IFile file, String message, String objectId, String objectType, String markerId) { + private IMarker addMarkerForCoordinator(MethodExecution me, IFile file, String message, String objectId, String objectType, String markerId) { try { IMarker marker = file.createMarker(markerId); Map attributes = new HashMap<>(); - setAttributesForMethodExecution(attributes, me, file, lineNo, markerId); + setAttributesForCoordinator(attributes, me, file); attributes.put(IMarker.MESSAGE, message); attributes.put(IMarker.TRANSIENT, true); attributes.put("data", me); @@ -342,7 +337,27 @@ 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) { + // note: �R���X�g���N�^�Ăяo���̈�����this������ꍇ + int lineNo = cUnit.getLineNumber(node.getStartPosition()); + if (lineNo != alias.getLineNo()) return true; + String name1 = node.toString(); + name1 = name1.substring(name1.indexOf("(")); + String name2 = fa.getFieldName(); + name2 = name2.substring(name2.lastIndexOf(".") + 1); + if (!(name1.contains(name2))) return true; + int start = node.getStartPosition(); + int end = start; + if (source.startsWith("this.", start)) { + end = start + "this".length(); + } + 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()); @@ -415,7 +430,6 @@ name2 = name2.substring(0, name2.indexOf("(") + 1); name2 = name2.substring(name2.lastIndexOf(".") + 1); if (!(name1.equals(name2))) return true; -// String receiverName = node.getExpression().toString(); Expression expression = node.getExpression(); String receiverName = ""; if (expression != null) { @@ -426,8 +440,8 @@ start += ("this." + receiverName + ".").length(); } else if (source.startsWith("super.", start)) { start += ("super." + receiverName + ".").length(); - } else { - start += (receiverName + ".").length(); + } else if (!(receiverName.isEmpty())) { + start += (receiverName + ".").length(); } int end = node.getStartPosition() + node.getLength(); attributes.put(IMarker.CHAR_START, start); @@ -541,15 +555,37 @@ return false; } @Override - public boolean visit(org.eclipse.jdt.core.dom.ReturnStatement node) { + public boolean visit(org.eclipse.jdt.core.dom.ClassInstanceCreation node) { + // note: �R���X�g���N�^�Ăяo���̈����Ƀt�B�[���h������ꍇ int lineNo = cUnit.getLineNumber(node.getStartPosition()); - int start = node.getExpression().getStartPosition(); - int end = start + node.getExpression().getLength(); + if (lineNo != alias.getLineNo()) return true; + String name1 = node.toString(); + name1 = name1.substring(name1.indexOf("(")); + String name2 = fa.getFieldName(); + name2 = name2.substring(name2.lastIndexOf(".") + 1); + if (!(name1.contains(name2))) return true; + int start = node.getStartPosition(); + start += (node.toString().indexOf("(") + name1.indexOf(name2)); + int end = start + name2.length(); 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()); + Expression expression = node.getExpression(); + String fieldName = fa.getFieldName(); + fieldName = fieldName.substring(fieldName.lastIndexOf(".") + 1); + int start = expression.getStartPosition(); + int end = start + fieldName.length(); + attributes.put(IMarker.CHAR_START, start); + attributes.put(IMarker.CHAR_END, end); + attributes.put(IMarker.LINE_NUMBER, lineNo); + return false; + } }; } return visitor; @@ -728,64 +764,64 @@ } return visitor; } - - private void setAttributesForMethodExecution(final Map attributes, MethodExecution methodExecution, IFile file, int lineNo, String markerId) { + + private void setAttributesForCoordinator(final Map attributes, MethodExecution methodExecution, IFile file) { + // note: ���\�b�h�V�O�l�`�����n�C���C�g + IType type = JavaEditorOperator.findIType(methodExecution); + final IMethod method = JavaEditorOperator.findIMethod(methodExecution, type); + if (method == null) return; + 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 { + if (attributes.containsKey(IMarker.LINE_NUMBER)) return false; + String src1 = node.toString().replaceAll(" ", ""); + src1 = src1.substring(0, src1.lastIndexOf("\n")); + String src1Head = src1.substring(0, src1.indexOf(")") + 1); + String src2 = method.getSource().replaceAll(" |\t|\r|\n", ""); + if (!(src2.contains(src1Head))) return false; + int start = node.getStartPosition(); + int end = start + node.toString().indexOf(")") + 1; + Javadoc javadoc = node.getJavadoc(); + if (javadoc != null) { + start += javadoc.getLength(); + start += 5; // note: node.toString()�Ǝ��ۂ̃R�[�h�̃X�y�[�X���̍��������l�߂鉼���� + String tmp = node.toString().replace(javadoc.toString(), ""); + end = start + tmp.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 false; + } + }); + } + } + + private void setAttributesForCreationPoint(final 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); - final IMethod method = JavaEditorOperator.findIMethod(methodExecution, type); - if (method == null) return; - 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 { - if (attributes.containsKey(IMarker.LINE_NUMBER)) return false; - String src1 = node.toString().replaceAll(" ", ""); - src1 = src1.substring(0, src1.lastIndexOf("\n")); - String src1Head = src1.substring(0, src1.indexOf(")") + 1); - String src2 = method.getSource().replaceAll(" |\t|\r", ""); - if (!(src2.contains(src1Head))) return false; - int start = node.getStartPosition(); - int end = start + node.toString().indexOf(")") + 1; - Javadoc javadoc = node.getJavadoc(); - if (javadoc != null) { - start += javadoc.getLength(); - start += 5; // note: node.toString()�Ǝ��ۂ̃R�[�h�̃X�y�[�X���̍��������l�߂鉼���� - String tmp = node.toString().replace(javadoc.toString(), ""); - end = start + tmp.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 false; - } - }); - } - } + 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); } catch (CoreException | BadLocationException e) { e.printStackTrace(); - } - } + } + } private void deleteMarkers(List markerList) { for (IMarker marker : markerList) {