diff options
| author | Manoj Palat | 2013-03-15 20:26:02 +0000 |
|---|---|---|
| committer | ssankaran | 2013-03-15 20:26:02 +0000 |
| commit | 6ebd66d084b36e21840502fb2a7d814341a3b190 (patch) | |
| tree | 36190ff9cf04f5a9a6c39f00882856dff99fc006 | |
| parent | 253db1ad159947db401a053aab34e948bedb1e92 (diff) | |
| download | eclipse.jdt.core-6ebd66d084b36e21840502fb2a7d814341a3b190.tar.gz eclipse.jdt.core-6ebd66d084b36e21840502fb2a7d814341a3b190.tar.xz eclipse.jdt.core-6ebd66d084b36e21840502fb2a7d814341a3b190.zip | |
Fixed Bug 402674 - [1.8][dom ast] LambdaExpression#resolveTypeBinding()
returns null
| -rw-r--r-- | org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter18Test.java | 68 | ||||
| -rw-r--r-- | org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java | 1 |
2 files changed, 69 insertions, 0 deletions
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter18Test.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter18Test.java index 7514bf33e4..3f30ad76af 100644 --- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter18Test.java +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter18Test.java @@ -1828,5 +1828,73 @@ public class ASTConverter18Test extends ConverterTestSetup { method = (MethodDeclaration) type.bodyDeclarations().get(1); assertEquals("Type should be malformed", ASTNode.MALFORMED, (method.getFlags() & ASTNode.MALFORMED)); } + /** + * https://bugs.eclipse.org/bugs/show_bug.cgi?id=402674 + * + * @throws JavaModelException + */ + public void test402674() throws JavaModelException { + this.workingCopy = getWorkingCopy("/Converter18/src/test402674/X.java", + true/* resolve */); + String contents = "package test402674;" + + "public class X {\n" + + " public static interface StringToInt {\n" + + " int stoi(String s);\n" + + " }\n" + + " public static interface ReduceInt {\n" + + " int reduce(int a, int b);\n" + + " }\n" + + " void foo(StringToInt s) { }\n" + + " void bar(ReduceInt r) { }\n" + + " void bar() {\n" + + " foo(s -> s.length());\n" + + " foo((s) -> s.length());\n" + + " foo((String s) -> s.length()); //SingleVariableDeclaration is OK\n" + + " bar((x, y) -> x+y);\n" + + " bar((int x, int y) -> x+y); //SingleVariableDeclarations are OK\n" + + " }\n" + + "}\n"; + + CompilationUnit cu = (CompilationUnit) buildAST(contents, this.workingCopy); + TypeDeclaration typedeclaration = (TypeDeclaration) getASTNode(cu, 0); + MethodDeclaration methoddecl = (MethodDeclaration)typedeclaration.bodyDeclarations().get(4); + List statements = methoddecl.getBody().statements(); + int sCount = 0; + + ExpressionStatement statement = (ExpressionStatement)statements.get(sCount++); + MethodInvocation methodInvocation = (MethodInvocation)statement.getExpression(); + LambdaExpression lambdaExpression = (LambdaExpression) methodInvocation.arguments().get(0); + ITypeBinding binding = lambdaExpression.resolveTypeBinding(); + assertNotNull(binding); + assertEquals("StringToInt", binding.getName()); + + statement = (ExpressionStatement)statements.get(sCount++); + methodInvocation = (MethodInvocation)statement.getExpression(); + lambdaExpression = (LambdaExpression) methodInvocation.arguments().get(0); + binding = lambdaExpression.resolveTypeBinding(); + assertNotNull(binding); + assertEquals("StringToInt", binding.getName()); + + statement = (ExpressionStatement)statements.get(sCount++); + methodInvocation = (MethodInvocation)statement.getExpression(); + lambdaExpression = (LambdaExpression) methodInvocation.arguments().get(0); + binding = lambdaExpression.resolveTypeBinding(); + assertNotNull(binding); + assertEquals("StringToInt", binding.getName()); + + statement = (ExpressionStatement)statements.get(sCount++); + methodInvocation = (MethodInvocation)statement.getExpression(); + lambdaExpression = (LambdaExpression) methodInvocation.arguments().get(0); + binding = lambdaExpression.resolveTypeBinding(); + assertNotNull(binding); + assertEquals("ReduceInt", binding.getName()); + + statement = (ExpressionStatement)statements.get(sCount++); + methodInvocation = (MethodInvocation)statement.getExpression(); + lambdaExpression = (LambdaExpression) methodInvocation.arguments().get(0); + binding = lambdaExpression.resolveTypeBinding(); + assertNotNull(binding); + assertEquals("ReduceInt", binding.getName()); + } } diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java index 69c393d444..345c913209 100644 --- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java +++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java @@ -708,6 +708,7 @@ class DefaultBindingResolver extends BindingResolver { case ASTNode.TYPE_LITERAL : case ASTNode.INFIX_EXPRESSION : case ASTNode.INSTANCEOF_EXPRESSION : + case ASTNode.LAMBDA_EXPRESSION: case ASTNode.FIELD_ACCESS : case ASTNode.SUPER_FIELD_ACCESS : case ASTNode.ARRAY_ACCESS : |
