diff options
4 files changed, 75 insertions, 1 deletions
diff --git a/org.eclipse.jdt.debug.tests/java8/Bug561715.java b/org.eclipse.jdt.debug.tests/java8/Bug561715.java new file mode 100644 index 000000000..f2f41f8c4 --- /dev/null +++ b/org.eclipse.jdt.debug.tests/java8/Bug561715.java @@ -0,0 +1,9 @@ +import java.util.Arrays; +import java.util.function.Predicate; + +public class Bug561715 { + public static void main(String[] args) { + String y = "111"; + Arrays.asList("111", "222", "aaa").stream().filter(a -> a.equals(y)).count(); + } +} diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java index ba2c6aec1..08c87d2bc 100644 --- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java +++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java @@ -473,6 +473,7 @@ public abstract class AbstractDebugTest extends TestCase implements IEvaluation cfgs.add(createLaunchConfiguration(jp, "Bug404097BreakpointUsingInnerClass")); cfgs.add(createLaunchConfiguration(jp, "Bug404097BreakpointUsingLocalClass")); cfgs.add(createLaunchConfiguration(jp, "Bug560392")); + cfgs.add(createLaunchConfiguration(jp, "Bug561715")); loaded18 = true; waitForBuild(); } diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LambdaLocalVarTest.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LambdaLocalVarTest.java new file mode 100644 index 000000000..4b6e67f3e --- /dev/null +++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LambdaLocalVarTest.java @@ -0,0 +1,62 @@ +/******************************************************************************* + * Copyright (c) 2020 Gayan Perera and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Gayan Perera - initial API and implementation + *******************************************************************************/ +package org.eclipse.jdt.debug.tests.eval; + +import org.eclipse.debug.core.model.IValue; +import org.eclipse.debug.internal.ui.views.console.ProcessConsole; +import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.debug.core.IJavaThread; +import org.eclipse.jdt.debug.tests.AbstractDebugTest; +import org.eclipse.jdt.debug.tests.TestUtil; + +public class LambdaLocalVarTest extends AbstractDebugTest { + private IJavaThread javaThread; + + @Override + protected IJavaProject getProjectContext() { + return get18Project(); + } + + public LambdaLocalVarTest(String name) { + super(name); + } + + public void testEvaluate_LambdaFieldVariable() throws Exception { + debugWithBreakpoint("Bug561715", 7); + javaThread.resume(); + TestUtil.waitForJobs(getName(), 1000, DEFAULT_TIMEOUT, ProcessConsole.class); + + String snippet = "a"; + IValue value = doEval(javaThread, snippet); + + assertEquals("wrong type : ", "java.lang.String", value.getReferenceTypeName()); + assertEquals("wrong result : ", "111", value.getValueString()); + } + + private void debugWithBreakpoint(String testClass, int lineNumber) throws Exception { + createLineBreakpoint(lineNumber, testClass); + javaThread = launchToBreakpoint(testClass); + assertNotNull("The program did not suspend", javaThread); + } + + @Override + protected void tearDown() throws Exception { + try { + terminateAndRemove(javaThread); + } finally { + super.tearDown(); + removeAllBreakpoints(); + } + } +} diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIStackFrame.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIStackFrame.java index 59b2931f5..8baa1d776 100644 --- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIStackFrame.java +++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIStackFrame.java @@ -443,7 +443,9 @@ public class JDIStackFrame extends JDIDebugElement implements IJavaStackFrame { @Override public boolean visit(LambdaExpression lambdaExpression) { - if (lineNo != cu.getLineNumber(lambdaExpression.getStartPosition()) + 1) { + // check if the lineNo fall in lambda region, it can either be single or multiline lambda body. + if (lineNo < cu.getLineNumber(lambdaExpression.getStartPosition()) + || lineNo > cu.getLineNumber(lambdaExpression.getStartPosition() + lambdaExpression.getLength())) { return true; } IMethodBinding binding = lambdaExpression.resolveMethodBinding(); |