diff options
| author | Jayaprakash Arthanareeswaran | 2013-02-01 06:16:24 +0000 |
|---|---|---|
| committer | Jayaprakash Arthanareeswaran | 2013-02-01 06:38:24 +0000 |
| commit | ea916b0462fec6996e619f84c30f348e2877686a (patch) | |
| tree | ca26f47ce90b780e607f38298efdf2b457745e48 | |
| parent | 5b5c973a8216c08a1f2946e0c5b4a77da83dac27 (diff) | |
| download | eclipse.jdt.core-ea916b0462fec6996e619f84c30f348e2877686a.tar.gz eclipse.jdt.core-ea916b0462fec6996e619f84c30f348e2877686a.tar.xz eclipse.jdt.core-ea916b0462fec6996e619f84c30f348e2877686a.zip | |
Fix for bug 399600 - ASTConverter#retrieveEndOfRightParenthesisPosition
fails for certain cases
| -rw-r--r-- | org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter18Test.java | 22 | ||||
| -rw-r--r-- | org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java | 10 |
2 files changed, 31 insertions, 1 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 5ff72054a1..addb847402 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 @@ -1070,4 +1070,26 @@ public class ASTConverter18Test extends ConverterTestSetup { method = methods[2]; assertExtraDimensionsEqual("Incorrect dimension info", method.getExtraDimensionInfos(), "@Annot1 @Annot2 [] []"); } + // https://bugs.eclipse.org/bugs/show_bug.cgi?id=399600 + public void test0010() throws JavaModelException { + String contents = + "import java.lang.annotation.ElementType;\n" + + "public class X {\n" + + " @Marker int foo(@Marker(\"Blah\") int z) @Marker [] @Marker [] {\n" + + " return null;\n" + + " }\n" + + "}\n" + + "@java.lang.annotation.Target (ElementType.TYPE_USE)\n" + + "@interface Marker {\n" + + " String value() default \"Blah\";\n" + + "}"; + this.workingCopy = getWorkingCopy("/Converter18/src/X.java", true); + ASTNode node = buildAST(contents, this.workingCopy); + assertEquals("Not a compilation unit", ASTNode.COMPILATION_UNIT, node.getNodeType()); + CompilationUnit unit = (CompilationUnit) node; + node = getASTNode(unit, 0, 0); + assertEquals("Not a method declaration", ASTNode.METHOD_DECLARATION, node.getNodeType()); + MethodDeclaration method = (MethodDeclaration) node; + assertExtraDimensionsEqual("Incorrect dimension info", method.getExtraDimensionInfos(), "@Marker [] @Marker []"); + } } 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 8a1ac31454..790aec77d6 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 @@ -4398,10 +4398,18 @@ class ASTConverter { this.scanner.resetTo(start, end); try { int token; + int count = 0; while ((token = this.scanner.getNextToken()) != TerminalTokens.TokenNameEOF) { switch(token) { case TerminalTokens.TokenNameRPAREN: - return this.scanner.currentPosition; + count--; + if (count <= 0) return this.scanner.currentPosition; + break; + case TerminalTokens.TokenNameLPAREN: + count++; + //$FALL-THROUGH$ + default: + break; } } } catch(InvalidInputException e) { |
