diff options
author | Olivier Thomann | 2019-02-14 06:57:14 +0000 |
---|---|---|
committer | Manoj Palat | 2019-02-14 06:57:14 +0000 |
commit | 0dafaea9437765af6a924b8fc8f523beb778e26f (patch) | |
tree | 85de098f20e418071859edacf3ac80658c4c420c | |
parent | 5bba0c553b2a86aa924d4b7a837792fbfec0583c (diff) | |
download | eclipse.jdt.core-0dafaea9437765af6a924b8fc8f523beb778e26f.tar.gz eclipse.jdt.core-0dafaea9437765af6a924b8fc8f523beb778e26f.tar.xz eclipse.jdt.core-0dafaea9437765af6a924b8fc8f523beb778e26f.zip |
-rw-r--r-- | org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter12Test.java | 62 | ||||
-rw-r--r-- | org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java | 23 |
2 files changed, 75 insertions, 10 deletions
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter12Test.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter12Test.java index bbfd9fda6b..f7637c7ed0 100644 --- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter12Test.java +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter12Test.java @@ -25,6 +25,8 @@ import org.eclipse.jdt.core.dom.ASTNode; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jdt.core.dom.IBinding; import org.eclipse.jdt.core.dom.MethodDeclaration; +import org.eclipse.jdt.core.dom.Statement; +import org.eclipse.jdt.core.dom.SwitchStatement; import org.eclipse.jdt.core.dom.Type; import org.eclipse.jdt.core.dom.VariableDeclarationStatement; @@ -89,8 +91,8 @@ public class ASTConverter12Test extends ConverterTestSetup { IJavaProject javaProject = this.workingCopy.getJavaProject(); String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true); try { - javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED); - javaProject.setOption(JavaCore.COMPILER_PB_REPORT_PREVIEW_FEATURES, JavaCore.IGNORE); + javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED); + javaProject.setOption(JavaCore.COMPILER_PB_REPORT_PREVIEW_FEATURES, JavaCore.IGNORE); ASTNode node = buildAST( contents, this.workingCopy); @@ -104,10 +106,60 @@ public class ASTConverter12Test extends ConverterTestSetup { IBinding binding = type.resolveBinding(); assertTrue("null binding", binding != null); assertTrue("binding incorrect", binding.getName().equals("int")); - } finally { javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old); - } - + } + } + public void test0002() throws JavaModelException { + String contents = + "public class X {\n" + + " static enum Day {MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY, SATURDAY,SUNDAY}\n" + + " String aa(Day day) throws Exception {\n" + + " var today = \"\";\n" + + " switch (day) {\n" + + " case SATURDAY,SUNDAY ->\n" + + " today=\"Weekend\";\n" + + " case MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY ->\n" + + " today=\"Working\";\n" + + " default ->\n" + + " throw new Exception(\"Invalid day: \" + day.name());\n" + + " }\n" + + " return today;\n" + + " }\n" + + " \n" + + " String bb(Day day) throws Exception {\n" + + " var today = \"\";\n" + + " switch (day) {\n" + + " case SATURDAY,SUNDAY:\n" + + " today = \"Weekend day\";\n" + + " break;\n" + + " case MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY:\n" + + " today = \"Working day\";\n" + + " break;\n" + + " default:\n" + + " throw new Exception(\"Invalid day: \" + day.name());\n" + + " }\n" + + " return today;\n" + + " }\n" + + "}" ; + this.workingCopy = getWorkingCopy("/Converter12/src/X.java", true/*resolve*/); + IJavaProject javaProject = this.workingCopy.getJavaProject(); + String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true); + try { + javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED); + javaProject.setOption(JavaCore.COMPILER_PB_REPORT_PREVIEW_FEATURES, JavaCore.IGNORE); + ASTNode node = buildAST( + contents, + this.workingCopy); + assertEquals("Not a compilation unit", ASTNode.COMPILATION_UNIT, node.getNodeType()); + CompilationUnit compilationUnit = (CompilationUnit) node; + assertProblemsSize(compilationUnit, 0); + node = getASTNode(compilationUnit, 0, 1, 1); + assertEquals("Switch statement", node.getNodeType(), ASTNode.SWITCH_STATEMENT); + SwitchStatement switchStatement = (SwitchStatement) node; + checkSourceRange((Statement) switchStatement.statements().get(0), "case SATURDAY,SUNDAY ->", contents); + } finally { + javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old); + } } } 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 596833dec2..cd1ea2b897 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 @@ -1308,8 +1308,7 @@ class ASTConverter { switchCase.getExpressions().add(convert(expression)); } } - } - else { + } else { org.eclipse.jdt.internal.compiler.ast.Expression constantExpression = statement.constantExpression; if (constantExpression == null) { switchCase.setExpression(null); @@ -1321,7 +1320,11 @@ class ASTConverter { switchCase.setSwitchLabeledRule(statement.isExpr); } switchCase.setSourceRange(statement.sourceStart, statement.sourceEnd - statement.sourceStart + 1); - retrieveColonPosition(switchCase); + if (statement.isExpr) { + retrieveArrowPosition(switchCase); + } else { + retrieveColonPosition(switchCase); + } return switchCase; } @@ -4849,6 +4852,17 @@ class ASTConverter { * This method fixes the length of the corresponding node. */ protected void retrieveColonPosition(ASTNode node) { + setNodeSourceEndPosition(node, TerminalTokens.TokenNameCOLON); + } + /** + * This method is used to set the right end position for switch labeled rules ie with '->' + * The actual AST nodes don't include the trailing semicolon. + * This method fixes the length of the corresponding node. + */ + private void retrieveArrowPosition(ASTNode node) { + setNodeSourceEndPosition(node, TerminalTokens.TokenNameARROW); + } + private void setNodeSourceEndPosition(ASTNode node, int expectedToken) { int start = node.getStartPosition(); int length = node.getLength(); int end = start + length; @@ -4856,8 +4870,7 @@ class ASTConverter { try { int token; while ((token = this.scanner.getNextToken()) != TerminalTokens.TokenNameEOF) { - switch(token) { - case TerminalTokens.TokenNameCOLON: + if (token == expectedToken) { node.setSourceRange(start, this.scanner.currentPosition - start); return; } |