diff --git a/org.eclipse.jdt.debug.tests/java8/Bug569413.java b/org.eclipse.jdt.debug.tests/java8/Bug569413.java new file mode 100644 index 0000000..7b43ed8 --- /dev/null +++ b/org.eclipse.jdt.debug.tests/java8/Bug569413.java @@ -0,0 +1,40 @@ +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class Bug569413 { + + public static void main(String[] args) { + new Bug569413().test(); + } + + List packageProcessors = Arrays.asList(new TestClass()); + Map basePackages = new HashMap<>(); + + void test() { + // no Working for 'p' + packageProcessors.forEach(pp -> { + pp.getPackagesToMap().forEach(p -> { + basePackages.put(p, pp); // breakpoint here, expression for p + }); + }); + + // Working for 'p' + packageProcessors.forEach(pp -> { + pp.getPackagesToMap().forEach(p -> { + basePackages.put(p, null); // breakpoint here, expression for p + }); + }); + } + + static class TestClass { + + public Set getPackagesToMap() { + return new HashSet<>(Arrays.asList("ab", "b", "c")); + } + + } +} 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 dec4564..8ad0540 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 @@ -492,6 +492,7 @@ cfgs.add(createLaunchConfiguration(jp, "Bug564801")); cfgs.add(createLaunchConfiguration(jp, "Bug567801")); cfgs.add(createLaunchConfiguration(jp, "Bug571230")); + cfgs.add(createLaunchConfiguration(jp, "Bug569413")); loaded18 = true; waitForBuild(); } diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/EvalTestSuite.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/EvalTestSuite.java index db2b3b0..f953cbf 100644 --- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/EvalTestSuite.java +++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/EvalTestSuite.java @@ -36,6 +36,7 @@ import org.eclipse.jdt.debug.tests.eval.IntOperatorsTests; import org.eclipse.jdt.debug.tests.eval.Java8Tests; import org.eclipse.jdt.debug.tests.eval.LabelTests; +import org.eclipse.jdt.debug.tests.eval.LambdaNestedVariableTest; import org.eclipse.jdt.debug.tests.eval.LocalVarAssignmentTests; import org.eclipse.jdt.debug.tests.eval.LocalVarValueTests; import org.eclipse.jdt.debug.tests.eval.LongAssignmentOperatorsTests; @@ -238,6 +239,8 @@ addTest(new TestSuite(DebugShellVariableTests.class)); + addTest(new TestSuite(LambdaNestedVariableTest.class)); + } /** diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LambdaNestedVariableTest.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LambdaNestedVariableTest.java new file mode 100644 index 0000000..897353b --- /dev/null +++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LambdaNestedVariableTest.java @@ -0,0 +1,66 @@ +/******************************************************************************* + * 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 + * + *******************************************************************************/ +package org.eclipse.jdt.debug.tests.eval; + +import org.eclipse.debug.core.model.IValue; +import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.debug.core.IJavaThread; +import org.eclipse.jdt.debug.tests.AbstractDebugTest; + +public class LambdaNestedVariableTest extends AbstractDebugTest { + + @Override + protected IJavaProject getProjectContext() { + return get18Project(); + } + + public LambdaNestedVariableTest(String name) { + super(name); + } + + public void testEvaluate_LambdaCapturedParameter() throws Exception { + IJavaThread thread = null; + try { + String type = "Bug569413"; + createLineBreakpoint(21, type); + thread = launchToBreakpoint(type); + + IValue value = doEval(thread, "p"); + assertEquals("wrong type : ", "java.lang.String", value.getReferenceTypeName()); + assertEquals("wrong result : ", "ab", value.getValueString()); + + assertNotNull("The program did not suspend", thread); + } finally { + removeAllBreakpoints(); + terminateAndRemove(thread); + } + } + + public void testEvaluate_LambdaCapturedParameterAndNull() throws Exception { + IJavaThread thread = null; + try { + String type = "Bug569413"; + createLineBreakpoint(28, type); + thread = launchToBreakpoint(type); + + IValue value = doEval(thread, "p"); + assertEquals("wrong type : ", "java.lang.String", value.getReferenceTypeName()); + assertEquals("wrong result : ", "ab", value.getValueString()); + + assertNotNull("The program did not suspend", thread); + } finally { + removeAllBreakpoints(); + terminateAndRemove(thread); + } + } + +}