Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorssankaran2014-03-10 17:43:57 +0000
committerssankaran2014-03-10 17:43:57 +0000
commit4c94b3d7ef7a5503607858476a6477496a59c95b (patch)
tree63258fdf4cbda0562f8436588b7240642b5d67b2
parentea585ca8104de943bd71824eec2c8a9d4d408df2 (diff)
downloadeclipse.jdt.core-4c94b3d7ef7a5503607858476a6477496a59c95b.tar.gz
eclipse.jdt.core-4c94b3d7ef7a5503607858476a6477496a59c95b.tar.xz
eclipse.jdt.core-4c94b3d7ef7a5503607858476a6477496a59c95b.zip
Fixed Bug 430026 - [1.8] Lambda parameter has wrong parent if itP20140310-1600
declares its type
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/RunOnlyAssistModelTests18.java (renamed from org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/RunOnlyAssistTests18.java)10
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaElement8Tests.java52
-rw-r--r--org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/AssistParser.java5
3 files changed, 62 insertions, 5 deletions
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/RunOnlyAssistTests18.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/RunOnlyAssistModelTests18.java
index 2549ab63ab..fa953ae205 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/RunOnlyAssistTests18.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/RunOnlyAssistModelTests18.java
@@ -24,11 +24,13 @@ import junit.framework.TestSuite;
import org.eclipse.jdt.core.tests.compiler.parser.CompletionParserTest18;
import org.eclipse.jdt.core.tests.compiler.parser.SelectionParserTest18;
import org.eclipse.jdt.core.tests.model.CompletionTests18;
+import org.eclipse.jdt.core.tests.model.JavaElement8Tests;
+import org.eclipse.jdt.core.tests.model.JavaSearchBugs8Tests;
import org.eclipse.jdt.core.tests.model.ResolveTests18;
-public class RunOnlyAssistTests18 extends TestCase {
+public class RunOnlyAssistModelTests18 extends TestCase {
- public RunOnlyAssistTests18(String name) {
+ public RunOnlyAssistModelTests18(String name) {
super(name);
}
public static Class[] getAllTestClasses() {
@@ -37,11 +39,13 @@ public class RunOnlyAssistTests18 extends TestCase {
CompletionParserTest18.class,
CompletionTests18.class,
SelectionParserTest18.class,
+ JavaSearchBugs8Tests.class,
+ JavaElement8Tests.class,
};
}
public static Test suite() {
- TestSuite ts = new TestSuite(RunOnlyAssistTests18.class.getName());
+ TestSuite ts = new TestSuite(RunOnlyAssistModelTests18.class.getName());
Class[] testClasses = getAllTestClasses();
addTestsToSuite(ts, testClasses);
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaElement8Tests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaElement8Tests.java
index 1c6e4a4414..4a4c15a953 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaElement8Tests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaElement8Tests.java
@@ -50,6 +50,8 @@ public class JavaElement8Tests extends AbstractJavaModelTests {
suite.addTest(new JavaElement8Tests("test429948a"));
suite.addTest(new JavaElement8Tests("test429966"));
suite.addTest(new JavaElement8Tests("testBug429910"));
+ suite.addTest(new JavaElement8Tests("test430026"));
+ suite.addTest(new JavaElement8Tests("test430026a"));
return suite;
}
public void testBug428178() throws Exception {
@@ -319,4 +321,54 @@ public class JavaElement8Tests extends AbstractJavaModelTests {
deleteProject("Bug429910");
}
}
+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=430026, [1.8] Lambda parameter has wrong parent if it declares its type
+ public void test430026() throws CoreException {
+ String projectName = "Bug429966";
+ try {
+ IJavaProject project = createJavaProject(projectName, new String[] {"src"}, new String[] {"JCL18_LIB"}, "bin", "1.8");
+ project.open(null);
+ String fileContent =
+ "interface MyFunction<T, R> {\n" +
+ " R apply(T t);\n" +
+ " default <V> MyFunction<V, R> compose(MyFunction<? super V, ? extends T> before) {\n" +
+ " return (V v) -> apply(before.apply(v));\n" +
+ " }\n" +
+ "}\n";
+ String fileName = "/" + projectName + "/src/X.java";
+ createFile(fileName, fileContent);
+
+ ICompilationUnit unit = getCompilationUnit(fileName);
+ int start = fileContent.indexOf("v");
+ IJavaElement[] elements = unit.codeSelect(start, 1);
+ assertElementEquals("Wrong element", "v [in apply(V) [in Lambda(MyFunction) [in compose(MyFunction<? super V,? extends T>) [in MyFunction [in X.java [in <default> [in src [in Bug429966]]]]]]]]", elements[0]);
+ }
+ finally {
+ deleteProject(projectName);
+ }
+ }
+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=430026, [1.8] Lambda parameter has wrong parent if it declares its type
+ public void test430026a() throws CoreException {
+ String projectName = "Bug429966";
+ try {
+ IJavaProject project = createJavaProject(projectName, new String[] {"src"}, new String[] {"JCL18_LIB"}, "bin", "1.8");
+ project.open(null);
+ String fileContent =
+ "interface MyFunction<T, R> {\n" +
+ " R apply(T t);\n" +
+ " default <V> MyFunction<V, R> compose(MyFunction<? super V, ? extends T> before) {\n" +
+ " return v -> apply(before.apply(v));\n" +
+ " }\n" +
+ "}\n";
+ String fileName = "/" + projectName + "/src/X.java";
+ createFile(fileName, fileContent);
+
+ ICompilationUnit unit = getCompilationUnit(fileName);
+ int start = fileContent.indexOf("v");
+ IJavaElement[] elements = unit.codeSelect(start, 1);
+ assertElementEquals("Wrong element", "v [in apply(V) [in Lambda(MyFunction) [in compose(MyFunction<? super V,? extends T>) [in MyFunction [in X.java [in <default> [in src [in Bug429966]]]]]]]]", elements[0]);
+ }
+ finally {
+ deleteProject(projectName);
+ }
+ }
}
diff --git a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/AssistParser.java b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/AssistParser.java
index 2650d7a2cf..5b69a75d7c 100644
--- a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/AssistParser.java
+++ b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/AssistParser.java
@@ -542,8 +542,9 @@ protected void consumeInterfaceHeader() {
super.consumeInterfaceHeader();
pushOnElementStack(K_TYPE_DELIMITER);
}
-protected void consumeLambdaHeader() {
- super.consumeLambdaHeader();
+@Override
+protected void consumeNestedLambda() {
+ super.consumeNestedLambda();
LambdaExpression lexp = (LambdaExpression) this.astStack[this.astPtr];
pushOnElementStack(K_LAMBDA_EXPRESSION_DELIMITER, EXPRESSION_BODY, lexp);
}

Back to the top