diff --git a/src/org/ntlab/traceDebugger/DeltaMarkerView.java b/src/org/ntlab/traceDebugger/DeltaMarkerView.java index d7dab09..a11c93d 100644 --- a/src/org/ntlab/traceDebugger/DeltaMarkerView.java +++ b/src/org/ntlab/traceDebugger/DeltaMarkerView.java @@ -145,40 +145,41 @@ } private void updateOtherViewsByMarker(IMarker marker) { - try { - DebuggingController controller = DebuggingController.getInstance(); - Object obj = marker.getAttribute(DeltaMarkerManager.DELTA_MARKER_ATR_DATA); - IMarker coordinator = deltaMarkerManager.getCoordinatorDeltaMarker(); - TracePoint coordinatorPoint = DeltaMarkerManager.getTracePoint(coordinator); - TracePoint jumpPoint; - MethodExecution selectionME; - boolean isReturned = false; - if (obj instanceof Alias) { - Alias alias = (Alias)obj; - jumpPoint = alias.getOccurrencePoint(); - selectionME = jumpPoint.getMethodExecution(); - Alias.AliasType type = alias.getAliasType(); - isReturned = type.equals(AliasType.METHOD_INVOCATION) - || type.equals(AliasType.CONSTRACTOR_INVOCATION); - } else if (obj instanceof TracePoint) { - jumpPoint = (TracePoint)obj; - selectionME = jumpPoint.getMethodExecution(); - } else { - jumpPoint = coordinatorPoint; - selectionME = coordinatorPoint.getMethodExecution(); + DebuggingController controller = DebuggingController.getInstance(); + IMarker coordinator = deltaMarkerManager.getCoordinatorDeltaMarker(); + TracePoint coordinatorPoint = DeltaMarkerManager.getTracePoint(coordinator); + if (marker != null) { + try { + Object obj = marker.getAttribute(DeltaMarkerManager.DELTA_MARKER_ATR_DATA); + TracePoint jumpPoint; + MethodExecution selectionME; + boolean isReturned = false; + if (obj instanceof Alias) { + Alias alias = (Alias)obj; + jumpPoint = alias.getOccurrencePoint(); + selectionME = jumpPoint.getMethodExecution(); + Alias.AliasType type = alias.getAliasType(); + isReturned = type.equals(AliasType.METHOD_INVOCATION) + || type.equals(AliasType.CONSTRACTOR_INVOCATION); + } else if (obj instanceof TracePoint) { + jumpPoint = (TracePoint)obj; + selectionME = jumpPoint.getMethodExecution(); + } else { + jumpPoint = coordinatorPoint; + selectionME = coordinatorPoint.getMethodExecution(); + } + controller.jumpToTheTracePoint(jumpPoint, isReturned); + IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + IDE.openEditor(page, marker); + CallTreeView callTreeView = ((CallTreeView)getOtherView(CallTreeView.ID)); + callTreeView.highlight(selectionME); + CallStackView callStackView = (CallStackView)getOtherView(CallStackView.ID); + callStackView.highlight(coordinatorPoint.getMethodExecution()); + VariableView variableView = (VariableView)getOtherView(VariableView.ID); + variableView.markAndExpandVariablesByDeltaMarkers(deltaMarkerManager.getMarkers()); + } catch (CoreException e) { + e.printStackTrace(); } - controller.jumpToTheTracePoint(jumpPoint, isReturned); - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - IDE.openEditor(page, marker); - - CallStackView callStackView = (CallStackView)getOtherView(CallStackView.ID); - callStackView.highlight(coordinatorPoint.getMethodExecution()); - VariableView variableView = (VariableView)getOtherView(VariableView.ID); - variableView.markAndExpandVariablesByDeltaMarkers(deltaMarkerManager.getMarkers()); - CallTreeView callTreeView = ((CallTreeView)getOtherView(CallTreeView.ID)); - callTreeView.highlight(selectionME); - } catch (CoreException e) { - e.printStackTrace(); } } diff --git a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java index e3ed809..c370343 100644 --- a/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java +++ b/src/org/ntlab/traceDebugger/analyzerProvider/DeltaMarkerManager.java @@ -406,18 +406,29 @@ attributes.put(IMarker.LINE_NUMBER, lineNo); return false; } -// @Override -// public boolean visit(org.eclipse.jdt.core.dom.VariableDeclarationStatement node) { -// int lineNo = cUnit.getLineNumber(node.getStartPosition()); -// int lineNo2 = fa.getLineNo(); -// String name1 = node.toString(); -// String name2 = fa.getFieldName(); -// System.out.println(ASTNode.nodeClassForType(node.getNodeType())); -// System.out.println("name1: " + name1 + ", name2: " + name2); -// System.out.println("line1: " + lineNo + ", line2: " + lineNo2); -// System.out.println(); -// return true; -// } + @Override + public boolean visit(org.eclipse.jdt.core.dom.IfStatement node) { + int lineNo = cUnit.getLineNumber(node.getStartPosition()); + if (lineNo != alias.getLineNo()) return true; + String fieldName = fa.getFieldName(); + fieldName = fieldName.substring(fieldName.lastIndexOf(".") + 1); + int start = node.getStartPosition(); + int end = start; + Expression expression = node.getExpression(); + if (expression != null) { + start = expression.getStartPosition(); + start += expression.toString().indexOf(fieldName); + end = start; + if (source.startsWith("this.", start - "this.".length())) { + start -= "this.".length(); + end = start + "this".length(); + } + } + attributes.put(IMarker.CHAR_START, start); + attributes.put(IMarker.CHAR_END, end); + attributes.put(IMarker.LINE_NUMBER, lineNo); + return false; + } }; } else if (statement instanceof MethodInvocation) { final MethodInvocation mi = (MethodInvocation)statement; @@ -637,7 +648,26 @@ attributes.put(IMarker.CHAR_END, end); attributes.put(IMarker.LINE_NUMBER, lineNo); return false; - } + } + @Override + public boolean visit(org.eclipse.jdt.core.dom.IfStatement node) { + int lineNo = cUnit.getLineNumber(node.getStartPosition()); + if (lineNo != alias.getLineNo()) return true; + String fieldName = fa.getFieldName(); + fieldName = fieldName.substring(fieldName.lastIndexOf(".") + 1); + int start = node.getStartPosition(); + int end = start + node.getLength(); + Expression expression = node.getExpression(); + if (expression != null) { + start = expression.getStartPosition(); + start += expression.toString().indexOf(fieldName); + 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; @@ -762,6 +792,26 @@ } return false; } + @Override + public boolean visit(org.eclipse.jdt.core.dom.SuperMethodInvocation 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(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; + int start = argument.getStartPosition(); + 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; + } }; } return visitor; @@ -792,6 +842,22 @@ attributes.put(IMarker.LINE_NUMBER, lineNo); return false; } + @Override + public boolean visit(org.eclipse.jdt.core.dom.SuperMethodInvocation 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(0, name2.indexOf("(")); + name2 = name2.substring(name2.lastIndexOf(".") + 1); + if (!(name1.equals(name2))) return true; + int start = node.getStartPosition(); + int end = start + "super".length(); + attributes.put(IMarker.CHAR_START, start); + attributes.put(IMarker.CHAR_END, end); + attributes.put(IMarker.LINE_NUMBER, lineNo); + return false; + } }; } return visitor;