diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java b/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java index 40fc9e5f203b..43b131c92c25 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java @@ -269,11 +269,6 @@ public class PositionManagerImpl implements PositionManager, MultiRequestPositio } while(true); final List lambdas = new ArrayList(3); - // add initial lambda if we're inside already - NavigatablePsiElement method = PsiTreeUtil.getParentOfType(element, PsiMethod.class, PsiLambdaExpression.class); - if (method instanceof PsiLambdaExpression) { - lambdas.add((PsiLambdaExpression)method); - } final PsiElementVisitor lambdaCollector = new JavaRecursiveElementVisitor() { @Override public void visitLambdaExpression(PsiLambdaExpression expression) { @@ -282,6 +277,11 @@ public class PositionManagerImpl implements PositionManager, MultiRequestPositio } }; element.accept(lambdaCollector); + // add initial lambda if we're inside already + NavigatablePsiElement method = PsiTreeUtil.getParentOfType(element, PsiMethod.class, PsiLambdaExpression.class); + if (method instanceof PsiLambdaExpression) { + lambdas.add((PsiLambdaExpression)method); + } for (PsiElement sibling = getNextElement(element); sibling != null; sibling = getNextElement(sibling)) { if (!lineRange.intersects(sibling.getTextRange())) { break; diff --git a/java/testFramework/src/com/intellij/debugger/ExecutionWithDebuggerToolsTestCase.java b/java/testFramework/src/com/intellij/debugger/ExecutionWithDebuggerToolsTestCase.java index 52ca25f663ba..615ed5c65193 100644 --- a/java/testFramework/src/com/intellij/debugger/ExecutionWithDebuggerToolsTestCase.java +++ b/java/testFramework/src/com/intellij/debugger/ExecutionWithDebuggerToolsTestCase.java @@ -187,6 +187,33 @@ public abstract class ExecutionWithDebuggerToolsTestCase extends ExecutionTestCa }); } + protected void printContextWithText(final StackFrameContext context) { + ApplicationManager.getApplication().runReadAction(new Runnable() { + @Override + public void run() { + if (context.getFrameProxy() != null) { + SourcePosition sourcePosition = PositionUtil.getSourcePosition(context); + int offset = sourcePosition.getOffset(); + Document document = PsiDocumentManager.getInstance(myProject).getDocument(sourcePosition.getFile()); + CharSequence text = document.getImmutableCharSequence(); + String positionText = ""; + if (offset > -1) { + positionText = StringUtil.escapeLineBreak(" [" + text.subSequence(Math.max(0, offset - 20), offset) + "<*>" + + text.subSequence(offset, Math.min(offset + 20, text.length())) + "]"); + } + + println(sourcePosition.getFile().getVirtualFile().getName() + + ":" + sourcePosition.getLine() + + positionText, + ProcessOutputTypes.SYSTEM); + } + else { + println("Context thread is null", ProcessOutputTypes.SYSTEM); + } + } + }); + } + protected void invokeRatherLater(SuspendContextImpl context, final Runnable runnable) { invokeRatherLater(new SuspendContextCommandImpl(context) { @Override