Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManoj Palat2013-03-09 22:51:06 +0000
committerssankaran2013-03-09 22:51:06 +0000
commitd7b968f8074ad4e44b5a08309dcb414a4be941a4 (patch)
treedaae7e370502a3d03e623bad517ccc9bb646354d
parent39c80376eb5a4ddf3b0cc660e46c4e7575c329d8 (diff)
downloadeclipse.jdt.core-d7b968f8074ad4e44b5a08309dcb414a4be941a4.tar.gz
eclipse.jdt.core-d7b968f8074ad4e44b5a08309dcb414a4be941a4.tar.xz
eclipse.jdt.core-d7b968f8074ad4e44b5a08309dcb414a4be941a4.zip
Fixed Bug 402665 - [1.8][dom ast] LambdaExpression's
VariableDeclarationFragment misses source range
-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/ASTConverter.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 c5f2ac0370..f42e2f8a9e 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
@@ -1692,4 +1692,72 @@ public class ASTConverter18Test extends ConverterTestSetup {
assertEquals("public test399793.J foo() ", binding.toString());
assertTrue(lambdaExpression.parameters().size() == 0);
}
+
+ /**
+ * https://bugs.eclipse.org/bugs/show_bug.cgi?id=402665
+ *
+ * @throws JavaModelException
+ */
+ public void test402665a() throws JavaModelException {
+ this.workingCopy = getWorkingCopy("/Converter18/src/test402665/X.java",
+ true/* resolve */);
+ String contents = "package test402665;" +
+ "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);
+ VariableDeclarationFragment fragment = (VariableDeclarationFragment)lambdaExpression.parameters().get(0);
+ checkSourceRange(fragment, "s", contents);
+
+ statement = (ExpressionStatement)statements.get(sCount++);
+ methodInvocation = (MethodInvocation)statement.getExpression();
+ lambdaExpression = (LambdaExpression) methodInvocation.arguments().get(0);
+ fragment = (VariableDeclarationFragment)lambdaExpression.parameters().get(0);
+ checkSourceRange(fragment, "s", contents);
+
+ statement = (ExpressionStatement)statements.get(sCount++);
+ methodInvocation = (MethodInvocation)statement.getExpression();
+ lambdaExpression = (LambdaExpression) methodInvocation.arguments().get(0);
+ SingleVariableDeclaration singleVarDecl = (SingleVariableDeclaration)lambdaExpression.parameters().get(0);
+ checkSourceRange(singleVarDecl, "String s", contents);
+
+ statement = (ExpressionStatement)statements.get(sCount++);
+ methodInvocation = (MethodInvocation)statement.getExpression();
+ lambdaExpression = (LambdaExpression) methodInvocation.arguments().get(0);
+ fragment = (VariableDeclarationFragment)lambdaExpression.parameters().get(0);
+ checkSourceRange(fragment, "x", contents);
+ fragment = (VariableDeclarationFragment)lambdaExpression.parameters().get(1);
+ checkSourceRange(fragment, "y", contents);
+
+ statement = (ExpressionStatement)statements.get(sCount++);
+ methodInvocation = (MethodInvocation)statement.getExpression();
+ lambdaExpression = (LambdaExpression) methodInvocation.arguments().get(0);
+ singleVarDecl = (SingleVariableDeclaration)lambdaExpression.parameters().get(0);
+ checkSourceRange(singleVarDecl, "int x", contents);
+ singleVarDecl = (SingleVariableDeclaration)lambdaExpression.parameters().get(1);
+ checkSourceRange(singleVarDecl, "int y", contents);
+ }
}
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java
index 9b8339a94d..a0baf8567f 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java
@@ -2162,6 +2162,7 @@ class ASTConverter {
recordNodes(variableDeclarationFragment, argument);
}
variableDeclarationFragment.setName(simpleName);
+ variableDeclarationFragment.setSourceRange(start, end - start + 1);
lambdaExpression.parameters().add(variableDeclarationFragment);
} else {
SingleVariableDeclaration singleVariableDeclaration = convert(argument);

Back to the top