Bug 576829 - Fix evaluations for variables with recursive generic
Add new test case to make sure multiple recursive generic parameters
works.
Change-Id: I6aaa7f9b867cdda6a889c9d3b75b906a040dd820
Signed-off-by: Gayan Perera <gayanper@gmail.com>
Reviewed-on: https://git.eclipse.org/r/c/jdt/eclipse.jdt.debug/+/187240
Tested-by: JDT Bot <jdt-bot@eclipse.org>
Reviewed-by: Sebastian Zarnekow <sebastian.zarnekow@gmail.com>
Reviewed-by: Sarika Sinha <sarika.sinha@in.ibm.com>
diff --git a/org.eclipse.jdt.debug.tests/java7/Bug576829.java b/org.eclipse.jdt.debug.tests/java7/Bug576829.java
index 4d0aad5..f59b0c2 100644
--- a/org.eclipse.jdt.debug.tests/java7/Bug576829.java
+++ b/org.eclipse.jdt.debug.tests/java7/Bug576829.java
@@ -7,6 +7,7 @@
public static void main(String[] args) {
MyClass<?> cls = new MyClass<>();
+ MyClass1<?,?> cls1 = new MyClass1<>();
List<? extends Number> num = new ArrayList<>();
System.out.println("x"); // add conditional breakpoint here (e.g. "cls.getBoolean()")
}
@@ -17,4 +18,11 @@
return false;
}
}
+
+ private static class MyClass1<C1 extends MyClass1<C1, C2>, C2 extends MyClass1<C1, C2>> {
+ public boolean getBoolean() {
+ return false;
+ }
+
+ }
}
\ No newline at end of file
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/GenericsEval17Test.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/GenericsEval17Test.java
index de80380..1ee424e 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/GenericsEval17Test.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/GenericsEval17Test.java
@@ -118,7 +118,7 @@
}
public void testEvaluate_Bug576829_RecursiveGenerics_ObjectInstanceEvaluation() throws Exception {
- createConditionalLineBreakpoint(11, "Bug576829", "cls.getBoolean() && num.isEmpty()", false);
+ createConditionalLineBreakpoint(12, "Bug576829", "cls.getBoolean() && num.isEmpty()", false);
javaThread = launchToBreakpoint("Bug576829");
assertNotNull("The program did not suspend", javaThread);
@@ -129,6 +129,18 @@
assertEquals("value is not false", "false", value.getValueString());
}
+ public void testEvaluate_Bug576829_RecursiveMultipleGenerics_ObjectInstanceEvaluation() throws Exception {
+ createConditionalLineBreakpoint(12, "Bug576829", "cls1.getBoolean() && num.isEmpty()", false);
+ javaThread = launchToBreakpoint("Bug576829");
+ assertNotNull("The program did not suspend", javaThread);
+
+ String snippet = "cls1.getBoolean() && num.isEmpty()";
+ IValue value = doEval(javaThread, snippet);
+
+ assertNotNull("value is null", value);
+ assertEquals("value is not false", "false", value.getValueString());
+ }
+
private void debugWithBreakpoint(String testClass, int lineNumber) throws Exception {
createLineBreakpoint(lineNumber, testClass);
javaThread = launchToBreakpoint(testClass);