Bug564801 - Fix generic type resolution issue in generate eval method
Change-Id: I19d57aca58dd49e87c7d3c2545a7b81549eb10d6
Signed-off-by: gayanper <gayanper@gmail.com>
diff --git a/org.eclipse.jdt.debug.tests/java8/Bug564801.java b/org.eclipse.jdt.debug.tests/java8/Bug564801.java
new file mode 100644
index 0000000..66a0cf7
--- /dev/null
+++ b/org.eclipse.jdt.debug.tests/java8/Bug564801.java
@@ -0,0 +1,18 @@
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.function.Predicate;
+
+public class Bug564801 {
+ public static void main(final String[] args) {
+ Arrays.asList(1,2).sort((a, b) -> {
+ return a.compareTo(b);
+ });
+
+ Arrays.<List<Integer>> asList(Arrays.asList(1), Collections.emptyList()).stream().filter(p -> {
+ Predicate<? extends List<Integer>> predicate = p1 -> p1.isEmpty();
+ return p.isEmpty();
+ }).count();
+
+ }
+}
\ No newline at end of file
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 295b424..55490c5 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
@@ -478,6 +478,7 @@
cfgs.add(createLaunchConfiguration(jp, "RemoteEvaluator"));
cfgs.add(createLaunchConfiguration(jp, "AnonymousEvaluator"));
cfgs.add(createLaunchConfiguration(jp, "Bug564486"));
+ cfgs.add(createLaunchConfiguration(jp, "Bug564801"));
loaded18 = true;
waitForBuild();
}
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LambdaVariableTest.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LambdaVariableTest.java
index 621b316..4ff72ea 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LambdaVariableTest.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LambdaVariableTest.java
@@ -48,6 +48,22 @@
assertEquals("wrong result : ", "Hello bug 562056", value.getValueString());
}
+ public void testEvaluate_WithGenericTypeVariables_SuperType() throws Exception {
+ debugWithBreakpoint("Bug564801", 9);
+ String snippet = "a.compareTo(b)";
+ IValue value = doEval(javaThread, snippet);
+
+ assertEquals("Actual value is not 1", "1", value.toString());
+ }
+
+ public void testEvaluate_WithGenericTypeVariables_ExtendsType() throws Exception {
+ debugWithBreakpoint("Bug564801", 14);
+ String snippet = "predicate.test(p)";
+ IValue value = doEval(javaThread, snippet);
+
+ assertEquals("Actual value is not false", "false", value.toString());
+ }
+
private void debugWithBreakpoint(String testClass, int lineNumber) throws Exception {
createLineBreakpoint(lineNumber, testClass);
javaThread = launchToBreakpoint(testClass);
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTEvaluationEngine.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTEvaluationEngine.java
index 52d9a54..edb4f8a 100644
--- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTEvaluationEngine.java
+++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTEvaluationEngine.java
@@ -409,7 +409,8 @@
final String genericSignature = variable.getGenericSignature();
final String fqn = Signature.toString(genericSignature).replace('/', '.');
- if (genericSignature.startsWith(String.valueOf(Signature.C_TYPE_VARIABLE))) {
+ if (genericSignature.startsWith(String.valueOf(Signature.C_TYPE_VARIABLE))
+ || Signature.getTypeArguments(genericSignature).length > 0) {
// resolve to the signature of the variable.
return Signature.toString(variable.getSignature()).replace('/', '.');
}