Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJayaprakash Arthanareeswaran2013-02-01 06:16:24 +0000
committerJayaprakash Arthanareeswaran2013-02-01 06:38:24 +0000
commitea916b0462fec6996e619f84c30f348e2877686a (patch)
treeca26f47ce90b780e607f38298efdf2b457745e48
parent5b5c973a8216c08a1f2946e0c5b4a77da83dac27 (diff)
downloadeclipse.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.java22
-rw-r--r--org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java10
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) {

Back to the top