diff options
| author | Manoj Palat | 2013-03-09 22:51:06 +0000 |
|---|---|---|
| committer | ssankaran | 2013-03-09 22:51:06 +0000 |
| commit | d7b968f8074ad4e44b5a08309dcb414a4be941a4 (patch) | |
| tree | daae7e370502a3d03e623bad517ccc9bb646354d | |
| parent | 39c80376eb5a4ddf3b0cc660e46c4e7575c329d8 (diff) | |
| download | eclipse.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.java | 68 | ||||
| -rw-r--r-- | org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.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 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); |
