Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManoj Palat2013-03-15 20:26:02 +0000
committerssankaran2013-03-15 20:26:02 +0000
commit6ebd66d084b36e21840502fb2a7d814341a3b190 (patch)
tree36190ff9cf04f5a9a6c39f00882856dff99fc006
parent253db1ad159947db401a053aab34e948bedb1e92 (diff)
downloadeclipse.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.java68
-rw-r--r--org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultBindingResolver.java1
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 :

Back to the top