diff options
author | ssankaran | 2014-03-10 17:43:57 +0000 |
---|---|---|
committer | ssankaran | 2014-03-10 17:43:57 +0000 |
commit | 4c94b3d7ef7a5503607858476a6477496a59c95b (patch) | |
tree | 63258fdf4cbda0562f8436588b7240642b5d67b2 | |
parent | ea585ca8104de943bd71824eec2c8a9d4d408df2 (diff) | |
download | eclipse.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.java | 52 | ||||
-rw-r--r-- | org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/AssistParser.java | 5 |
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); } |