Initial update to BETA_JAVA13 as of Y20190829-0900
diff --git a/org.eclipse.jdt.core.tests.compiler/META-INF/MANIFEST.MF b/org.eclipse.jdt.core.tests.compiler/META-INF/MANIFEST.MF
index a995ac1..f0a3c3b 100644
--- a/org.eclipse.jdt.core.tests.compiler/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.core.tests.compiler/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.core.tests.compiler;singleton:=true
-Bundle-Version: 3.12.950.qualifier
+Bundle-Version: 3.12.951.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Export-Package: org.eclipse.jdt.core.tests.compiler,
diff --git a/org.eclipse.jdt.core.tests.compiler/pom.xml b/org.eclipse.jdt.core.tests.compiler/pom.xml
index a76daab..17f166f 100644
--- a/org.eclipse.jdt.core.tests.compiler/pom.xml
+++ b/org.eclipse.jdt.core.tests.compiler/pom.xml
@@ -20,7 +20,7 @@
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.core.tests.compiler</artifactId>
-  <version>3.12.950-SNAPSHOT</version>
+  <version>3.12.951-SNAPSHOT</version>
   <packaging>eclipse-test-plugin</packaging>
 
   <properties>
@@ -169,6 +169,36 @@
 			<tycho.surefire.argLine>--add-modules ALL-SYSTEM -Dcompliance=1.4,1.7,1.8,12</tycho.surefire.argLine>
 		</properties>
 	</profile>
+		<profile>
+		<id>test-on-javase-13</id>
+		<build>
+			<plugins>
+				<plugin>
+					<groupId>org.apache.maven.plugins</groupId>
+					<artifactId>maven-toolchains-plugin</artifactId>
+					<version>1.1</version>
+					<executions>
+						<execution>
+							<phase>validate</phase>
+							<goals>
+								<goal>toolchain</goal>
+							</goals>
+						</execution>
+					</executions>
+					<configuration>
+						<toolchains>
+							<jdk>
+								<id>JavaSE-13</id>
+							</jdk>
+						</toolchains>
+					</configuration>
+				</plugin>
+			</plugins>
+		</build>
+		<properties>
+			<tycho.surefire.argLine>--add-modules ALL-SYSTEM -Dcompliance=1.4,1.7,1.8,13</tycho.surefire.argLine>
+		</properties>
+	</profile>
   </profiles>
 
 </project>
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/ComplianceDiagnoseTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/ComplianceDiagnoseTest.java
index db5c6b6..0ef1a5a 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/ComplianceDiagnoseTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/ComplianceDiagnoseTest.java
@@ -3576,22 +3576,22 @@
 			"			default -> 3;\n" + 
 			"		};\n" + 
 			"	         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
-			"The preview feature Switch Expressions is only available with source level 12 and above\n" + 
+			"The preview feature Switch Expressions is only available with source level 13 and above\n" + 
 			"----------\n" + 
 			"2. ERROR in X.java (at line 4)\n" + 
 			"	case 0 -> i * 0;\n" + 
 			"	^^^^^^\n" + 
-			"The preview feature Case Labels with \'->\' is only available with source level 12 and above\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
 			"----------\n" + 
 			"3. ERROR in X.java (at line 5)\n" + 
 			"	case 1 -> 2;\n" + 
 			"	^^^^^^\n" + 
-			"The preview feature Case Labels with \'->\' is only available with source level 12 and above\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
 			"----------\n" + 
 			"4. ERROR in X.java (at line 6)\n" + 
 			"	default -> 3;\n" + 
 			"	^^^^^^^\n" + 
-			"The preview feature Case Labels with \'->\' is only available with source level 12 and above\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
 			"----------\n";
 
 	runComplianceParserTest(
@@ -3628,17 +3628,17 @@
 			"1. ERROR in X.java (at line 4)\n" + 
 			"	case 0 -> i * 0;\n" + 
 			"	^^^^^^\n" + 
-			"The preview feature Case Labels with \'->\' is only available with source level 12 and above\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
 			"----------\n" + 
 			"2. ERROR in X.java (at line 5)\n" + 
 			"	case 1 -> 2;\n" + 
 			"	^^^^^^\n" + 
-			"The preview feature Case Labels with \'->\' is only available with source level 12 and above\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
 			"----------\n" + 
 			"3. ERROR in X.java (at line 6)\n" + 
 			"	default -> 3;\n" + 
 			"	^^^^^^^\n" + 
-			"The preview feature Case Labels with \'->\' is only available with source level 12 and above\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
 			"----------\n";
 
 	runComplianceParserTest(
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/JavadocCompletionParserTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/JavadocCompletionParserTest.java
index 4ca723c..66b2f66 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/JavadocCompletionParserTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/JavadocCompletionParserTest.java
@@ -8,6 +8,10 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Technical University Berlin - adapted for Object Teams
@@ -58,6 +62,7 @@
 	// org.eclipse.jdt.internal.codeassist.CompletionEngine.DEBUG = true;
 //	TESTS_NUMBERS = new int[] { 8 };
 //	TESTS_RANGE = new int[] { 20, -1 };
+//	TESTS_NAMES = new String[] { "test001" };
 }
 
 public static Test suite() {
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/SelectionParserTest12.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/SelectionParserTest12.java
index d8de116..7912c9e 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/SelectionParserTest12.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/SelectionParserTest12.java
@@ -500,11 +500,13 @@
 			"  public X() {\n" + 
 			"  }\n" + 
 			"  public static void foo(Num num_) {\n" + 
-			"    {\n" + 
-			"      {\n" + 
-			"        int i_j;\n" + 
-			"        <SelectOnName:i_j>;\n" + 
-			"      }\n" + 
+			"    switch (num_) {\n" + 
+			"    case THREE ->\n" + 
+			"        {\n" + 
+			"          int i_j;\n" + 
+			"          System.out.println(<SelectOnName:i_j>);\n" + 
+			"          break;\n" + 
+			"        }\n" + 
 			"    }\n" + 
 			"  }\n" + 
 			"}\n";
@@ -786,285 +788,4 @@
 	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
 			selectionIdentifier, expectedReplacedSource, testName);
 }
-public void test018() throws JavaModelException {
-	String string =  "import org.eclipse.jdt.annotation.*;\n" + 
-			"import java.util.function.*;\n" + 
-			"interface IN0 {} \n" + 
-			"interface IN1 extends IN0 {} \n" + 
-			"interface IN2 extends IN0 {}\n" + 
-			"public class X {\n" + 
-			"	 IN1 n_1() { return new IN1() {}; } \n" + 
-			"	IN2 n_2() { return null; } \n" + 
-			"	<M> void m( Supplier< M> m2) { } \n" + 
-			"	void testSw(int i) { \n" + 
-			"		m(switch(i) { \n" + 
-			"			case 1 -> this::n_1; \n" + 
-			"			default -> this::n_2; }); \n" + 
-			"	}\n" + 
-			"}";
-
-	String selection = "n_1";
-	String selectKey = "<SelectionOnReferenceExpressionName:this::";
-	String expectedSelection = selectKey + selection + ">";
-
-	String selectionIdentifier = "n_1";
-	String expectedUnitDisplayString =
-			"import org.eclipse.jdt.annotation.*;\n" + 
-			"import java.util.function.*;\n" + 
-			"interface IN0 {\n" + 
-			"}\n" + 
-			"interface IN1 extends IN0 {\n" + 
-			"}\n" + 
-			"interface IN2 extends IN0 {\n" + 
-			"}\n" + 
-			"public class X {\n" + 
-			"  public X() {\n" + 
-			"  }\n" + 
-			"  IN1 n_1() {\n" + 
-			"  }\n" + 
-			"  IN2 n_2() {\n" + 
-			"  }\n" + 
-			"  <M>void m(Supplier<M> m2) {\n" + 
-			"  }\n" + 
-			"  void testSw(int i) {\n" + 
-			"    m(switch (i) {\n" + 
-			"case 1 ->\n" + 
-			" <SelectionOnReferenceExpressionName:this::n_1>;\n" + 
-			"default ->\n" + 
-			" this::n_2;\n" + 
-			"});\n" + 
-			"  }\n" + 
-			"}\n";
-	String expectedReplacedSource = "this::n_1";
-	String testName = "X.java";
-
-	int selectionStart = string.lastIndexOf(selection);
-	int selectionEnd = selectionStart + selection.length() - 1;
-
-	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
-			selectionIdentifier, expectedReplacedSource, testName);
-}
-public void test019() throws JavaModelException {
-	String string =  "import org.eclipse.jdt.annotation.*;\n" + 
-			"import java.util.function.*;\n" + 
-			"interface IN0 {} \n" + 
-			"interface IN1 extends IN0 {} \n" + 
-			"interface IN2 extends IN0 {}\n" + 
-			"public class X {\n" + 
-			"	 IN1 n_1() { return new IN1() {}; } \n" + 
-			"	IN2 n_2() { return null; } \n" + 
-			"	<M> void m( Supplier< M> m2) { } \n" + 
-			"	void testSw(int i) { \n" + 
-			"		m(switch(i) { \n" + 
-			"			case 2 -> () -> n_1(); \n" + 
-			"			default -> this::n_2; }); \n" + 
-			"	}\n" + 
-			"}";
-
-	String selection = "n_1";
-	String selectKey = "<SelectOnMessageSend:";
-	String expectedSelection = selectKey + selection + "()>";
-
-	String selectionIdentifier = "n_1";
-	String expectedUnitDisplayString =
-			"import org.eclipse.jdt.annotation.*;\n" + 
-			"import java.util.function.*;\n" + 
-			"interface IN0 {\n" + 
-			"}\n" + 
-			"interface IN1 extends IN0 {\n" + 
-			"}\n" + 
-			"interface IN2 extends IN0 {\n" + 
-			"}\n" + 
-			"public class X {\n" + 
-			"  public X() {\n" + 
-			"  }\n" + 
-			"  IN1 n_1() {\n" + 
-			"  }\n" + 
-			"  IN2 n_2() {\n" + 
-			"  }\n" + 
-			"  <M>void m(Supplier<M> m2) {\n" + 
-			"  }\n" + 
-			"  void testSw(int i) {\n" + 
-			"    m(switch (i) {\n" + 
-			"case 2 ->\n" + 
-			" () -> <SelectOnMessageSend:n_1()>;\n" + 
-			"default ->\n" + 
-			" this::n_2;\n" + 
-			"});\n" + 
-			"  }\n" + 
-			"}\n";
-	String expectedReplacedSource = "n_1()";
-	String testName = "X.java";
-
-	int selectionStart = string.lastIndexOf(selection);
-	int selectionEnd = selectionStart + selection.length() - 1;
-
-	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
-			selectionIdentifier, expectedReplacedSource, testName);
-}
-public void test020() throws JavaModelException {
-	String string =  "import org.eclipse.jdt.annotation.*;\n" + 
-			"import java.util.function.*;\n" + 
-			"interface IN0 {} \n" + 
-			"interface IN1 extends IN0 {} \n" + 
-			"interface IN2 extends IN0 {}\n" + 
-			"public class X {\n" + 
-			"	 IN1 n_1() { return new IN1() {}; } \n" + 
-			"	IN2 n_2() { return null; } \n" + 
-			"	<M> void m( Supplier< M> m2) { } \n" + 
-			"	void testSw(int i) { \n" + 
-			"		m(switch(i) { \n" + 
-			"			default -> this::n_2; }); \n" + 
-			"	}\n" + 
-			"}";
-
-	String selection = "n_2";
-	String selectKey = "<SelectionOnReferenceExpressionName:this::";
-	String expectedSelection = selectKey + selection + ">";
-
-	String selectionIdentifier = "n_2";
-	String expectedUnitDisplayString =
-			"import org.eclipse.jdt.annotation.*;\n" + 
-			"import java.util.function.*;\n" + 
-			"interface IN0 {\n" + 
-			"}\n" + 
-			"interface IN1 extends IN0 {\n" + 
-			"}\n" + 
-			"interface IN2 extends IN0 {\n" + 
-			"}\n" + 
-			"public class X {\n" + 
-			"  public X() {\n" + 
-			"  }\n" + 
-			"  IN1 n_1() {\n" + 
-			"  }\n" + 
-			"  IN2 n_2() {\n" + 
-			"  }\n" + 
-			"  <M>void m(Supplier<M> m2) {\n" + 
-			"  }\n" + 
-			"  void testSw(int i) {\n" + 
-			"    m(switch (i) {\n" + 
-			"default ->\n" + 
-			" <SelectionOnReferenceExpressionName:this::n_2>;\n" + 
-			"});\n" + 
-			"  }\n" + 
-			"}\n";
-	String expectedReplacedSource = "this::n_2";
-	String testName = "X.java";
-
-	int selectionStart = string.lastIndexOf(selection);
-	int selectionEnd = selectionStart + selection.length() - 1;
-
-	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
-			selectionIdentifier, expectedReplacedSource, testName);
-}
-public void test021() throws JavaModelException {
-	String string =  "import org.eclipse.jdt.annotation.*;\n" + 
-			"import java.util.function.*;\n" + 
-			"interface IN0 {} \n" + 
-			"interface IN1 extends IN0 {} \n" + 
-			"interface IN2 extends IN0 {}\n" + 
-			"public class X {\n" + 
-			"	 IN1 n_1(int ijk) { return new IN1() {}; } \n" + 
-			"	IN2 n_2() { return null; } \n" + 
-			"	<M> void m( Supplier< M> m2) { } \n" + 
-			"	void testSw(int ijk) { \n" + 
-			"		m(switch(ijk) { \n" + 
-			"			default -> () -> n_1(ijk); }); \n" + 
-			"	}\n" + 
-			"}";
-
-	String selection = "n_1";
-	String selectKey = "<SelectOnMessageSend:";
-	String expectedSelection = selectKey + selection + "(ijk)>";
-
-	String selectionIdentifier = "n_1";
-	String expectedUnitDisplayString =
-			"import org.eclipse.jdt.annotation.*;\n" + 
-			"import java.util.function.*;\n" + 
-			"interface IN0 {\n" + 
-			"}\n" + 
-			"interface IN1 extends IN0 {\n" + 
-			"}\n" + 
-			"interface IN2 extends IN0 {\n" + 
-			"}\n" + 
-			"public class X {\n" + 
-			"  public X() {\n" + 
-			"  }\n" + 
-			"  IN1 n_1(int ijk) {\n" + 
-			"  }\n" + 
-			"  IN2 n_2() {\n" + 
-			"  }\n" + 
-			"  <M>void m(Supplier<M> m2) {\n" + 
-			"  }\n" + 
-			"  void testSw(int ijk) {\n" + 
-			"    m(switch (ijk) {\n" + 
-			"default ->\n" + 
-			" () -> <SelectOnMessageSend:n_1(ijk)>;\n" + 
-			"});\n" + 
-			"  }\n" + 
-			"}\n";
-	String expectedReplacedSource = "n_1(ijk)";
-	String testName = "X.java";
-
-	int selectionStart = string.lastIndexOf(selection);
-	int selectionEnd = selectionStart + selection.length() - 1;
-
-	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
-			selectionIdentifier, expectedReplacedSource, testName);
-}
-public void test022() throws JavaModelException {
-	String string =  "import org.eclipse.jdt.annotation.*;\n" + 
-			"import java.util.function.*;\n" + 
-			"interface IN0 {} \n" + 
-			"interface IN1 extends IN0 {} \n" + 
-			"interface IN2 extends IN0 {}\n" + 
-			"public class X {\n" + 
-			"	 IN1 n_1(int ijk) { return new IN1() {}; } \n" + 
-			"	IN2 n_2() { return null; } \n" + 
-			"	<M> void m( Supplier< M> m2) { } \n" + 
-			"	void testSw(int ijk) { \n" + 
-			"		m(switch(ijk) { \n" + 
-			"			default -> () -> n_1(ijk); }); \n" + 
-			"	}\n" + 
-			"}";
-
-	String selection = "ijk";
-	String selectKey = "<SelectOnName:";
-	String expectedSelection = selectKey + selection + ">";
-
-	String selectionIdentifier = "ijk";
-	String expectedUnitDisplayString =
-			"import org.eclipse.jdt.annotation.*;\n" + 
-			"import java.util.function.*;\n" + 
-			"interface IN0 {\n" + 
-			"}\n" + 
-			"interface IN1 extends IN0 {\n" + 
-			"}\n" + 
-			"interface IN2 extends IN0 {\n" + 
-			"}\n" + 
-			"public class X {\n" + 
-			"  public X() {\n" + 
-			"  }\n" + 
-			"  IN1 n_1(int ijk) {\n" + 
-			"  }\n" + 
-			"  IN2 n_2() {\n" + 
-			"  }\n" + 
-			"  <M>void m(Supplier<M> m2) {\n" + 
-			"  }\n" + 
-			"  void testSw(int ijk) {\n" + 
-			"    m(switch (ijk) {\n" + 
-			"default ->\n" + 
-			" () -> n_1(<SelectOnName:ijk>);\n" + 
-			"});\n" + 
-			"  }\n" + 
-			"}\n";
-	String expectedReplacedSource = "ijk";
-	String testName = "X.java";
-
-	int selectionStart = string.lastIndexOf(selection);
-	int selectionEnd = selectionStart + selection.length() - 1;
-
-	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
-			selectionIdentifier, expectedReplacedSource, testName);
-}
 }
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/SelectionParserTest13.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/SelectionParserTest13.java
new file mode 100644
index 0000000..434612a
--- /dev/null
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/SelectionParserTest13.java
@@ -0,0 +1,1074 @@
+/*******************************************************************************
+ * Copyright (c) 2019 IBM Corporation and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.core.tests.compiler.parser;
+
+import org.eclipse.jdt.core.JavaModelException;
+
+import junit.framework.Test;
+
+public class SelectionParserTest13 extends AbstractSelectionTest {
+static {
+//		TESTS_NUMBERS = new int[] { 1 };
+//		TESTS_NAMES = new String[] { "test005" };
+}
+public static Test suite() {
+	return buildMinimalComplianceTestSuite(SelectionParserTest13.class, F_13);
+}
+
+public SelectionParserTest13(String testName) {
+	super(testName);
+}
+/*
+ * Multi constant case statement with ':', selection node is the string constant
+ */
+public void test001() throws JavaModelException {
+	String string =  "public class X {\n" +
+	"static final String ONE=\"One\", TWO = \"Two\", THREE=\"Three\";\n" +
+	"  public static void foo(String num) {\n" +
+	" 	 switch (num) {\n" +
+	"	   case ONE, TWO, THREE:\n" +
+	"		 System.out.println(num);\n" +
+	"		 break;\n" +
+	"    }" +
+	"  }\n" +
+	"}";
+
+	String selection = "ONE";
+	String selectKey = "<SelectOnName:";
+	String expectedSelection = selectKey + selection + ">";
+
+	String selectionIdentifier = "ONE";
+	String expectedUnitDisplayString =
+			"public class X {\n" + 
+					"  static final String ONE;\n" + 
+					"  static final String TWO;\n" + 
+					"  static final String THREE;\n" + 
+					"  <clinit>() {\n" + 
+					"  }\n" + 
+					"  public X() {\n" + 
+					"  }\n" + 
+					"  public static void foo(String num) {\n" + 
+					"    {\n" + 
+					"      switch (num) {\n" + 
+					"      case <SelectOnName:ONE> :\n" + 
+					"      }\n" + 
+					"    }\n" + 
+					"  }\n" + 
+					"}\n";
+	String expectedReplacedSource = "ONE";
+	String testName = "X.java";
+
+	int selectionStart = string.lastIndexOf(selection);
+	int selectionEnd = string.lastIndexOf(selection) + selection.length() - 1;
+
+	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
+			selectionIdentifier, expectedReplacedSource, testName);
+}
+/*
+ * Multi constant case statement with ':', selection node is the first enum constant
+ */
+public void test002() throws JavaModelException {
+	String string =  "public class X {\n" +
+	"  public static void foo(Num num) {\n" +
+	" 	 switch (num) {\n" +
+	"	   case ONE, TWO, THREE:\n" +
+	"		 System.out.println(num);\n" +
+	"		 break;\n" +
+	"    }" +
+	"  }\n" +
+	"	enum Num { ONE, TWO, THREE;}\n" +
+	"}";
+
+	String selection = "ONE";
+	String selectKey = "<SelectOnName:";
+	String expectedSelection = selectKey + selection + ">";
+
+	String selectionIdentifier = "ONE";
+	String expectedUnitDisplayString =
+			"public class X {\n" + 
+					"  enum Num {\n" + 
+					"    ONE(),\n" + 
+					"    TWO(),\n" + 
+					"    THREE(),\n" + 
+					"    <clinit>() {\n" + 
+					"    }\n" + 
+					"    Num() {\n" + 
+					"    }\n" + 
+					"  }\n" + 
+					"  public X() {\n" + 
+					"  }\n" + 
+					"  public static void foo(Num num) {\n" + 
+					"    {\n" + 
+					"      switch (num) {\n" + 
+					"      case <SelectOnName:ONE> :\n" + 
+					"      }\n" + 
+					"    }\n" + 
+					"  }\n" + 
+					"}\n";
+	String expectedReplacedSource = "ONE";
+	String testName = "X.java";
+
+	int selectionStart = string.indexOf(selection);
+	int selectionEnd = selectionStart + selection.length() - 1;
+
+	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
+			selectionIdentifier, expectedReplacedSource, testName);
+}
+/*
+ * Multi constant case statement with ':', selection node is the second string constant
+ */
+public void test003() throws JavaModelException {
+	String string =  "public class X {\n" +
+	"static final String ONE=\"One\", TWO = \"Two\", THREE=\"Three\";\n" +
+	"  public static void foo(String num) {\n" +
+	" 	 switch (num) {\n" +
+	"	   case ONE, TWO, THREE:\n" +
+	"		 System.out.println(num);\n" +
+	"		 break;\n" +
+	"    }" +
+	"  }\n" +
+	"}";
+
+	String selection = "TWO";
+	String selectKey = "<SelectOnName:";
+	String expectedSelection = selectKey + selection + ">";
+
+	String selectionIdentifier = "TWO";
+	String expectedUnitDisplayString =
+			"public class X {\n" + 
+					"  static final String ONE;\n" + 
+					"  static final String TWO;\n" + 
+					"  static final String THREE;\n" + 
+					"  <clinit>() {\n" + 
+					"  }\n" + 
+					"  public X() {\n" + 
+					"  }\n" + 
+					"  public static void foo(String num) {\n" + 
+					"    {\n" + 
+					"      switch (num) {\n" + 
+					"      case <SelectOnName:TWO> :\n" + 
+					"      }\n" + 
+					"    }\n" + 
+					"  }\n" + 
+					"}\n";
+	String expectedReplacedSource = "TWO";
+	String testName = "X.java";
+
+	int selectionStart = string.lastIndexOf(selection);
+	int selectionEnd = string.lastIndexOf(selection) + selection.length() - 1;
+
+	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
+			selectionIdentifier, expectedReplacedSource, testName);
+}
+/*
+ * Multi constant case statement with ':', selection node is the second enum constant
+ */
+public void test004() throws JavaModelException {
+	String string =  "public class X {\n" +
+	"  public static void foo(Num num) {\n" +
+	" 	 switch (num) {\n" +
+	"	   case ONE, TWO, THREE:\n" +
+	"		 System.out.println(num);\n" +
+	"		 break;\n" +
+	"    }" +
+	"  }\n" +
+	"	enum Num { ONE, TWO, THREE;}\n" +
+	"}";
+
+	String selection = "TWO";
+	String selectKey = "<SelectOnName:";
+	String expectedSelection = selectKey + selection + ">";
+
+	String selectionIdentifier = "TWO";
+	String expectedUnitDisplayString =
+			"public class X {\n" + 
+					"  enum Num {\n" + 
+					"    ONE(),\n" + 
+					"    TWO(),\n" + 
+					"    THREE(),\n" + 
+					"    <clinit>() {\n" + 
+					"    }\n" + 
+					"    Num() {\n" + 
+					"    }\n" + 
+					"  }\n" + 
+					"  public X() {\n" + 
+					"  }\n" + 
+					"  public static void foo(Num num) {\n" + 
+					"    {\n" + 
+					"      switch (num) {\n" + 
+					"      case <SelectOnName:TWO> :\n" + 
+					"      }\n" + 
+					"    }\n" + 
+					"  }\n" + 
+					"}\n";
+	String expectedReplacedSource = "TWO";
+	String testName = "X.java";
+
+	int selectionStart = string.indexOf(selection);
+	int selectionEnd = selectionStart + selection.length() - 1;
+
+	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
+			selectionIdentifier, expectedReplacedSource, testName);
+}
+/*
+ * Multi constant case statement with '->', selection node is the string constant
+ */
+public void test005() throws JavaModelException {
+	String string =  "public class X {\n" +
+	"static final String ONE=\"One\", TWO = \"Two\", THREE=\"Three\";\n" +
+	"  public static void foo(String num) {\n" +
+	" 	 switch (num) {\n" +
+	"	   case ONE, TWO, THREE ->\n" +
+	"		 System.out.println(num);\n" +
+	"    }" +
+	"  }\n" +
+	"}";
+	/*
+	 * Note: The completion parser ignores the -> that follows and we end up creating
+	 * the CaseStatement without maring it as an Expression, hence the ':' instead of the '->'
+	 */
+	String selection = "ONE";
+	String selectKey = "<SelectOnName:";
+	String expectedSelection = selectKey + selection + ">";
+	String selectionIdentifier = "ONE";
+	String expectedUnitDisplayString =
+			"public class X {\n" + 
+					"  static final String ONE;\n" + 
+					"  static final String TWO;\n" + 
+					"  static final String THREE;\n" + 
+					"  <clinit>() {\n" + 
+					"  }\n" + 
+					"  public X() {\n" + 
+					"  }\n" + 
+					"  public static void foo(String num) {\n" + 
+					"    {\n" + 
+					"      switch (num) {\n" + 
+					"      case <SelectOnName:ONE> :\n" + 
+					"      }\n" + 
+					"    }\n" + 
+					"  }\n" + 
+					"}\n";
+	String expectedReplacedSource = "ONE";
+	String testName = "X.java";
+
+	int selectionStart = string.lastIndexOf(selection);
+	int selectionEnd = string.lastIndexOf(selection) + selection.length() - 1;
+
+	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
+			selectionIdentifier, expectedReplacedSource, testName);
+}
+/*
+ * Multi constant case statement with '->', selection node is the first enum constant
+ */
+public void test006() throws JavaModelException {
+	String string =  "public class X {\n" +
+	"  public static void foo(Num num) {\n" +
+	" 	 switch (num) {\n" +
+	"	   case ONE, TWO, THREE ->\n" +
+	"		 System.out.println(num);\n" +
+	"		 break; // illegal, but should be ignored and shouldn't matter\n" +
+	"    }" +
+	"  }\n" +
+	"	enum Num { ONE, TWO, THREE;}\n" +
+	"}";
+
+	String selection = "ONE";
+	String selectKey = "<SelectOnName:";
+	String expectedSelection = selectKey + selection + ">";
+
+	String selectionIdentifier = "ONE";
+	String expectedUnitDisplayString =
+			"public class X {\n" + 
+					"  enum Num {\n" + 
+					"    ONE(),\n" + 
+					"    TWO(),\n" + 
+					"    THREE(),\n" + 
+					"    <clinit>() {\n" + 
+					"    }\n" + 
+					"    Num() {\n" + 
+					"    }\n" + 
+					"  }\n" + 
+					"  public X() {\n" + 
+					"  }\n" + 
+					"  public static void foo(Num num) {\n" + 
+					"    {\n" + 
+					"      switch (num) {\n" + 
+					"      case <SelectOnName:ONE> :\n" + 
+					"      }\n" + 
+					"    }\n" + 
+					"  }\n" + 
+					"}\n";
+	String expectedReplacedSource = "ONE";
+	String testName = "X.java";
+
+	int selectionStart = string.indexOf(selection);
+	int selectionEnd = selectionStart + selection.length() - 1;
+
+	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
+			selectionIdentifier, expectedReplacedSource, testName);
+}
+/*
+ * Multi constant case statement with '->', selection node is the second string constant
+ */
+public void test007() throws JavaModelException {
+	String string =  "public class X {\n" +
+	"static final String ONE=\"One\", TWO = \"Two\", THREE=\"Three\";\n" +
+	"  public static void foo(String num) {\n" +
+	" 	 switch (num) {\n" +
+	"	   case ONE, TWO, THREE ->\n" +
+	"		 System.out.println(num);\n" +
+	"		 break;\n" +
+	"    }" +
+	"  }\n" +
+	"}";
+
+	String selection = "TWO";
+	String selectKey = "<SelectOnName:";
+	String expectedSelection = selectKey + selection + ">";
+
+	String selectionIdentifier = "TWO";
+	String expectedUnitDisplayString =
+			"public class X {\n" + 
+					"  static final String ONE;\n" + 
+					"  static final String TWO;\n" + 
+					"  static final String THREE;\n" + 
+					"  <clinit>() {\n" + 
+					"  }\n" + 
+					"  public X() {\n" + 
+					"  }\n" + 
+					"  public static void foo(String num) {\n" + 
+					"    {\n" + 
+					"      switch (num) {\n" + 
+					"      case <SelectOnName:TWO> :\n" + 
+					"      }\n" + 
+					"    }\n" + 
+					"  }\n" + 
+					"}\n";
+	String expectedReplacedSource = "TWO";
+	String testName = "X.java";
+
+	int selectionStart = string.lastIndexOf(selection);
+	int selectionEnd = string.lastIndexOf(selection) + selection.length() - 1;
+
+	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
+			selectionIdentifier, expectedReplacedSource, testName);
+}
+/*
+ * Multi constant case statement with '->', selection node is the second enum constant
+ */
+public void test008() throws JavaModelException {
+	String string =  "public class X {\n" +
+	"  public static void foo(Num num) {\n" +
+	" 	 switch (num) {\n" +
+	"	   case ONE, TWO, THREE ->\n" +
+	"		 System.out.println(num);\n" +
+	"		 break;\n" +
+	"    }" +
+	"  }\n" +
+	"	enum Num { ONE, TWO, THREE;}\n" +
+	"}";
+
+	String selection = "TWO";
+	String selectKey = "<SelectOnName:";
+	String expectedSelection = selectKey + selection + ">";
+
+	String selectionIdentifier = "TWO";
+	String expectedUnitDisplayString =
+			"public class X {\n" + 
+					"  enum Num {\n" + 
+					"    ONE(),\n" + 
+					"    TWO(),\n" + 
+					"    THREE(),\n" + 
+					"    <clinit>() {\n" + 
+					"    }\n" + 
+					"    Num() {\n" + 
+					"    }\n" + 
+					"  }\n" + 
+					"  public X() {\n" + 
+					"  }\n" + 
+					"  public static void foo(Num num) {\n" + 
+					"    {\n" + 
+					"      switch (num) {\n" + 
+					"      case <SelectOnName:TWO> :\n" + 
+					"      }\n" + 
+					"    }\n" + 
+					"  }\n" + 
+					"}\n";
+	String expectedReplacedSource = "TWO";
+	String testName = "X.java";
+
+	int selectionStart = string.indexOf(selection);
+	int selectionEnd = selectionStart + selection.length() - 1;
+
+	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
+			selectionIdentifier, expectedReplacedSource, testName);
+}
+/*
+ * Multi constant case statement with '->', selection is a reference in the case block
+ * which same as the switch's expression
+ */
+public void test009() throws JavaModelException {
+	String string =  "public class X {\n" +
+	"  public static void foo(Num num_) {\n" +
+	" 	 switch (num_) {\n" +
+	"	   case ONE, TWO, THREE ->\n" +
+	"		 System.out.println(num_);\n" +
+	"		 break;\n" +
+	"    }" +
+	"  }\n" +
+	"	enum Num { ONE, TWO, THREE;}\n" +
+	"}";
+
+	String selection = "num_";
+	String selectKey = "<SelectOnName:";
+	String expectedSelection = selectKey + selection + ">";
+
+	String selectionIdentifier = "num_";
+	String expectedUnitDisplayString =
+			"public class X {\n" + 
+			"  enum Num {\n" + 
+			"    ONE(),\n" + 
+			"    TWO(),\n" + 
+			"    THREE(),\n" + 
+			"    <clinit>() {\n" + 
+			"    }\n" + 
+			"    Num() {\n" + 
+			"    }\n" + 
+			"  }\n" + 
+			"  public X() {\n" + 
+			"  }\n" + 
+			"  public static void foo(Num num_) {\n" + 
+			"    {\n" + 
+			"      <SelectOnName:num_>;\n" + 
+			"    }\n" + 
+			"  }\n" + 
+			"}\n";
+	String expectedReplacedSource = "num_";
+	String testName = "X.java";
+
+	int selectionStart = string.lastIndexOf(selection);
+	int selectionEnd = selectionStart + selection.length() - 1;
+
+	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
+			selectionIdentifier, expectedReplacedSource, testName);
+}
+/*
+ * Multi constant case statement with '->', selection is a reference in the case block
+ * which is referencing a local variable defined in the case block
+ */
+public void test010() throws JavaModelException {
+	String string =  "public class X {\n" +
+	"  public static void foo(Num num_) {\n" +
+	" 	 switch (num_) {\n" +
+	"	   case ONE, TWO, THREE -> {\n" +
+	"		 int i_j = 0;" +
+	"		 System.out.println(i_j);\n" +
+	"		 break;" +
+	"		 }\n" +
+	"    }" +
+	"  }\n" +
+	"	enum Num { ONE, TWO, THREE;}\n" +
+	"}";
+
+	String selection = "i_j";
+	String selectKey = "<SelectOnName:";
+	String expectedSelection = selectKey + selection + ">";
+
+	String selectionIdentifier = "i_j";
+	String expectedUnitDisplayString =
+			"public class X {\n" + 
+			"  enum Num {\n" + 
+			"    ONE(),\n" + 
+			"    TWO(),\n" + 
+			"    THREE(),\n" + 
+			"    <clinit>() {\n" + 
+			"    }\n" + 
+			"    Num() {\n" + 
+			"    }\n" + 
+			"  }\n" + 
+			"  public X() {\n" + 
+			"  }\n" + 
+			"  public static void foo(Num num_) {\n" + 
+			"    {\n" + 
+			"      {\n" + 
+			"        int i_j;\n" + 
+			"        <SelectOnName:i_j>;\n" + 
+			"      }\n" + 
+			"    }\n" + 
+			"  }\n" + 
+			"}\n";
+	String expectedReplacedSource = "i_j";
+	String testName = "X.java";
+
+	int selectionStart = string.lastIndexOf(selection);
+	int selectionEnd = selectionStart + selection.length() - 1;
+
+	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
+			selectionIdentifier, expectedReplacedSource, testName);
+}
+/*
+ * Multi constant case statement with '->', selection is a referenced name of type enum in switch expression
+ */
+public void test011() throws JavaModelException {
+	String string =  "public class X {\n" +
+	"  public static void foo(Num num_) {\n" +
+	" 	 switch (num_) {\n" +
+	"	   case ONE, TWO, THREE -> {\n" +
+	"		 break;" +
+	"		 }\n" +
+	"    }" +
+	"  }\n" +
+	"	enum Num { ONE, TWO, THREE;}\n" +
+	"}";
+
+	String selection = "num_";
+	String selectKey = "<SelectOnName:";
+	String expectedSelection = selectKey + selection + ">";
+
+	String selectionIdentifier = "num_";
+	String expectedUnitDisplayString =
+			"public class X {\n" + 
+			"  enum Num {\n" + 
+			"    ONE(),\n" + 
+			"    TWO(),\n" + 
+			"    THREE(),\n" + 
+			"    <clinit>() {\n" + 
+			"    }\n" + 
+			"    Num() {\n" + 
+			"    }\n" + 
+			"  }\n" + 
+			"  public X() {\n" + 
+			"  }\n" + 
+			"  public static void foo(Num num_) {\n" + 
+			"    <SelectOnName:num_>;\n" + 
+			"  }\n" + 
+			"}\n";
+	String expectedReplacedSource = "num_";
+	String testName = "X.java";
+
+	int selectionStart = string.lastIndexOf(selection);
+	int selectionEnd = selectionStart + selection.length() - 1;
+
+	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
+			selectionIdentifier, expectedReplacedSource, testName);
+}
+/*
+ * Multi constant case statement with '->', selection is a referenced name of type int in switch expression
+ */
+public void test012() throws JavaModelException {
+	String string =  "public class X {\n" +
+	"  public static void foo(int num_) {\n" +
+	" 	 switch (num_ + 1) {\n" +
+	"	   case 1, 2, 3 -> {\n" +
+	"		 break;" +
+	"		 }\n" +
+	"    }" +
+	"  }\n" +
+	"}";
+
+	String selection = "num_";
+	String selectKey = "<SelectOnName:";
+	String expectedSelection = selectKey + selection + ">";
+
+	String selectionIdentifier = "num_";
+	String expectedUnitDisplayString =
+			"public class X {\n" + 
+			"  public X() {\n" + 
+			"  }\n" + 
+			"  public static void foo(int num_) {\n" + 
+			"    <SelectOnName:num_>;\n" + 
+			"  }\n" + 
+			"}\n";
+	String expectedReplacedSource = "num_";
+	String testName = "X.java";
+
+	int selectionStart = string.lastIndexOf(selection);
+	int selectionEnd = selectionStart + selection.length() - 1;
+
+	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
+			selectionIdentifier, expectedReplacedSource, testName);
+}
+/*
+ * Multi constant case statement with '->', selection is a referenced name of type int in switch expression
+ */
+public void test013() throws JavaModelException {
+	String string =  "public class X {\n" +
+	"  public static void foo(int num_) {\n" +
+	" 	 int i = switch (num_) {\n" +
+	"	   case 1, 2, 3 -> (num_ + 1);\n" +
+	"      default -> 0;\n" + 
+	"    }" +
+	"  }\n" +
+	"}";
+
+	String selection = "num_";
+	String selectKey = "<SelectOnName:";
+	String expectedSelection = selectKey + selection + ">";
+
+	String selectionIdentifier = "num_";
+	String expectedUnitDisplayString =
+			"public class X {\n" + 
+			"  public X() {\n" + 
+			"  }\n" + 
+			"  public static void foo(int num_) {\n" + 
+			"    int i;\n" + 
+			"    {\n" + 
+			"      <SelectOnName:num_>;\n" + 
+			"    }\n" + 
+			"  }\n" + 
+			"}\n";
+	String expectedReplacedSource = "num_";
+	String testName = "X.java";
+
+	int selectionStart = string.lastIndexOf(selection);
+	int selectionEnd = selectionStart + selection.length() - 1;
+
+	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
+			selectionIdentifier, expectedReplacedSource, testName);
+}
+/*
+ * Multi constant case statement with '->', selection is a referenced name of type int in switch expression
+ */
+public void test014() throws JavaModelException {
+	String string =  "public class X {\n" +
+	"  public static void foo(int num_) {\n" +
+	" 	 int i = switch (num_) {\n" +
+	"	   case 1, 2, 3 -> 0;\n" +
+	"      default -> (num_ + 1);\n" + 
+	"    }" +
+	"  }\n" +
+	"}";
+
+	String selection = "num_";
+	String selectKey = "<SelectOnName:";
+	String expectedSelection = selectKey + selection + ">";
+
+	String selectionIdentifier = "num_";
+	String expectedUnitDisplayString =
+			"public class X {\n" + 
+			"  public X() {\n" + 
+			"  }\n" + 
+			"  public static void foo(int num_) {\n" + 
+			"    int i;\n" + 
+			"    {\n" + 
+			"      <SelectOnName:num_>;\n" + 
+			"    }\n" + 
+			"  }\n" + 
+			"}\n";
+	String expectedReplacedSource = "num_";
+	String testName = "X.java";
+
+	int selectionStart = string.lastIndexOf(selection);
+	int selectionEnd = selectionStart + selection.length() - 1;
+
+	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
+			selectionIdentifier, expectedReplacedSource, testName);
+}
+/*
+ * Multi constant case statement with '->', selection is a referenced name of type int in switch expression
+ */
+public void test015() throws JavaModelException {
+	String string =  "public class X {\n" +
+	"  public static void foo(int num_) {\n" +
+	" 	 int i = switch (num_) {\n" +
+	"	   case 1, 2, 3 -> 0;\n" +
+	"      default -> (num_ + 1);\n" + 
+	"    }" +
+	"  }\n" +
+	"}";
+
+	String selection = "num_";
+	String selectKey = "<SelectOnName:";
+	String expectedSelection = selectKey + selection + ">";
+
+	String selectionIdentifier = "num_";
+	String expectedUnitDisplayString =
+			"public class X {\n" + 
+			"  public X() {\n" + 
+			"  }\n" + 
+			"  public static void foo(int num_) {\n" + 
+			"    int i;\n" + 
+			"    {\n" + 
+			"      <SelectOnName:num_>;\n" + 
+			"    }\n" + 
+			"  }\n" + 
+			"}\n";
+	String expectedReplacedSource = "num_";
+	String testName = "X.java";
+
+	int selectionStart = string.lastIndexOf(selection);
+	int selectionEnd = selectionStart + selection.length() - 1;
+
+	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
+			selectionIdentifier, expectedReplacedSource, testName);
+}
+/*
+ * Multi constant case statement with '->', selection is a referenced name of type int in switch expression
+ */
+public void test016() throws JavaModelException {
+	String string =  "public class X {\n" + 
+			"	public void bar(int s) {\n" + 
+			"		int i_j = switch (s) {\n" + 
+			"			case 1, 2, 3 -> (s+1);\n" +
+			"			default -> i_j;\n" + 
+			"		};\n" + 
+			"	}\n" + 
+			"}\n";
+
+	String selection = "i_j";
+	String selectKey = "<SelectOnName:";
+	String expectedSelection = selectKey + selection + ">";
+
+	String selectionIdentifier = "i_j";
+	String expectedUnitDisplayString =
+			"public class X {\n" + 
+			"  public X() {\n" + 
+			"  }\n" + 
+			"  public void bar(int s) {\n" + 
+			"    int i_j;\n" + 
+			"    {\n" + 
+			"      <SelectOnName:i_j>;\n" + 
+			"    }\n" + 
+			"  }\n" + 
+			"}\n";
+	String expectedReplacedSource = "i_j";
+	String testName = "X.java";
+
+	int selectionStart = string.lastIndexOf(selection);
+	int selectionEnd = selectionStart + selection.length() - 1;
+
+	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
+			selectionIdentifier, expectedReplacedSource, testName);
+}
+public void test017() throws JavaModelException {
+	String string =  "public class X {\n" + 
+			"	public void bar(int s) {\n" + 
+			"		int i_j = switch (s) {\n" + 
+			"			case 1, 2, 3 -> (s+1);\n" +
+			"			default -> (1+i_j);\n" + 
+			"		};\n" + 
+			"	}\n" + 
+			"}\n";
+
+	String selection = "i_j";
+	String selectKey = "<SelectOnName:";
+	String expectedSelection = selectKey + selection + ">";
+
+	String selectionIdentifier = "i_j";
+	String expectedUnitDisplayString =
+			"public class X {\n" + 
+			"  public X() {\n" + 
+			"  }\n" + 
+			"  public void bar(int s) {\n" + 
+			"    int i_j;\n" + 
+			"    {\n" + 
+			"      <SelectOnName:i_j>;\n" + 
+			"    }\n" + 
+			"  }\n" + 
+			"}\n";
+	String expectedReplacedSource = "i_j";
+	String testName = "X.java";
+
+	int selectionStart = string.lastIndexOf(selection);
+	int selectionEnd = selectionStart + selection.length() - 1;
+
+	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
+			selectionIdentifier, expectedReplacedSource, testName);
+}
+public void test018() throws JavaModelException {
+	String string =  "import org.eclipse.jdt.annotation.*;\n" + 
+			"import java.util.function.*;\n" + 
+			"interface IN0 {} \n" + 
+			"interface IN1 extends IN0 {} \n" + 
+			"interface IN2 extends IN0 {}\n" + 
+			"public class X {\n" + 
+			"	 IN1 n_1() { return new IN1() {}; } \n" + 
+			"	IN2 n_2() { return null; } \n" + 
+			"	<M> void m( Supplier< M> m2) { } \n" + 
+			"	void testSw(int i) { \n" + 
+			"		m(switch(i) { \n" + 
+			"			case 1 -> this::n_1; \n" + 
+			"			default -> this::n_2; }); \n" + 
+			"	}\n" + 
+			"}";
+
+	String selection = "n_1";
+	String selectKey = "<SelectionOnReferenceExpressionName:this::";
+	String expectedSelection = selectKey + selection + ">";
+
+	String selectionIdentifier = "n_1";
+	String expectedUnitDisplayString =
+			"import org.eclipse.jdt.annotation.*;\n" + 
+			"import java.util.function.*;\n" + 
+			"interface IN0 {\n" + 
+			"}\n" + 
+			"interface IN1 extends IN0 {\n" + 
+			"}\n" + 
+			"interface IN2 extends IN0 {\n" + 
+			"}\n" + 
+			"public class X {\n" + 
+			"  public X() {\n" + 
+			"  }\n" + 
+			"  IN1 n_1() {\n" + 
+			"  }\n" + 
+			"  IN2 n_2() {\n" + 
+			"  }\n" + 
+			"  <M>void m(Supplier<M> m2) {\n" + 
+			"  }\n" + 
+			"  void testSw(int i) {\n" + 
+			"    m(switch (i) {\n" + 
+			"case 1 ->\n" + 
+			" <SelectionOnReferenceExpressionName:this::n_1>;\n" + 
+			"default ->\n" + 
+			" this::n_2;\n" + 
+			"});\n" + 
+			"  }\n" + 
+			"}\n";
+	String expectedReplacedSource = "this::n_1";
+	String testName = "X.java";
+
+	int selectionStart = string.lastIndexOf(selection);
+	int selectionEnd = selectionStart + selection.length() - 1;
+
+	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
+			selectionIdentifier, expectedReplacedSource, testName);
+}
+public void test019() throws JavaModelException {
+	String string =  "import org.eclipse.jdt.annotation.*;\n" + 
+			"import java.util.function.*;\n" + 
+			"interface IN0 {} \n" + 
+			"interface IN1 extends IN0 {} \n" + 
+			"interface IN2 extends IN0 {}\n" + 
+			"public class X {\n" + 
+			"	 IN1 n_1() { return new IN1() {}; } \n" + 
+			"	IN2 n_2() { return null; } \n" + 
+			"	<M> void m( Supplier< M> m2) { } \n" + 
+			"	void testSw(int i) { \n" + 
+			"		m(switch(i) { \n" + 
+			"			case 2 -> () -> n_1(); \n" + 
+			"			default -> this::n_2; }); \n" + 
+			"	}\n" + 
+			"}";
+
+	String selection = "n_1";
+	String selectKey = "<SelectOnMessageSend:";
+	String expectedSelection = selectKey + selection + "()>";
+
+	String selectionIdentifier = "n_1";
+	String expectedUnitDisplayString =
+			"import org.eclipse.jdt.annotation.*;\n" + 
+			"import java.util.function.*;\n" + 
+			"interface IN0 {\n" + 
+			"}\n" + 
+			"interface IN1 extends IN0 {\n" + 
+			"}\n" + 
+			"interface IN2 extends IN0 {\n" + 
+			"}\n" + 
+			"public class X {\n" + 
+			"  public X() {\n" + 
+			"  }\n" + 
+			"  IN1 n_1() {\n" + 
+			"  }\n" + 
+			"  IN2 n_2() {\n" + 
+			"  }\n" + 
+			"  <M>void m(Supplier<M> m2) {\n" + 
+			"  }\n" + 
+			"  void testSw(int i) {\n" + 
+			"    m(switch (i) {\n" + 
+			"case 2 ->\n" + 
+			" () -> <SelectOnMessageSend:n_1()>;\n" + 
+			"default ->\n" + 
+			" this::n_2;\n" + 
+			"});\n" + 
+			"  }\n" + 
+			"}\n";
+	String expectedReplacedSource = "n_1()";
+	String testName = "X.java";
+
+	int selectionStart = string.lastIndexOf(selection);
+	int selectionEnd = selectionStart + selection.length() - 1;
+
+	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
+			selectionIdentifier, expectedReplacedSource, testName);
+}
+public void test020() throws JavaModelException {
+	String string =  "import org.eclipse.jdt.annotation.*;\n" + 
+			"import java.util.function.*;\n" + 
+			"interface IN0 {} \n" + 
+			"interface IN1 extends IN0 {} \n" + 
+			"interface IN2 extends IN0 {}\n" + 
+			"public class X {\n" + 
+			"	 IN1 n_1() { return new IN1() {}; } \n" + 
+			"	IN2 n_2() { return null; } \n" + 
+			"	<M> void m( Supplier< M> m2) { } \n" + 
+			"	void testSw(int i) { \n" + 
+			"		m(switch(i) { \n" + 
+			"			default -> this::n_2; }); \n" + 
+			"	}\n" + 
+			"}";
+
+	String selection = "n_2";
+	String selectKey = "<SelectionOnReferenceExpressionName:this::";
+	String expectedSelection = selectKey + selection + ">";
+
+	String selectionIdentifier = "n_2";
+	String expectedUnitDisplayString =
+			"import org.eclipse.jdt.annotation.*;\n" + 
+			"import java.util.function.*;\n" + 
+			"interface IN0 {\n" + 
+			"}\n" + 
+			"interface IN1 extends IN0 {\n" + 
+			"}\n" + 
+			"interface IN2 extends IN0 {\n" + 
+			"}\n" + 
+			"public class X {\n" + 
+			"  public X() {\n" + 
+			"  }\n" + 
+			"  IN1 n_1() {\n" + 
+			"  }\n" + 
+			"  IN2 n_2() {\n" + 
+			"  }\n" + 
+			"  <M>void m(Supplier<M> m2) {\n" + 
+			"  }\n" + 
+			"  void testSw(int i) {\n" + 
+			"    m(switch (i) {\n" + 
+			"default ->\n" + 
+			" <SelectionOnReferenceExpressionName:this::n_2>;\n" + 
+			"});\n" + 
+			"  }\n" + 
+			"}\n";
+	String expectedReplacedSource = "this::n_2";
+	String testName = "X.java";
+
+	int selectionStart = string.lastIndexOf(selection);
+	int selectionEnd = selectionStart + selection.length() - 1;
+
+	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
+			selectionIdentifier, expectedReplacedSource, testName);
+}
+public void test021() throws JavaModelException {
+	String string =  "import org.eclipse.jdt.annotation.*;\n" + 
+			"import java.util.function.*;\n" + 
+			"interface IN0 {} \n" + 
+			"interface IN1 extends IN0 {} \n" + 
+			"interface IN2 extends IN0 {}\n" + 
+			"public class X {\n" + 
+			"	 IN1 n_1(int ijk) { return new IN1() {}; } \n" + 
+			"	IN2 n_2() { return null; } \n" + 
+			"	<M> void m( Supplier< M> m2) { } \n" + 
+			"	void testSw(int ijk) { \n" + 
+			"		m(switch(ijk) { \n" + 
+			"			default -> () -> n_1(ijk); }); \n" + 
+			"	}\n" + 
+			"}";
+
+	String selection = "n_1";
+	String selectKey = "<SelectOnMessageSend:";
+	String expectedSelection = selectKey + selection + "(ijk)>";
+
+	String selectionIdentifier = "n_1";
+	String expectedUnitDisplayString =
+			"import org.eclipse.jdt.annotation.*;\n" + 
+			"import java.util.function.*;\n" + 
+			"interface IN0 {\n" + 
+			"}\n" + 
+			"interface IN1 extends IN0 {\n" + 
+			"}\n" + 
+			"interface IN2 extends IN0 {\n" + 
+			"}\n" + 
+			"public class X {\n" + 
+			"  public X() {\n" + 
+			"  }\n" + 
+			"  IN1 n_1(int ijk) {\n" + 
+			"  }\n" + 
+			"  IN2 n_2() {\n" + 
+			"  }\n" + 
+			"  <M>void m(Supplier<M> m2) {\n" + 
+			"  }\n" + 
+			"  void testSw(int ijk) {\n" + 
+			"    m(switch (ijk) {\n" + 
+			"default ->\n" + 
+			" () -> <SelectOnMessageSend:n_1(ijk)>;\n" + 
+			"});\n" + 
+			"  }\n" + 
+			"}\n";
+	String expectedReplacedSource = "n_1(ijk)";
+	String testName = "X.java";
+
+	int selectionStart = string.lastIndexOf(selection);
+	int selectionEnd = selectionStart + selection.length() - 1;
+
+	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
+			selectionIdentifier, expectedReplacedSource, testName);
+}
+public void test022() throws JavaModelException {
+	String string =  "import org.eclipse.jdt.annotation.*;\n" + 
+			"import java.util.function.*;\n" + 
+			"interface IN0 {} \n" + 
+			"interface IN1 extends IN0 {} \n" + 
+			"interface IN2 extends IN0 {}\n" + 
+			"public class X {\n" + 
+			"	 IN1 n_1(int ijk) { return new IN1() {}; } \n" + 
+			"	IN2 n_2() { return null; } \n" + 
+			"	<M> void m( Supplier< M> m2) { } \n" + 
+			"	void testSw(int ijk) { \n" + 
+			"		m(switch(ijk) { \n" + 
+			"			default -> () -> n_1(ijk); }); \n" + 
+			"	}\n" + 
+			"}";
+
+	String selection = "ijk";
+	String selectKey = "<SelectOnName:";
+	String expectedSelection = selectKey + selection + ">";
+
+	String selectionIdentifier = "ijk";
+	String expectedUnitDisplayString =
+			"import org.eclipse.jdt.annotation.*;\n" + 
+			"import java.util.function.*;\n" + 
+			"interface IN0 {\n" + 
+			"}\n" + 
+			"interface IN1 extends IN0 {\n" + 
+			"}\n" + 
+			"interface IN2 extends IN0 {\n" + 
+			"}\n" + 
+			"public class X {\n" + 
+			"  public X() {\n" + 
+			"  }\n" + 
+			"  IN1 n_1(int ijk) {\n" + 
+			"  }\n" + 
+			"  IN2 n_2() {\n" + 
+			"  }\n" + 
+			"  <M>void m(Supplier<M> m2) {\n" + 
+			"  }\n" + 
+			"  void testSw(int ijk) {\n" + 
+			"    m(switch (ijk) {\n" + 
+			"default ->\n" + 
+			" () -> n_1(<SelectOnName:ijk>);\n" + 
+			"});\n" + 
+			"  }\n" + 
+			"}\n";
+	String expectedReplacedSource = "ijk";
+	String testName = "X.java";
+
+	int selectionStart = string.lastIndexOf(selection);
+	int selectionEnd = selectionStart + selection.length() - 1;
+
+	checkMethodParse(string.toCharArray(), selectionStart, selectionEnd, expectedSelection, expectedUnitDisplayString,
+			selectionIdentifier, expectedReplacedSource, testName);
+}
+}
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/TestAll.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/TestAll.java
index 8699a67..715e970 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/TestAll.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/parser/TestAll.java
@@ -8,6 +8,10 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *      Jesper Steen Møller <jesper@selskabet.org> - Contributions for
@@ -207,6 +211,28 @@
 		TestCase.RUN_ONLY_ID = null;
 		all.addTest(AbstractCompilerTest.buildComplianceTestSuite(ClassFileConstants.getComplianceLevelForJavaVersion(ClassFileConstants.MAJOR_VERSION_12), tests_12));
 	}
+	if ((possibleComplianceLevels & AbstractCompilerTest.F_13) != 0) {
+		ArrayList tests_13 = (ArrayList)testClasses.clone();
+		tests_13.addAll(TEST_CLASSES_1_5);
+		tests_13.add(ParserTest1_7.class);
+		tests_13.add(LambdaExpressionSyntaxTest.class);
+		tests_13.add(ReferenceExpressionSyntaxTest.class);
+		tests_13.add(TypeAnnotationSyntaxTest.class);
+		tests_13.add(CompletionParserTest18.class);
+		tests_13.add(SelectionParserTest18.class);
+		tests_13.add(SelectionParserTest9.class);
+		tests_13.add(SelectionParserTest10.class);
+		tests_13.add(SelectionParserTest12.class);
+		tests_13.add(ModuleDeclarationSyntaxTest.class);
+		tests_13.add(JEP286ReservedWordTest.class);
+		// Reset forgotten subsets tests
+		TestCase.TESTS_PREFIX = null;
+		TestCase.TESTS_NAMES = null;
+		TestCase.TESTS_NUMBERS= null;
+		TestCase.TESTS_RANGE = null;
+		TestCase.RUN_ONLY_ID = null;
+		all.addTest(AbstractCompilerTest.buildComplianceTestSuite(ClassFileConstants.getComplianceLevelForJavaVersion(ClassFileConstants.MAJOR_VERSION_13), tests_13));
+	}
 	return all;
 }
 public static Test suite() {
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AbstractRegressionTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AbstractRegressionTest.java
index d2f57f1..53389d3 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AbstractRegressionTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AbstractRegressionTest.java
@@ -304,6 +304,8 @@
 			return JavaCore.VERSION_11;
 		} else if(rawVersion.startsWith("12")) {
 			return JavaCore.VERSION_12;
+		} else if(rawVersion.startsWith("13")) {
+			return JavaCore.VERSION_13;
 		} else {
 			throw new RuntimeException("unknown javac version: " + rawVersion);
 		}
@@ -425,6 +427,20 @@
 				return 0200;
 			}
 		}
+		if (version == JavaCore.VERSION_13) {
+			if ("13-ea".equals(rawVersion)) {
+				return 0000;
+			}
+			if ("13".equals(rawVersion)) {
+				return 0000;
+			}
+			if ("13.0.1".equals(rawVersion)) {
+				return 0100;
+			}
+			if ("13.0.2".equals(rawVersion)) {
+				return 0200;
+			}
+		}
 		throw new RuntimeException("unknown raw javac version: " + rawVersion);
 	}
 	// returns 0L if everything went fine; else the lower word contains the
@@ -570,6 +586,20 @@
 			throw new IllegalArgumentException("preview not supported at release "+release);
 		return options;
 	}
+	@java.lang.SuppressWarnings("synthetic-access")
+	static JavacTestOptions forReleaseWithPreview(String release, String additionalOptions) {
+		JavacTestOptions options = new JavacTestOptions(Long.parseLong(release));
+		if (isJRE9Plus) {
+			String result = "--release "+release+" --enable-preview -Xlint:-preview";
+			if (additionalOptions != null)
+				result = result + " " + additionalOptions;
+			options.setCompilerOptions(result);
+			
+		}
+		else
+			throw new IllegalArgumentException("preview not supported at release "+release);
+		return options;
+	}
 	public static class SuppressWarnings extends JavacTestOptions {
 		public SuppressWarnings(String token) {
 			setCompilerOptions("-Xlint:-"+token);
@@ -952,7 +982,7 @@
 			JavacBug8144832 = RUN_JAVAC ? // https://bugs.openjdk.java.net/browse/JDK-8144832
 					new JavacHasABug(MismatchType.JavacErrorsEclipseNone, ClassFileConstants.JDK9, 0000) : null,
 			JavacBug8179483_switchExpression = RUN_JAVAC ? // https://bugs.openjdk.java.net/browse/JDK-8179483
-					new JavacBug8179483(" --release 12 --enable-preview -Xlint:-preview") : null,
+					new JavacBug8179483(" --release 13 --enable-preview -Xlint:-preview") : null,
 			JavacBug8221413_switchExpression = RUN_JAVAC ? // https://bugs.openjdk.java.net/browse/JDK-8221413
 					new JavacBug8221413(" --release 12 --enable-preview -Xlint:-preview") : null,
 			JavacBug8226510_switchExpression = RUN_JAVAC ? // https://bugs.openjdk.java.net/browse/JDK-8226510
@@ -1767,7 +1797,7 @@
 			skipJavac ? JavacTestOptions.SKIP :
 				javacTestOptions != null ? javacTestOptions : JavacTestOptions.DEFAULT /* default javac test options */);
 	}
-	protected void runConformTest(String[] testFiles, Map customOptions) {
+	protected void runConformTest(String[] testFiles, Map<String, String> customOptions) {
 		runTest(
 			// test directory preparation
 			true /* flush output directory */,
@@ -1789,10 +1819,10 @@
 			// javac options
 			JavacTestOptions.DEFAULT /* default javac test options */);
 	}
-	protected void runConformTest(String[] testFiles, String expectedOutput, Map customOptions) {
+	protected void runConformTest(String[] testFiles, String expectedOutput, Map<String, String> customOptions) {
 		runConformTest(testFiles, expectedOutput, customOptions, null);
 	}
-	protected void runConformTest(String[] testFiles, String expectedOutput, Map customOptions, String[] vmArguments) {
+	protected void runConformTest(String[] testFiles, String expectedOutput, Map<String, String> customOptions, String[] vmArguments) {
 		runTest(
 			// test directory preparation
 			true /* flush output directory */,
@@ -1873,7 +1903,7 @@
 		String[] classLibraries,
 		boolean shouldFlushOutputDirectory,
 		String[] vmArguments,
-		Map customOptions,
+		Map<String, String> customOptions,
 		ICompilerRequestor customRequestor) {
 		runTest(
 	 		// test directory preparation
@@ -2961,7 +2991,7 @@
 			String[] testFiles,
 			// compiler options
 			String[] classLibraries,
-			Map customOptions,
+			Map<String, String> customOptions,
 			boolean performStatementsRecovery,
 			ICompilerRequestor customRequestor,
 			// compiler results
@@ -3106,7 +3136,7 @@
 			// compiler options
 			String[] classLibraries,
 			boolean libsOnModulePath,
-			Map customOptions,
+			Map<String, String> customOptions,
 			boolean performStatementsRecovery,
 			ICompilerRequestor customRequestor,
 			// compiler results
@@ -3146,7 +3176,7 @@
 		requestor.outputPath = OUTPUT_DIR.endsWith(File.separator) ? OUTPUT_DIR : OUTPUT_DIR + File.separator;
 				// WORK should not have to test a constant?
 
-		Map options = getCompilerOptions();
+		Map<String, String> options = getCompilerOptions();
 		if (customOptions != null) {
 			options.putAll(customOptions);
 		}
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/CompilerInvocationTests.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/CompilerInvocationTests.java
index 059401b..b39b94f 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/CompilerInvocationTests.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/CompilerInvocationTests.java
@@ -8,6 +8,10 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Benjamin Muskalla - Contribution for bug 239066
@@ -301,7 +305,7 @@
 // templates, which can occur downstream in the localization process (assuming
 // that we always release the English version right)
 	public void test009_missing_message_templates() {
-		assertEquals("Unable to retrieve the error message for problem id: 4194303. Check compiler resources.",
+		assertEquals("Unable to retrieve the error message for problem id: 2097151. Check compiler resources.",
 				new DefaultProblemFactory().getLocalizedMessage(Integer.MAX_VALUE, new String[] {}));
 	}
 
@@ -810,6 +814,7 @@
 		expectedProblemAttributes.put("MissingSynchronizedModifierInInheritedMethod", new ProblemAttributes(CategorizedProblem.CAT_POTENTIAL_PROGRAMMING_PROBLEM));
 		expectedProblemAttributes.put("MissingTypeInConstructor", new ProblemAttributes(CategorizedProblem.CAT_MEMBER));
 		expectedProblemAttributes.put("MissingTypeInLambda", new ProblemAttributes(CategorizedProblem.CAT_MEMBER));
+		expectedProblemAttributes.put("UnterminatedTextBlock", new ProblemAttributes(CategorizedProblem.CAT_PREVIEW_RELATED));
 		expectedProblemAttributes.put("MissingTypeInMethod", new ProblemAttributes(CategorizedProblem.CAT_MEMBER));
 		expectedProblemAttributes.put("MissingValueForAnnotationMember", new ProblemAttributes(CategorizedProblem.CAT_TYPE));
 		expectedProblemAttributes.put("MissingValueFromLambda", new ProblemAttributes(CategorizedProblem.CAT_INTERNAL));
@@ -1268,6 +1273,26 @@
         expectedProblemAttributes.put("AbstractStaticMethodCalled", new ProblemAttributes(CategorizedProblem.CAT_INTERNAL));
         expectedProblemAttributes.put("RoleFileMissingTeamDeclaration", new ProblemAttributes(CategorizedProblem.CAT_INTERNAL));
 //SH}
+	    expectedProblemAttributes.put("PreviewFeaturesNotAllowed", new ProblemAttributes(CategorizedProblem.CAT_PREVIEW_RELATED));
+	    expectedProblemAttributes.put("SwitchExpressionsYieldIncompatibleResultExpressionTypes", new ProblemAttributes(CategorizedProblem.CAT_PREVIEW_RELATED));
+	    expectedProblemAttributes.put("SwitchExpressionsYieldEmptySwitchBlock", new ProblemAttributes(CategorizedProblem.CAT_PREVIEW_RELATED));
+	    expectedProblemAttributes.put("SwitchExpressionsYieldNoResultExpression", new ProblemAttributes(CategorizedProblem.CAT_PREVIEW_RELATED));
+	    expectedProblemAttributes.put("SwitchExpressionaYieldSwitchLabeledBlockCompletesNormally", new ProblemAttributes(CategorizedProblem.CAT_PREVIEW_RELATED));
+	    expectedProblemAttributes.put("SwitchExpressionsYieldLastStatementCompletesNormally", new ProblemAttributes(CategorizedProblem.CAT_PREVIEW_RELATED));
+	    expectedProblemAttributes.put("SwitchExpressionsYieldTrailingSwitchLabels", new ProblemAttributes(CategorizedProblem.CAT_PREVIEW_RELATED));
+		expectedProblemAttributes.put("SwitchPreviewMixedCase", new ProblemAttributes(CategorizedProblem.CAT_PREVIEW_RELATED));
+	    expectedProblemAttributes.put("SwitchExpressionsYieldMissingDefaultCase", new ProblemAttributes(CategorizedProblem.CAT_PREVIEW_RELATED));
+	    expectedProblemAttributes.put("SwitchExpressionsYieldMissingValue", new ProblemAttributes(CategorizedProblem.CAT_PREVIEW_RELATED));
+	    expectedProblemAttributes.put("SwitchExpressionsYieldMissingEnumConstantCase", new ProblemAttributes(CategorizedProblem.CAT_PREVIEW_RELATED));
+	    expectedProblemAttributes.put("SwitchExpressionsYieldIllegalLastStatement", new ProblemAttributes(CategorizedProblem.CAT_PREVIEW_RELATED));
+	    expectedProblemAttributes.put("SwitchExpressionsYieldBreakNotAllowed", new ProblemAttributes(CategorizedProblem.CAT_PREVIEW_RELATED));
+	    expectedProblemAttributes.put("SwitchExpressionsYieldUnqualifiedMethodWarning", new ProblemAttributes(CategorizedProblem.CAT_PREVIEW_RELATED));
+	    expectedProblemAttributes.put("SwitchExpressionsYieldUnqualifiedMethodError", new ProblemAttributes(CategorizedProblem.CAT_PREVIEW_RELATED));
+	    expectedProblemAttributes.put("SwitchExpressionsYieldOutsideSwitchExpression", new ProblemAttributes(CategorizedProblem.CAT_PREVIEW_RELATED));
+	    expectedProblemAttributes.put("SwitchExpressionsYieldRestrictedGeneralWarning", new ProblemAttributes(CategorizedProblem.CAT_PREVIEW_RELATED));
+	    expectedProblemAttributes.put("SwitchExpressionsYieldIllegalStatement", new ProblemAttributes(CategorizedProblem.CAT_PREVIEW_RELATED));
+	    expectedProblemAttributes.put("SwitchExpressionsYieldTypeDeclarationWarning", new ProblemAttributes(CategorizedProblem.CAT_PREVIEW_RELATED));
+	    expectedProblemAttributes.put("SwitchExpressionsYieldTypeDeclarationError", new ProblemAttributes(CategorizedProblem.CAT_PREVIEW_RELATED));
 		StringBuffer failures = new StringBuffer();
 		StringBuffer correctResult = new StringBuffer(70000);
 		Field[] fields = (iProblemClass = IProblem.class).getFields();
@@ -1844,6 +1869,7 @@
 		expectedProblemAttributes.put("MissingSynchronizedModifierInInheritedMethod", new ProblemAttributes(JavaCore.COMPILER_PB_MISSING_SYNCHRONIZED_ON_INHERITED_METHOD));
 		expectedProblemAttributes.put("MissingTypeInConstructor", SKIP);
 		expectedProblemAttributes.put("MissingTypeInLambda", SKIP);
+		expectedProblemAttributes.put("UnterminatedTextBlock", SKIP);
 		expectedProblemAttributes.put("MissingTypeInMethod", SKIP);
 		expectedProblemAttributes.put("MissingValueForAnnotationMember", SKIP);
 		expectedProblemAttributes.put("MissingValueFromLambda", SKIP);
@@ -2837,7 +2863,27 @@
 	    expectedProblemAttributes.put("PreviewFeatureDisabled", SKIP);
 	    expectedProblemAttributes.put("PreviewFeatureUsed", SKIP);
 	    expectedProblemAttributes.put("PreviewFeatureNotSupported", SKIP);
-		Map constantNamesIndex = new HashMap();
+	    expectedProblemAttributes.put("PreviewFeaturesNotAllowed", SKIP);
+	    expectedProblemAttributes.put("SwitchExpressionsYieldIncompatibleResultExpressionTypes", SKIP);
+	    expectedProblemAttributes.put("SwitchExpressionsYieldEmptySwitchBlock", SKIP);
+	    expectedProblemAttributes.put("SwitchExpressionsYieldNoResultExpression", SKIP);
+	    expectedProblemAttributes.put("SwitchExpressionaYieldSwitchLabeledBlockCompletesNormally", SKIP);
+	    expectedProblemAttributes.put("SwitchExpressionsYieldLastStatementCompletesNormally", SKIP);
+	    expectedProblemAttributes.put("SwitchExpressionsYieldTrailingSwitchLabels", SKIP);
+	    expectedProblemAttributes.put("SwitchPreviewMixedCase", SKIP);
+	    expectedProblemAttributes.put("SwitchExpressionsYieldMissingDefaultCase", SKIP);
+	    expectedProblemAttributes.put("SwitchExpressionsYieldMissingValue", SKIP);
+	    expectedProblemAttributes.put("SwitchExpressionsYieldMissingEnumConstantCase", SKIP);
+	    expectedProblemAttributes.put("SwitchExpressionsYieldIllegalLastStatement", SKIP);
+	    expectedProblemAttributes.put("SwitchExpressionsYieldBreakNotAllowed", SKIP);
+	    expectedProblemAttributes.put("SwitchExpressionsYieldUnqualifiedMethodWarning", SKIP);
+	    expectedProblemAttributes.put("SwitchExpressionsYieldUnqualifiedMethodError", SKIP);
+	    expectedProblemAttributes.put("SwitchExpressionsYieldOutsideSwitchExpression", SKIP);
+	    expectedProblemAttributes.put("SwitchExpressionsYieldRestrictedGeneralWarning", SKIP);
+	    expectedProblemAttributes.put("SwitchExpressionsYieldIllegalStatement", SKIP);
+	    expectedProblemAttributes.put("SwitchExpressionsYieldTypeDeclarationWarning", SKIP);
+	    expectedProblemAttributes.put("SwitchExpressionsYieldTypeDeclarationError", SKIP);
+	    Map constantNamesIndex = new HashMap();
 		Field[] fields = JavaCore.class.getFields();
 		for (int i = 0, length = fields.length; i < length; i++) {
 			Field field = fields[i];
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/FlowAnalysisTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/FlowAnalysisTest.java
index b0514b8..bb3b8b0 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/FlowAnalysisTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/FlowAnalysisTest.java
@@ -8,6 +8,10 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Stephan Herrmann - Contributions for
@@ -2904,19 +2908,19 @@
 		"The local variable action may not have been initialized\n" + 
 		"----------\n");
 }
-public void testBug542707_001() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_001() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12); 
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13); 
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
 			"----------\n" + 
 			"1. ERROR in X.java (at line 11)\n" + 
-			"	break k;\n" + 
+			"	yield k;\n" + 
 			"	      ^\n" + 
 			"The local variable k may not have been initialized\n" + 
 			"----------\n" + 
@@ -2934,10 +2938,10 @@
 			"		int it = switch (i) { \n" +
 			"		case 1  ->   {\n" +
 			"			k = 1;\n" +
-			"			break k ;\n" +
+			"			yield k ;\n" +
 			"		}\n" +
 			"		default -> {\n" +
-			"			break k;\n" +
+			"			yield k;\n" +
 			"		}\n" +
 			"		};\n" +
 			"		return k + it;\n" +
@@ -2959,13 +2963,13 @@
 			defaultOptions);
 
 }
-public void testBug542707_002() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_002() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12); 
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13); 
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
@@ -2976,7 +2980,7 @@
 			"The final local variable k may already have been assigned\n" + 
 			"----------\n" + 
 			"2. ERROR in X.java (at line 11)\n" + 
-			"	break k;\n" + 
+			"	yield k;\n" + 
 			"	      ^\n" + 
 			"The local variable k may not have been initialized\n" + 
 			"----------\n";
@@ -2989,10 +2993,10 @@
 			"		k = switch (i) { \n" +
 			"		case 1  ->   {\n" +
 			"			k = 1;\n" +
-			"			break k ;\n" +
+			"			yield k ;\n" +
 			"		}\n" +
 			"		default -> {\n" +
-			"			break k;\n" +
+			"			yield k;\n" +
 			"		}\n" +
 			"		};\n" +
 			"		return k;\n" +
@@ -3016,13 +3020,13 @@
 /*
  * k is definitely assigned - no errors on that front.
  */
-public void testBug542707_003() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_003() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12); 
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13); 
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
@@ -3041,15 +3045,15 @@
 			"		int it = switch (i) { \n" +
 			"		case 1  ->   {\n" +
 			"			k = 1;\n" +
-			"			break k ;\n" +
+			"			yield k ;\n" +
 			"		}\n" +
 			"		case 2  ->   {\n" +
 			"			k = 2;\n" +
-			"			break k ;\n" +
+			"			yield k ;\n" +
 			"		}\n" +
 			"		default -> {\n" +
 			"			k = 3;\n" +
-			"			break k;\n" +
+			"			yield k;\n" +
 			"		}\n" +
 			"		};\n" +
 			"		return k;\n" +
@@ -3071,13 +3075,13 @@
 			true,
 			defaultOptions);
 }
-public void testBug542707_004() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_004() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12); 
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13); 
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
@@ -3111,15 +3115,15 @@
 			"		int it = switch (i) { \n" +
 			"		case 1  ->   {\n" +
 			"			k = 1;\n" +
-			"			break k ;\n" +
+			"			yield k ;\n" +
 			"		}\n" +
 			"		case 2  ->   {\n" +
 			"			k = 2;\n" +
-			"			break k ;\n" +
+			"			yield k ;\n" +
 			"		}\n" +
 			"		default -> {\n" +
 			"			k = 3;\n" +
-			"			break k;\n" +
+			"			yield k;\n" +
 			"		}\n" +
 			"		};\n" +
 			"		return k;\n" +
@@ -3141,19 +3145,19 @@
 			true,
 			defaultOptions);
 }
-public void testBug542707_005() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_005() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12); 
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13); 
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
 			"----------\n" + 
 			"1. ERROR in X.java (at line 11)\n" + 
-			"	break k ;\n" + 
+			"	yield k ;\n" + 
 			"	      ^\n" + 
 			"The local variable k may not have been initialized\n" + 
 			"----------\n" + 
@@ -3176,14 +3180,14 @@
 			"		int it = switch (i) { \n" +
 			"		case 1  ->   {\n" +
 			"			k = 1;\n" +
-			"			break k ;\n" +
+			"			yield k ;\n" +
 			"		}\n" +
 			"		case 2  ->   {\n" +
-			"			break k ;\n" +
+			"			yield k ;\n" +
 			"		}\n" +
 			"		default -> {\n" +
 			"			k = 3;\n" +
-			"			break k;\n" +
+			"			yield k;\n" +
 			"		}\n" +
 			"		};\n" +
 			"		return k;\n" +
@@ -3206,20 +3210,20 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
+ * From JLS 13 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
  * which are boolean-valued. 
- * V is definitely assigned after a switch expression when true iff for every value break statement with
+ * V is definitely assigned after a switch expression when true iff for every value yield statement with
  * expression e in the switch block that may exit the switch expression, V is definitely assigned after e when true.
- * V is definitely assigned after a switch expression when false iff for every value break statement with
+ * V is definitely assigned after a switch expression when false iff for every value yield statement with
  * expression e in the switch block that may exit the switch expression, V is definitely assigned after e when false.
  */
-public void testBug542707_006() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_006() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
@@ -3237,14 +3241,14 @@
 			"		boolean b = switch (i) {\n" +
 			"		case 1 :\n" +
 			"			v = 1;\n" +
-			"			break true;\n" +
+			"			yield true;\n" +
 			"		case 2 : {\n" +
 			"			v = 2;\n" +
-			"			break true;\n" +
+			"			yield true;\n" +
 			"		}\n" +
 			"		default : {\n" +
 			"			v = 3;\n" +
-			"			break false;\n" +
+			"			yield false;\n" +
 			"		}\n" +
 			"		};\n" +
 			"		int d = b == true ? 0 : 1; \n" +
@@ -3268,22 +3272,22 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
+ * From JLS 13 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
  * which are boolean-valued.
- * V is definitely unassigned after a switch expression when true iff for every value break statement with expression
- * e in the switch block that may exit the switch expression, V is definitely unassigned before the value break
+ * V is definitely unassigned after a switch expression when true iff for every value yield statement with expression
+ * e in the switch block that may exit the switch expression, V is definitely unassigned before the value yield
  * statement and V is definitely unassigned after e when true.
- * V is definitely unassigned after a switch expression when false iff for every value break statement with expression
- * e in the switch block that may exit the switch expression, V is definitely unassigned before the value break
+ * V is definitely unassigned after a switch expression when false iff for every value yield statement with expression
+ * e in the switch block that may exit the switch expression, V is definitely unassigned before the value yield
  * statement and V is definitely unassigned after e when false.
  */
-public void testBug542707_007() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_007() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
@@ -3306,14 +3310,14 @@
 			"		boolean b = switch (i) {\n" +
 			"		case 1 :\n" +
 			"			//v = 1;\n" +
-			"			break true;\n" +
+			"			yield true;\n" +
 			"		case 2 : {\n" +
 			"			//v = 2;\n" +
-			"			break true;\n" +
+			"			yield true;\n" +
 			"		}\n" +
 			"		default : {\n" +
 			"			//v = 3;\n" +
-			"			break false;\n" +
+			"			yield false;\n" +
 			"		}\n" +
 			"		};\n" +
 			"		int d = b == true ? 0 : 1; \n" +
@@ -3337,17 +3341,17 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
+ * From JLS 13 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
  * which are boolean-valued. 
  * V is [un]assigned before the selector expression iff V is [un]assigned before the switch statement.
  */
-public void testBug542707_008() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_008() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
@@ -3365,14 +3369,14 @@
 			"		boolean b = switch (i) {\n" +
 			"		case 1 :\n" +
 			"			//v = 1;\n" +
-			"			break true;\n" +
+			"			yield true;\n" +
 			"		case 2 : {\n" +
 			"			//v = 2;\n" +
-			"			break true;\n" +
+			"			yield true;\n" +
 			"		}\n" +
 			"		default : {\n" +
 			"			//v = 3;\n" +
-			"			break false;\n" +
+			"			yield false;\n" +
 			"		}\n" +
 			"		};\n" +
 			"		int d = b == true ? 0 : 1; \n" +
@@ -3396,17 +3400,17 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
+ * From JLS 13 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
  * which are boolean-valued. 
  * V is [un]assigned before the selector expression iff V is [un]assigned before the switch statement.
  */
-public void testBug542707_009() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_009() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
@@ -3429,14 +3433,14 @@
 			"		boolean b = switch (v) {\n" +
 			"		case 1 :\n" +
 			"			v = 1;\n" +
-			"			break true;\n" +
+			"			yield true;\n" +
 			"		case 2 : {\n" +
 			"			v = 2;\n" +
-			"			break true;\n" +
+			"			yield true;\n" +
 			"		}\n" +
 			"		default : {\n" +
 			"			v = 3;\n" +
-			"			break false;\n" +
+			"			yield false;\n" +
 			"		}\n" +
 			"		};\n" +
 			"		int d = b == true ? 0 : 1; \n" +
@@ -3460,18 +3464,18 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
+ * From JLS 13 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
  * which are boolean-valued. 
  * V is [un]assigned before the first statement of the first switch labeled statement group in the switch block
  * iff V is [un]assigned after the selector expression.
  */
-public void testBug542707_010() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_010() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
@@ -3489,14 +3493,14 @@
 			"		boolean b = switch (i + (v =1)) {\n" +
 			"		case 1 :\n" +
 			"			v += 1;\n" +
-			"			break true;\n" +
+			"			yield true;\n" +
 			"		case 2 : {\n" +
 			"			v = 2;\n" +
-			"			break true;\n" +
+			"			yield true;\n" +
 			"		}\n" +
 			"		default : {\n" +
 			"			v = 3;\n" +
-			"			break false;\n" +
+			"			yield false;\n" +
 			"		}\n" +
 			"		};\n" +
 			"		int d = b == true ? 0 : 1; \n" +
@@ -3520,18 +3524,18 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
+ * From JLS 13 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
  * which are boolean-valued. 
  * V is [un]assigned before the first statement of the first switch labeled statement group in the switch block
  * iff V is [un]assigned after the selector expression.
  */
-public void testBug542707_011() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_011() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
@@ -3554,14 +3558,14 @@
 			"		boolean b = switch (i) {\n" +
 			"		case 1 :\n" +
 			"			v += 1;\n" +
-			"			break true;\n" +
+			"			yield true;\n" +
 			"		case 2 : {\n" +
 			"			v = 2;\n" +
-			"			break true;\n" +
+			"			yield true;\n" +
 			"		}\n" +
 			"		default : {\n" +
 			"			v = 3;\n" +
-			"			break false;\n" +
+			"			yield false;\n" +
 			"		}\n" +
 			"		};\n" +
 			"		int d = b == true ? 0 : 1; \n" +
@@ -3585,20 +3589,19 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
+ * From JLS 13 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
  * which are boolean-valued.
  * V is [un]assigned before the first statement of any switch labeled statement group other than the first iff
  * V is [un]assigned after the selector expression and V is [un]assigned after the preceding statement.
- * TODO: the second part - "and V is [un]assigned after the preceding statement" needs to be checked, now it looks identical to the 
- * preceding rule
+ * and V is [un]assigned after the preceding statement
  */
-public void testBug542707_012() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_012() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
@@ -3616,14 +3619,14 @@
 			"		boolean b = switch (i + (v =1)) {\n" +
 			"		case 1 :\n" +
 			"			v = 1;\n" +
-			"			break true;\n" +
+			"			yield true;\n" +
 			"		case 2 : {\n" +
 			"			v += 2;\n" +
-			"			break true;\n" +
+			"			yield true;\n" +
 			"		}\n" +
 			"		default : {\n" +
 			"			v = 3;\n" +
-			"			break false;\n" +
+			"			yield false;\n" +
 			"		}\n" +
 			"		};\n" +
 			"		int d = b == true ? 0 : 1; \n" +
@@ -3647,20 +3650,82 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
+ * From JLS 13 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
+ * which are boolean-valued.
+ * V is [un]assigned before the first statement of any switch labeled statement group other than the first iff
+ * V is [un]assigned after the selector expression and V is [un]assigned after the preceding statement.
+ * and V is [un]assigned after the preceding statement" 
+ */
+public void testBug548318_012b() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
+		return;
+	Map<String, String> defaultOptions = super.getCompilerOptions();
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
+	String expectedProblemLog =
+			"----------\n" + 
+			"1. ERROR in X.java (at line 15)\n" + 
+			"	return v + d;\n" + 
+			"	       ^\n" + 
+			"The local variable v may not have been initialized\n" + 
+			"----------\n" + 
+			"2. ERROR in X.java (at line 19)\n" + 
+			"	Zork();\n" + 
+			"	^^^^\n" + 
+			"The method Zork() is undefined for the type X\n" + 
+			"----------\n";
+	String[] testFiles = new String[] {
+			"X.java", // =================
+			"public class X {\n" +
+			"	public static int foo(int i) {\n" +
+			"		int v;\n" +
+			"		boolean b = switch (i) {\n" +
+			"		case 1 :i =1;\n" +
+			"		case 2 : {\n" +
+			"			yield true;\n" +
+			"		}\n" +
+			"		default : {\n" +
+			"			v = 3;\n" +
+			"			yield false;\n" +
+			"		}\n" +
+			"		};\n" +
+			"		int d = b == true ? 0 : 1; \n" +
+			"		return v + d;\n" +
+			"	}\n" +
+			"\n" +
+			"	public boolean bar() {\n" +
+			"		Zork();\n" +
+			"		return true;\n" +
+			"	}\n" +
+			"	public static void main(String[] args) {\n" +
+			"		System.out.println(foo(3));\n" +
+			"	}\n" +
+			"}\n",
+	};
+	this.runNegativeTest(
+			testFiles,
+			expectedProblemLog,
+			null,
+			true,
+			defaultOptions);
+}
+/**
+ * From JLS 13 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
  * which are boolean-valued. 
  * V is [un]assigned before the first statement of any switch labeled statement group other than the first iff
  * V is [un]assigned after the selector expression and V is [un]assigned after the preceding statement.
- * TODO: the second part - "and V is [un]assigned after the preceding statement" needs to be checked, now it looks identical to the 
- * preceding rule
+ * and V is [un]assigned after the preceding statement" needs to be checked
  */
-public void testBug542707_013() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_013() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
@@ -3683,14 +3748,14 @@
 			"		boolean b = switch (i) {\n" +
 			"		case 1 :\n" +
 			"			v = 1;\n" +
-			"			break true;\n" +
+			"			yield true;\n" +
 			"		case 2 : {\n" +
 			"			v += 2;\n" +
-			"			break true;\n" +
+			"			yield true;\n" +
 			"		}\n" +
 			"		default : {\n" +
 			"			v = 3;\n" +
-			"			break false;\n" +
+			"			yield false;\n" +
 			"		}\n" +
 			"		};\n" +
 			"		int d = b == true ? 0 : 1; \n" +
@@ -3714,28 +3779,28 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
+ * From JLS 13 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
  * which are boolean-valued. 
  * The following rules apply only if the switch block of a switch expression consists of switch labeled rules:
  * V is definitely assigned after a switch expression when true iff for every switch labeled rule one of the following is true:
  * 		It is a switch labeled expression e and V is definitely assigned after e when true.
- * 		It is a switch labeled block b and for every value break statement expression e contained in b that may exit the switch expression, 
+ * 		It is a switch labeled block b and for every value yield statement expression e contained in b that may exit the switch expression, 
  * 			V is definitely assigned after e when true.
  * 		It is a switch labeled throw statement.
  * 
  * V is definitely assigned after a switch expression when false iff for every switch labeled rule one of the following is true:
  * 		It is a switch labeled expression e and V is definitely assigned after e when false.
- * 		It is a switch labeled block b and for every value break statement expression e contained in b that may exit the switch expression,
+ * 		It is a switch labeled block b and for every value yield statement expression e contained in b that may exit the switch expression,
  * 		V is definitely assigned after e when false.
  * 		It is a switch labeled throw statement.
  */
-public void testBug542707_014() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_014() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
@@ -3756,11 +3821,11 @@
 			"		case 1 -> (v = 1) == 0;\n" +
 			"		case 2 -> {\n" +
 			"			v = 2;\n" +
-			"			break true;\n" +
+			"			yield true;\n" +
 			"		}\n" +
 			"		case 3 -> {\n" +
 			"			v = 3;\n" +
-			"			break false;\n" +
+			"			yield false;\n" +
 			"		}\n" +
 			"		default -> throw new IOException();\n" +
 			"		};\n" +
@@ -3789,30 +3854,30 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
+ * From JLS 13 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
  * which are boolean-valued. 
  * The following rules apply only if the switch block of a switch expression consists of switch labeled rules:
  * V is definitely unassigned after a switch expression when true iff for every switch labeled rule one of the following is true:
  * 		It is a switch labeled expression e and V is definitely unassigned after e when true .
- * 		It is a switch labeled block b and for every value break statement expression e contained in b that
- * 		 may exit the switch expression, V is definitely unassigned before the value break statement and 
+ * 		It is a switch labeled block b and for every value yield statement expression e contained in b that
+ * 		 may exit the switch expression, V is definitely unassigned before the value yield statement and 
  * 		     V is definitely unassigned after e when true.
  * 		It is a switch labeled throw statement.
  * 
  * V is definitely unassigned after a switch expression when false iff for every switch labeled rule one of the following is true:
  * 		It is a switch labeled expression e and V is definitely unassigned after e when false.
- * 		It is a switch labeled block b and for every value break statement expression e contained in b that may
- * 		exit the switch expression,	V is definitely unassigned before the value break statement and V is definitely unassigned 
+ * 		It is a switch labeled block b and for every value yield statement expression e contained in b that may
+ * 		exit the switch expression,	V is definitely unassigned before the value yield statement and V is definitely unassigned 
  * 			after e when false.
  * 		It is a switch labeled throw statement.
  */
-public void testBug542707_015() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_015() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
@@ -3837,10 +3902,10 @@
 			"		case 0 ->  true;\n" +
 			"		case 1 -> false;\n" +
 			"		case 2 -> {\n" +
-			"			break true;\n" +
+			"			yield true;\n" +
 			"		}\n" +
 			"		case 3 -> {\n" +
-			"			break false;\n" +
+			"			yield false;\n" +
 			"		}\n" +
 			"		default -> throw new IOException();\n" +
 			"		};\n" +
@@ -3869,18 +3934,18 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
+ * From JLS 13 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
  * which are boolean-valued. 
  * V is [un]assigned before any switch labeled expression or statement in the switch
  * block iff V is [un]assigned after the selector expression.
  */
-public void testBug542707_016() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_016() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
@@ -3925,19 +3990,19 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
+ * From JLS 13 16.1.7 , Suppose that the switch expression has result expressions e1, …, en, all of
  * which are boolean-valued. 
  * The following rules apply only if the switch block of a switch expression consists of switch labeled rules:
  * V is [un]assigned before any switch labeled expression or statement in the switch
  * block iff V is [un]assigned after the selector expression.
  */
-public void testBug542707_017() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_017() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
@@ -3992,21 +4057,18 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.1.8, Suppose that the switch expression has result expressions e1, …, en, not all of
- * which are boolean-valued.
- * The following rules apply only if the switch block of a switch expression (15.28) consists of switch
- * labeled statement groups:
- * V is definitely assigned after a switch expression iff for every value break statement with expression e
- *  in the switch block that may exit the switch expression, either V is definitely assigned before the value
- *   break statement or V is definitely assigned after e.
+ * From JLS 13 16.1.8, V is [un]assigned after a switch expression (15.28) iff all of the following are true:
+ * 	V is [un]assigned before every yield statement that may exit the switch statement.
+ * 	For each switch labeled rule (14.11.1) in the switch block, V is [un]assigned after the 
+ *          expression, block, or throw statement of the switch labeled rule.
  */
-public void testBug542707_018() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_018() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
@@ -4023,14 +4085,14 @@
 			"		int v;\n" +
 			"		int t = switch (i) {\n" +
 			"		case 0 : {\n" +
-			"			v = 1; // definitely assigned before break\n" +
-			"			break v;\n" +
+			"			v = 1; // definitely assigned before yield\n" +
+			"			yield v;\n" +
 			"		}\n" +
 			"		case 2 : {\n" +
-			"			break v =1; // definitely assigned after e\n" +
+			"			yield v =1; // definitely assigned after e\n" +
 			"		}\n" +
 			"		default : {\n" +
-			"			break v = 2;\n" +
+			"			yield v = 2;\n" +
 			"		}\n" +
 			"		};\n" +
 			"		return v + t;\n" +
@@ -4053,21 +4115,18 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.1.8, Suppose that the switch expression has result expressions e1, …, en, not all of
- * which are boolean-valued.
- * The following rules apply only if the switch block of a switch expression (15.28) consists of switch
- * labeled statement groups:
- * V is definitely unassigned after a switch expression iff for every value break statement with expression e
- * in the switch block that may exit the switch expression, V is definitely unassigned before the value break
- * statement and V is definitely unassigned after e.
+ * From JLS 13 16.1.8, V is [un]assigned after a switch expression (15.28) iff all of the following are true:
+ * 	V is [un]assigned before every yield statement that may exit the switch statement.
+ * 	For each switch labeled rule (14.11.1) in the switch block, V is [un]assigned after the 
+ *          expression, block, or throw statement of the switch labeled rule.
  */
-public void testBug542707_019() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_019() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
@@ -4089,13 +4148,13 @@
 			"		int v;\n" +
 			"		int t = switch (i) {\n" +
 			"		case 0 : {\n" +
-			"			break 1;\n" +
+			"			yield 1;\n" +
 			"		}\n" +
 			"		case 2 : {\n" +
-			"			break 2;\n" +
+			"			yield 2;\n" +
 			"		}\n" +
 			"		default : {\n" +
-			"			break 3;\n" +
+			"			yield 3;\n" +
 			"		}\n" +
 			"		};\n" +
 			"		return v + t;\n" +
@@ -4118,19 +4177,17 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.1.8, Suppose that the switch expression has result expressions e1, …, en, not all of
+ * From JLS 13 16.1.8, Suppose that the switch expression has result expressions e1, …, en, not all of
  * which are boolean-valued.
- * The following rules apply only if the switch block of a switch expression (15.28) consists of switch
- * labeled statement groups:
  * V is [un]assigned before the selector expression iff V is [un]assigned before the switch statement.
  */
-public void testBug542707_020() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_020() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
@@ -4147,13 +4204,13 @@
 			"		int v =1;\n" +
 			"		int t = switch (v) {\n" +
 			"		case 0 : {\n" +
-			"			break 1;\n" +
+			"			yield 1;\n" +
 			"		}\n" +
 			"		case 2 : {\n" +
-			"			break 2;\n" +
+			"			yield 2;\n" +
 			"		}\n" +
 			"		default : {\n" +
-			"			break 3;\n" +
+			"			yield 3;\n" +
 			"		}\n" +
 			"		};\n" +
 			"		return t;\n" +
@@ -4176,19 +4233,17 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.1.8, Suppose that the switch expression has result expressions e1, …, en, not all of
+ * From JLS 13 16.1.8, Suppose that the switch expression has result expressions e1, …, en, not all of
  * which are boolean-valued.
- * The following rules apply only if the switch block of a switch expression (15.28) consists of switch
- * labeled statement groups:
  * V is [un]assigned before the selector expression iff V is [un]assigned before the switch statement.
  */
-public void testBug542707_021() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_021() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
@@ -4210,13 +4265,13 @@
 			"		int v;\n" +
 			"		int t = switch (v) {\n" +
 			"		case 0 : {\n" +
-			"			break 1;\n" +
+			"			yield 1;\n" +
 			"		}\n" +
 			"		case 2 : {\n" +
-			"			break 2;\n" +
+			"			yield 2;\n" +
 			"		}\n" +
 			"		default : {\n" +
-			"			break 3;\n" +
+			"			yield 3;\n" +
 			"		}\n" +
 			"		};\n" +
 			"		return t;\n" +
@@ -4239,20 +4294,21 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.1.8, Suppose that the switch expression has result expressions e1, …, en, not all of
+ * From JLS 13 16.1.8, Suppose that the switch expression has result expressions e1, …, en, not all of
  * which are boolean-valued.
- * The following rules apply only if the switch block of a switch expression (15.28) consists of switch
- * labeled statement groups:
- * V is [un]assigned before the first statement of the first switch labeled statement group in the switch block
- * iff V is [un]assigned after the selector expression.
+ * 	V is [un]assigned before the first block statement of a switch labeled statement group (14.11.1) of a switch expression 
+ * iff both of following are true:
+ * V is [un]assigned after the selector expression of the switch statement.
+ * If the switch labeled statement group is not the first in the switch block, 
+ * V is [un]assigned after the last block statement of the preceding switch labeled statement group. 
  */
-public void testBug542707_022() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_022() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
@@ -4269,13 +4325,13 @@
 			"		int v =1;\n" +
 			"		int t = switch (v) {\n" +
 			"		case 0 : {\n" +
-			"			break v;\n" +
+			"			yield v;\n" +
 			"		}\n" +
 			"		case 2 : {\n" +
-			"			break 2;\n" +
+			"			yield 2;\n" +
 			"		}\n" +
 			"		default : {\n" +
-			"			break 3;\n" +
+			"			yield 3;\n" +
 			"		}\n" +
 			"		};\n" +
 			"		return t;\n" +
@@ -4298,26 +4354,27 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.1.8, Suppose that the switch expression has result expressions e1, …, en, not all of
+ * From JLS 13 16.1.8, Suppose that the switch expression has result expressions e1, …, en, not all of
  * which are boolean-valued.
- * The following rules apply only if the switch block of a switch expression (15.28) consists of switch
- * labeled statement groups:
- * V is [un]assigned before the first statement of the first switch labeled statement group in the switch block
- * iff V is [un]assigned after the selector expression.
+ * 	V is [un]assigned before the first block statement of a switch labeled statement group (14.11.1) of a switch expression 
+ * iff both of following are true:
+ * V is [un]assigned after the selector expression of the switch statement.
+ * If the switch labeled statement group is not the first in the switch block, 
+ * V is [un]assigned after the last block statement of the preceding switch labeled statement group. 
  */
-public void testBug542707_023() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_023() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
 			"----------\n" + 
 			"1. ERROR in X.java (at line 6)\n" + 
-			"	break v;\n" + 
+			"	yield v;\n" + 
 			"	      ^\n" + 
 			"The local variable v may not have been initialized\n" + 
 			"----------\n" + 
@@ -4333,13 +4390,13 @@
 			"		int v;\n" +
 			"		int t = switch (i) {\n" +
 			"		case 0 : {\n" +
-			"			break v;\n" +
+			"			yield v;\n" +
 			"		}\n" +
 			"		case 2 : {\n" +
-			"			break 2;\n" +
+			"			yield 2;\n" +
 			"		}\n" +
 			"		default : {\n" +
-			"			break 3;\n" +
+			"			yield 3;\n" +
 			"		}\n" +
 			"		};\n" +
 			"		return t;\n" +
@@ -4362,26 +4419,27 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.1.8, Suppose that the switch expression has result expressions e1, …, en, not all of
+ * From JLS 13 16.1.8, Suppose that the switch expression has result expressions e1, …, en, not all of
  * which are boolean-valued.
- * The following rules apply only if the switch block of a switch expression (15.28) consists of switch
- * labeled statement groups:
- * V is [un]assigned before the first statement of any switch labeled statement group other than the first iff V is [un]assigned
- * after the selector expression and V is [un]assigned after the preceding statement.
+ * 	V is [un]assigned before the first block statement of a switch labeled statement group (14.11.1) of a switch expression 
+ * iff both of following are true:
+ * V is [un]assigned after the selector expression of the switch statement.
+ * If the switch labeled statement group is not the first in the switch block, 
+ * V is [un]assigned after the last block statement of the preceding switch labeled statement group. 
  */
-public void testBug542707_024() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_024() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
 			"----------\n" + 
 			"1. ERROR in X.java (at line 9)\n" + 
-			"	break v;\n" + 
+			"	yield v;\n" + 
 			"	      ^\n" + 
 			"The local variable v may not have been initialized\n" + 
 			"----------\n" + 
@@ -4397,13 +4455,13 @@
 			"		int v ;\n" +
 			"		int t = switch (i) {\n" +
 			"		case 0 : {\n" +
-			"			break 1;\n" +
+			"			yield 1;\n" +
 			"		}\n" +
 			"		case 2 : {\n" +
-			"			break v;\n" +
+			"			yield v;\n" +
 			"		}\n" +
 			"		default : {\n" +
-			"			break 3;\n" +
+			"			yield 3;\n" +
 			"		}\n" +
 			"		};\n" +
 			"		return t;\n" +
@@ -4426,23 +4484,18 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.1.8, Suppose that the switch expression has result expressions e1, …, en, not all of
- * which are boolean-valued.
- * The following rules apply only if the switch block of a switch expression consists of switch labeled rules:
- * V is definitely assigned after a switch expression iff for every switch labeled rule one of the following is true:
- * 		It is a switch labeled expression e and V is definitely assigned after e.
- * 		It is a switch labeled block b and for every value break statement expression e contained in b that may exit
- * 			the switch expression, either V is definitely assigned before the value break statement or V is definitely
- * 			assigned after e.
- * 		It is a switch labeled throw statement.
+ * From JLS 13 16.1.8, V is [un]assigned after a switch expression (15.28) iff all of the following are true:
+ * 	V is [un]assigned before every yield statement that may exit the switch statement.
+ * 	For each switch labeled rule (14.11.1) in the switch block, V is [un]assigned after the 
+ *          expression, block, or throw statement of the switch labeled rule.
  */
-public void testBug542707_025() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_025() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
@@ -4463,9 +4516,9 @@
 			"		case 0 -> v = 1;\n" +
 			"		case 2 -> {\n" +
 			"			if (i > 1) {\n" +
-			"				break v = 2;\n" +
+			"				yield v = 2;\n" +
 			"			}\n" +
-			"			break v = 3;\n" +
+			"			yield v = 3;\n" +
 			"		}\n" +
 			"		default -> throw new IOException();\n" +
 			"		};\n" +
@@ -4494,23 +4547,18 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.1.8, Suppose that the switch expression has result expressions e1, …, en, not all of
- * which are boolean-valued.
- * The following rules apply only if the switch block of a switch expression consists of switch labeled rules:
- * V is definitely unassigned after a switch expression iff for every switch labeled rule one of the following is true:
- * 		It is a switch labeled expression e and V is definitely unassigned after e.
- * 		It is a switch labeled block b and for every value break statement expression e contained in b that may exit the
- * 			switch expression, V is definitely unassigned before the value break statement
- * 			and V is definitely unassigned after e.
- * 		It is a switch labeled throw statement.
+ * From JLS 13 16.1.8, V is [un]assigned after a switch expression (15.28) iff all of the following are true:
+ * 	V is [un]assigned before every yield statement that may exit the switch statement.
+ * 	For each switch labeled rule (14.11.1) in the switch block, V is [un]assigned after the 
+ *          expression, block, or throw statement of the switch labeled rule.
  */
-public void testBug542707_026() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_026() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
@@ -4536,9 +4584,9 @@
 			"		case 0 ->  1;\n" +
 			"		case 2 -> {\n" +
 			"			if (i > 1) {\n" +
-			"				break  2;\n" +
+			"				yield  2;\n" +
 			"			}\n" +
-			"			break 3;\n" +
+			"			yield 3;\n" +
 			"		}\n" +
 			"		default -> throw new IOException();\n" +
 			"		};\n" +
@@ -4567,19 +4615,18 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.1.8, Suppose that the switch expression has result expressions e1, …, en, not all of
+ * From JLS 13 16.1.8, Suppose that the switch expression has result expressions e1, …, en, not all of
  * which are boolean-valued.
- * The following rules apply only if the switch block of a switch expression consists of switch labeled rules:
- * V is [un]assigned before any switch labeled expression or statement in the switch block iff
- * V is [un]assigned after the selector expression.
+ * V is [un]assigned before the expression, block, or throw statement of a switch labeled rule of a
+ * switch expression iff V is [un]assigned after the selector expression of the switch expression.
  */
-public void testBug542707_027() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_027() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
@@ -4600,9 +4647,9 @@
 			"		case 0 ->  v;\n" +
 			"		case 2 -> {\n" +
 			"			if (i > 1) {\n" +
-			"				break  2;\n" +
+			"				yield  2;\n" +
 			"			}\n" +
-			"			break 3;\n" +
+			"			yield 3;\n" +
 			"		}\n" +
 			"		default -> throw new IOException();\n" +
 			"		};\n" +
@@ -4631,19 +4678,18 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.1.8, Suppose that the switch expression has result expressions e1, …, en, not all of
+ * From JLS 13 16.1.8, Suppose that the switch expression has result expressions e1, …, en, not all of
  * which are boolean-valued.
- * The following rules apply only if the switch block of a switch expression consists of switch labeled rules:
- * V is [un]assigned before any switch labeled expression or statement in the switch block iff
- * V is [un]assigned after the selector expression.
+ * V is [un]assigned before the expression, block, or throw statement of a switch labeled rule of a
+ * switch expression iff V is [un]assigned after the selector expression of the switch expression.
  */
-public void testBug542707_028() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_028() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
@@ -4669,9 +4715,9 @@
 			"		case 0 ->  v;\n" +
 			"		case 2 -> {\n" +
 			"			if (i > 1) {\n" +
-			"				break  2;\n" +
+			"				yield  2;\n" +
 			"			}\n" +
-			"			break 3;\n" +
+			"			yield 3;\n" +
 			"		}\n" +
 			"		default -> throw new IOException();\n" +
 			"		};\n" +
@@ -4700,25 +4746,28 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.2.9, The following rules apply only if the switch block of the switch statement consists of switch labeled rules:
- * V is [un]assigned after a switch statement iff for every switch labeled rule one of the following is true:
- * 		It is a switch labeled expression e and either V is [un]assigned after e or after the selector expression.
- * 		It is a switch labeled block b and either V is [un]assigned after e or V is [un]assigned before every
- * 		break statement contained in b that may exit the switch statement.
- * 		It is a switch labeled throw statement.
+ * From JLS 13 16.2.9, [tests the second rule - assigned]
+ * V is [un]assigned after a switch statement (14.11) iff all of the following are true:
+ *     V is [un]assigned before every break statement that may exit the switch statement.
+ *     For each switch labeled rule (14.11.1) in the switch block, V is [un]assigned after the
+ *         expression, block, or throw statement of the switch labeled rule.
+ *     If there is a switch labeled statement group (14.11.1) in the switch block, then V is [un]assigned
+ *         after the last block statement of the last switch labeled statement group.
+ *     If there is no default label in the switch block, or if the switch block ends with a switch label
+ *        followed by }, then V is [un]assigned after the selector expression
  */
-public void testBug542707_029() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_029() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
 			"----------\n" + 
-			"2. ERROR in X.java (at line 24)\n" + 
+			"1. ERROR in X.java (at line 24)\n" + 
 			"	Zork();\n" + 
 			"	^^^^\n" + 
 			"The method Zork() is undefined for the type X\n" + 
@@ -4769,20 +4818,23 @@
 			defaultOptions);
 }
 /**
- * From JLS 12 16.2.9, The following rules apply only if the switch block of the switch statement consists of switch labeled rules:
- * V is [un]assigned after a switch statement iff for every switch labeled rule one of the following is true:
- * 		It is a switch labeled expression e and either V is [un]assigned after e or after the selector expression.
- * 		It is a switch labeled block b and either V is [un]assigned after e or V is [un]assigned before every
- * 		break statement contained in b that may exit the switch statement.
- * 		It is a switch labeled throw statement.
+ * From JLS 13 16.2.9, [tests the second rule - unassigned]
+ * V is [un]assigned after a switch statement (14.11) iff all of the following are true:
+ *     V is [un]assigned before every break statement that may exit the switch statement.
+ *     For each switch labeled rule (14.11.1) in the switch block, V is [un]assigned after the
+ *         expression, block, or throw statement of the switch labeled rule.
+ *     If there is a switch labeled statement group (14.11.1) in the switch block, then V is [un]assigned
+ *         after the last block statement of the last switch labeled statement group.
+ *     If there is no default label in the switch block, or if the switch block ends with a switch label
+ *        followed by }, then V is [un]assigned after the selector expression
  */
-public void testBug542707_030() {
-	if (this.complianceLevel != ClassFileConstants.JDK12)
+public void testBug548318_030() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
 		return;
 	Map<String, String> defaultOptions = super.getCompilerOptions();
-	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
-	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+	defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 	defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 	defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 	String expectedProblemLog =
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/JEP286Test.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/JEP286Test.java
index 4d1d261..466ee9c 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/JEP286Test.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/JEP286Test.java
@@ -69,7 +69,6 @@
 	simpleTypeNames.put("ComparableAny", "Comparable<?>");
 	simpleTypeNames.put("CollectionExt_ComparableAny", "Collection<? extends Comparable<?>>");
 	simpleTypeNames.put("CollectionSuperComparableAny", "Collection<? super Comparable<?>>");
-	isJRE12Plus = isJRELevel(F_12);
 	if (isJRE12Plus)
 		simpleTypeNames.put("IntLongFloat", "java.lang.Number & Comparable<?> & java.lang.constant.Constable & java.lang.constant.ConstantDesc");
 	else 
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullAnnotationTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullAnnotationTest.java
index 133531a..83ba8fc 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullAnnotationTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullAnnotationTest.java
@@ -8,6 +8,10 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ *
  * Contributors:
  *     Stephan Herrmann - initial API and implementation
  *     Till Brychcy <register.eclipse@brychcy.de> - Contribution for
@@ -25,7 +29,6 @@
 import junit.framework.Test;
 
 import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.tests.compiler.regression.AbstractRegressionTest.JavacTestOptions.Excuse;
 import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
 import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
 
@@ -10405,15 +10408,10 @@
 				},
 		options,
 		"----------\n" + 
-		"1. ERROR in X.java (at line 12)\n" + 
-		"	x = null;\n" + 
-		"	    ^^^^\n" + 
-		"Null type mismatch: required \'@NonNull X\' but the provided value is null\n" + 
-		"----------\n" + 
-		"2. ERROR in X.java (at line 15)\n" + 
-		"	default -> null;\n" + 
-		"	           ^^^^\n" + 
-		"Null type mismatch: required \'@NonNull X\' but the provided value is null\n" + 
+		"1. ERROR in X.java (at line 0)\n" + 
+		"	import java.io.IOException;\n" + 
+		"	^\n" + 
+		"Preview features enabled at an invalid source release level 12, preview can be enabled only at source level 13\n" + 
 		"----------\n"
 	);
 }
@@ -10451,10 +10449,10 @@
 				},
 		options,
 		"----------\n" + 
-		"1. ERROR in X.java (at line 13)\n" + 
-		"	Zork();\n" + 
-		"	^^^^\n" + 
-		"The method Zork() is undefined for the type X\n" + 
+		"1. ERROR in X.java (at line 0)\n" + 
+		"	import org.eclipse.jdt.annotation.*;\n" + 
+		"	^\n" + 
+		"Preview features enabled at an invalid source release level 12, preview can be enabled only at source level 13\n" + 
 		"----------\n"
 	);
 }
@@ -10480,12 +10478,18 @@
 		"	}\n" +
 		"}\n"
 	};
-	runner.expectedCompilerLog =
+	runner.expectedCompilerLog = this.complianceLevel == ClassFileConstants.JDK13 ?
 			"----------\n" + 
 			"1. ERROR in X.java (at line 7)\n" + 
 			"	default -> i == 3 ? maybe() : \"\";\n" + 
 			"	                    ^^^^^^^\n" + 
-			"Null type mismatch (type annotations): required '@NonNull String' but this expression has type '@Nullable String'\n" + 
+			"Null type mismatch (type annotations): required \'@NonNull String\' but this expression has type \'@Nullable String\'\n" + 
+			"----------\n" :
+			"----------\n" + 
+			"1. ERROR in X.java (at line 0)\n" + 
+			"	import org.eclipse.jdt.annotation.*;\n" + 
+			"	^\n" + 
+			"Preview features enabled at an invalid source release level 12, preview can be enabled only at source level 13\n" + 
 			"----------\n";
 	runner.runNegativeTest();
 }
@@ -10545,12 +10549,18 @@
 		"	}\n" +
 		"}\n"
 	};
-	runner.expectedCompilerLog =
+	runner.expectedCompilerLog = this.complianceLevel == ClassFileConstants.JDK13 ?
 			"----------\n" + 
 			"1. ERROR in X.java (at line 5)\n" + 
 			"	return switch(day) {\n" + 
 			"	              ^^^\n" + 
 			"Potential null pointer access: this expression has a \'@Nullable\' type\n" + 
+			"----------\n" :
+			"----------\n" + 
+			"1. ERROR in X.java (at line 0)\n" + 
+			"	import org.eclipse.jdt.annotation.*;\n" + 
+			"	^\n" + 
+			"Preview features enabled at an invalid source release level 12, preview can be enabled only at source level 13\n" + 
 			"----------\n";
 	runner.runNegativeTest();
 }
@@ -10576,17 +10586,23 @@
 		"	}\n" +
 		"}\n"
 	};
-	runner.expectedCompilerLog =
+	runner.expectedCompilerLog = this.complianceLevel == ClassFileConstants.JDK13 ?
 			"----------\n" + 
 			"2. ERROR in X.java (at line 5)\n" + 
 			"	return switch(day) {\n" + 
 			"	              ^^^\n" + 
 			"Potential null pointer access: The variable day may be null at this location\n" + 
+			"----------\n" :
+			"----------\n" +
+			"1. ERROR in X.java (at line 0)\n" + 
+			"	enum SomeDays { Mon, Wed, Fri }\n" + 
+			"	^\n" + 
+			"Preview features enabled at an invalid source release level 12, preview can be enabled only at source level 13\n" + 
 			"----------\n";
 	runner.runNegativeTest();
 }
 public void testBug545715() {
-	if (this.complianceLevel < ClassFileConstants.JDK12) return; // switch expression
+	if (this.complianceLevel < ClassFileConstants.JDK13) return; // switch expression
 	Map<String, String>  customOptions = getCompilerOptions();
 	customOptions.put(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
 	customOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -10608,6 +10624,209 @@
 	    customOptions,
 	    new String[] {"--enable-preview"});
 }
+public void testBug548418_001a() {
+	if (this.complianceLevel < ClassFileConstants.JDK13)
+		return;
+	Map options = getCompilerOptions();
+	options.put(JavaCore.COMPILER_PB_POTENTIAL_NULL_REFERENCE, JavaCore.ERROR);
+	options.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13); 
+	options.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	options.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
+	options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+	options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
+	runNegativeTestWithLibs(
+			new String[] {
+			"X.java",
+			"import java.io.IOException;\n"+
+			"\n"+
+			"import org.eclipse.jdt.annotation.NonNull;\n"+
+			"\n"+
+			"public class X {\n"+
+			"	public static int foo(int i) throws IOException {\n"+
+			"		int k = 0;\n"+
+			"		@NonNull\n"+
+			"		X x = new X();\n"+
+			"		x  = switch (i) { \n"+
+			"		case 1  ->   {\n"+
+			"			x = null;\n"+
+			"			break x;\n"+
+			"		}\n"+
+			"		default -> null;\n"+
+			"		};\n"+
+			"\n"+
+			"		return k ;\n"+
+			"	}\n"+
+			"\n"+
+			"	public static void main(String[] args) {\n"+
+			"		try {\n"+
+			"			System.out.println(foo(3));\n"+
+			"		} catch (IOException e) {\n"+
+			"			// do nothing\n"+
+			"		}\n"+
+			"	}\n"+
+			"}\n"
+				},
+		options,
+		"----------\n" + 
+		"1. ERROR in X.java (at line 12)\n" + 
+		"	x = null;\n" + 
+		"	    ^^^^\n" + 
+		"Null type mismatch: required \'@NonNull X\' but the provided value is null\n" + 
+		"----------\n" + 
+		"2. ERROR in X.java (at line 13)\n" + 
+		"	break x;\n" + 
+		"	^^^^^^^^\n" + 
+		"The label x is missing\n" + 
+		"----------\n" + 
+		"3. ERROR in X.java (at line 15)\n" + 
+		"	default -> null;\n" + 
+		"	           ^^^^\n" + 
+		"Null type mismatch: required \'@NonNull X\' but the provided value is null\n" + 
+		"----------\n"
+	);
+}
+public void testBug548418_001b() {
+	if (this.complianceLevel < ClassFileConstants.JDK13)
+		return;
+	Map options = getCompilerOptions();
+	options.put(JavaCore.COMPILER_PB_POTENTIAL_NULL_REFERENCE, JavaCore.ERROR);
+	options.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13); 
+	options.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	options.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
+	options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+	options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
+	runNegativeTestWithLibs(
+			new String[] {
+			"X.java",
+			"import java.io.IOException;\n"+
+			"\n"+
+			"import org.eclipse.jdt.annotation.NonNull;\n"+
+			"\n"+
+			"public class X {\n"+
+			"	public static int foo(int i) throws IOException {\n"+
+			"		int k = 0;\n"+
+			"		@NonNull\n"+
+			"		X x = new X();\n"+
+			"		x  = switch (i) { \n"+
+			"		case 1  ->   {\n"+
+			"			x = null;\n"+
+			"			yield x;\n"+
+			"		}\n"+
+			"		default -> null;\n"+
+			"		};\n"+
+			"\n"+
+			"		return k ;\n"+
+			"	}\n"+
+			"\n"+
+			"	public static void main(String[] args) {\n"+
+			"		try {\n"+
+			"			System.out.println(foo(3));\n"+
+			"		} catch (IOException e) {\n"+
+			"			// do nothing\n"+
+			"		}\n"+
+			"	}\n"+
+			"}\n"
+				},
+		options,
+		"----------\n" + 
+		"1. ERROR in X.java (at line 12)\n" + 
+		"	x = null;\n" + 
+		"	    ^^^^\n" + 
+		"Null type mismatch: required \'@NonNull X\' but the provided value is null\n" + 
+		"----------\n" + 
+		"2. ERROR in X.java (at line 15)\n" + 
+		"	default -> null;\n" + 
+		"	           ^^^^\n" + 
+		"Null type mismatch: required \'@NonNull X\' but the provided value is null\n" + 
+		"----------\n"
+	);
+}
+public void testBug548418_002a() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
+		return;
+	Map options = getCompilerOptions();
+	options.put(JavaCore.COMPILER_PB_POTENTIAL_NULL_REFERENCE, JavaCore.ERROR);
+	options.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13); 
+	options.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	options.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
+	options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+	options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
+	runNegativeTestWithLibs(
+			new String[] {
+			"X.java",
+			"import org.eclipse.jdt.annotation.*;\n" +
+			"public class X {\n" +
+			"    	void m1(@NonNull String a) {}\n" +
+			"		void m2(@Nullable String b, int i) {\n" +
+			"			m1(switch(i) {\n" +
+			"			case 0 : {\n" +
+			"				break \"hello\";\n" +
+			"			}\n" +
+			"			default : break \"world\";\n" +
+			"			});\n" +
+			"		}\n" +
+			"		void m3() {\n" +
+			"			Zork();\n" +
+			"		}\n" +
+			"}\n"
+				},
+		options,
+		"----------\n" + 
+		"1. ERROR in X.java (at line 7)\n" + 
+		"	break \"hello\";\n" + 
+		"	      ^^^^^^^\n" + 
+		"Syntax error on token \"\"hello\"\", delete this token\n" + 
+		"----------\n" + 
+		"2. ERROR in X.java (at line 9)\n" + 
+		"	default : break \"world\";\n" + 
+		"	                ^^^^^^^\n" + 
+		"Syntax error on token \"\"world\"\", delete this token\n" + 
+		"----------\n" + 
+		"3. ERROR in X.java (at line 13)\n" + 
+		"	Zork();\n" + 
+		"	^^^^\n" + 
+		"The method Zork() is undefined for the type X\n" + 
+		"----------\n"
+	);
+}
+public void testBug548418_002b() {
+	if (this.complianceLevel != ClassFileConstants.JDK13)
+		return;
+	Map options = getCompilerOptions();
+	options.put(JavaCore.COMPILER_PB_POTENTIAL_NULL_REFERENCE, JavaCore.ERROR);
+	options.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13); 
+	options.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+	options.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
+	options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+	options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
+	runNegativeTestWithLibs(
+			new String[] {
+			"X.java",
+			"import org.eclipse.jdt.annotation.*;\n" +
+			"public class X {\n" +
+			"    	void m1(@NonNull String a) {}\n" +
+			"		void m2(@Nullable String b, int i) {\n" +
+			"			m1(switch(i) {\n" +
+			"			case 0 : {\n" +
+			"				yield \"hello\";\n" +
+			"			}\n" +
+			"			default : yield \"world\";\n" +
+			"			});\n" +
+			"		}\n" +
+			"		void m3() {\n" +
+			"			Zork();\n" +
+			"		}\n" +
+			"}\n"
+				},
+		options,
+		"----------\n" + 
+		"1. ERROR in X.java (at line 13)\n" + 
+		"	Zork();\n" + 
+		"	^^^^\n" + 
+		"The method Zork() is undefined for the type X\n" + 
+		"----------\n"
+			);
+}
 public void testBug499714() {
 	runConformTestWithLibs(
 		new String[] {
@@ -10640,8 +10859,7 @@
 			"",
 		}, 
 		getCompilerOptions(),
-		""
-	);
+		"");
 }
 public void testBug481931_source() {
 	runNegativeTestWithLibs(
@@ -10755,7 +10973,6 @@
 			"	                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
 			"Dead code\n" + 
 			"----------\n";
-	runner.javacTestOptions = Excuse.EclipseWarningConfiguredAsError;
 	runner.runNegativeTest();
 }
 }
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullReferenceTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullReferenceTest.java
index 20134ad..ed6a8d6 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullReferenceTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullReferenceTest.java
@@ -17467,7 +17467,7 @@
 		"Statement unnecessarily nested within else clause. The corresponding then clause does not complete normally\n" + 
 		"----------\n";
 	runner.customOptions = getCompilerOptions();
-	runner.javacTestOptions = JavacTestOptions.Excuse.EclipseWarningConfiguredAsError;
+	runner.javacTestOptions = JavacTestOptions.Excuse.EclipseHasSomeMoreWarnings;
 	runner.runNegativeTest();
 }
 public void testBug435528_notaconstant() {
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ResourceLeakTests.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ResourceLeakTests.java
index 9f56550..1df8aa8 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ResourceLeakTests.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ResourceLeakTests.java
@@ -5496,7 +5496,7 @@
 	runner.runConformTest();
 }
 public void testBug542707_001() {
-	if (this.complianceLevel < ClassFileConstants.JDK12) return; // uses switch expression
+	if (this.complianceLevel < ClassFileConstants.JDK13) return; // uses switch expression
 	Map options = getCompilerOptions();
 	options.put(JavaCore.COMPILER_PB_UNCLOSED_CLOSEABLE, CompilerOptions.ERROR);
 	options.put(JavaCore.COMPILER_PB_POTENTIALLY_UNCLOSED_CLOSEABLE, CompilerOptions.ERROR);
@@ -5516,7 +5516,7 @@
 			"			x = new X();\n"+
 			"			x  = switch (i) { \n"+
 			"			  case 1  ->   {\n"+
-			"				 break x;\n"+
+			"				 yield x;\n"+
 			"			  }\n"+
 			"			  default -> x;\n"+
 			"			};\n"+
@@ -5548,7 +5548,7 @@
 		options);
 }
 public void testBug542707_002() {
-	if (this.complianceLevel < ClassFileConstants.JDK12) return; // uses switch expression
+	if (this.complianceLevel < ClassFileConstants.JDK13) return; // uses switch expression
 	Map options = getCompilerOptions();
 	options.put(JavaCore.COMPILER_PB_UNCLOSED_CLOSEABLE, CompilerOptions.ERROR);
 	options.put(JavaCore.COMPILER_PB_POTENTIALLY_UNCLOSED_CLOSEABLE, CompilerOptions.ERROR);
@@ -5569,7 +5569,7 @@
 			"			x  = switch (i) { \n"+
 			"			  case 1  ->   {\n"+
 			"				 x = new X();\n"+
-			"				 break x;\n"+
+			"				 yield x;\n"+
 			"			  }\n"+
 			"			  default -> x;\n"+
 			"			};\n"+
@@ -5606,7 +5606,7 @@
 		options);
 }
 public void testBug542707_003() {
-	if (this.complianceLevel < ClassFileConstants.JDK12) return; // uses switch expression
+	if (this.complianceLevel < ClassFileConstants.JDK13) return; // uses switch expression
 	Map options = getCompilerOptions();
 	options.put(JavaCore.COMPILER_PB_UNCLOSED_CLOSEABLE, CompilerOptions.ERROR);
 	options.put(JavaCore.COMPILER_PB_POTENTIALLY_UNCLOSED_CLOSEABLE, CompilerOptions.ERROR);
@@ -5626,7 +5626,7 @@
 			"			x = new X();\n"+
 			"			x  = switch (i) { \n"+
 			"			  case 1  ->   {\n"+
-			"				 break new X();\n"+
+			"				 yield new X();\n"+
 			"			  }\n"+
 			"			  default -> x;\n"+
 			"			};\n"+
@@ -5653,7 +5653,7 @@
 		"1. ERROR in X.java (at line 10)\n" + 
 		"	x  = switch (i) { \n" + 
 		"			  case 1  ->   {\n" + 
-		"				 break new X();\n" + 
+		"				 yield new X();\n" + 
 		"			  }\n" + 
 		"			  default -> x;\n" + 
 		"			};\n" + 
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ScannerTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ScannerTest.java
index 5959d4b..3f8bd30 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ScannerTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/ScannerTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2018 IBM Corporation and others.
+ * Copyright (c) 2000, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -1475,4 +1475,70 @@
 					});
 		}
 	}
+	public void testBug531716_001_since_13() {
+		char[] source = ("class X {\n" +
+				"  String  s = \"\"\"This is the new String\"\"\";\n" +
+				"}").toCharArray();
+		Scanner scanner = new Scanner(false, false, false, ClassFileConstants.getLatestJDKLevel(), null, null, false);
+		scanner.setSource(source);
+		scanner.resetTo(0, source.length - 1);
+		try {
+			int token;
+			StringBuffer buffer = new StringBuffer();
+			while ((token = scanner.getNextToken()) != TerminalTokens.TokenNameEOF) {
+				try {
+					switch(token) {
+						case TerminalTokens.TokenNameTextBlock :
+							buffer.append( new String(scanner.getCurrentTextBlock()));
+							break;
+						case TerminalTokens.TokenNameStringLiteral :
+							break;
+						case TerminalTokens.TokenNameEOF :
+							break;
+						default :
+							break;
+					}
+				} catch (ArrayIndexOutOfBoundsException e) {
+					e.printStackTrace();
+				}
+			}
+			assertEquals("Wrong contents", "", String.valueOf(buffer));
+		} catch (InvalidInputException e) {
+			assertTrue(false);
+		}
+	}
+	public void testBug531716_001_since_13_1() {
+		char[] source = ("class X {\n" +
+				"  String  s = \"\"\"\nThis is the new String\"\"\";\n" +
+				"}").toCharArray();
+		Scanner scanner = new Scanner(false, false, false, ClassFileConstants.getLatestJDKLevel(), null, null, false);
+		scanner.previewEnabled = true;
+		scanner.setSource(source);
+		scanner.resetTo(0, source.length - 1);
+		try {
+			int token;
+			StringBuffer buffer = new StringBuffer();
+			while ((token = scanner.getNextToken()) != TerminalTokens.TokenNameEOF) {
+				try {
+					switch(token) {
+						case TerminalTokens.TokenNameTextBlock :
+							buffer.append( new String(scanner.getCurrentTextBlock()));
+							break;
+						case TerminalTokens.TokenNameStringLiteral :
+							break;
+						case TerminalTokens.TokenNameEOF :
+							break;
+						default :
+							break;
+					}
+				} catch (ArrayIndexOutOfBoundsException e) {
+					e.printStackTrace();
+				}
+			}
+			assertEquals("Wrong contents", "This is the new String", String.valueOf(buffer));
+		} catch (InvalidInputException e) {
+			assertTrue(false);
+		}
+	}
+
 }
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/StaticImportTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/StaticImportTest.java
index d76b71d..a77e21c 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/StaticImportTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/StaticImportTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2019 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -2459,7 +2459,7 @@
 				"}\n",
 			},
 			"----------\n" + 
-			"1. ERROR in node\\Test.java (at line 2)\n" + 
+			"1. WARNING in node\\Test.java (at line 2)\n" + 
 			"	public class Test {\n" + 
 			"	             ^^^^\n" + 
 			"The type Test collides with a package\n" + 
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchExpressionTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchExpressionTest.java
index fc14e13..4305c24 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchExpressionTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchExpressionTest.java
@@ -14,7 +14,6 @@
 
 import java.util.Map;
 
-import org.eclipse.jdt.core.tests.compiler.regression.AbstractRegressionTest.JavacTestOptions.JavacHasABug;
 import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
 import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
 
@@ -24,7 +23,7 @@
 
 	static {
 //		TESTS_NUMBERS = new int [] { 40 };
-//		TESTS_NAMES = new String[] { "testBug548476" };
+//		TESTS_NAMES = new String[] { "_testBug543240" };
 	}
 	
 	public static Class<?> testClass() {
@@ -47,38 +46,18 @@
 		defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
 		return defaultOptions;
 	}
-
+	
 	@Override
-	protected void runConformTest(String[] testFiles, String expectedOutput) {
-		runConformTest(testFiles, expectedOutput, getCompilerOptions());
+	protected void runConformTest(String[] testFiles, Map<String, String> customOptions) {
+		super.runConformTest(testFiles, "", null, true, new String[] {"--enable-preview"}, customOptions, null);
 	}
 
 	@Override
-	protected void runConformTest(String[] testFiles, String expectedOutput, Map customOptions) {
-		Runner runner = new Runner();
-		runner.testFiles = testFiles;
-		runner.expectedOutputString = expectedOutput;
-		runner.vmArguments = new String[] {"--enable-preview"};
-		runner.customOptions = customOptions;
-		runner.javacTestOptions = JavacTestOptions.forReleaseWithPreview("12");
-		runner.runConformTest();
+	protected void runConformTest(String[] testFiles, String expectedOutput, Map<String, String> customOptions) {
+		super.runConformTest(testFiles, expectedOutput, null, true, new String[] {"--enable-preview"}, customOptions, null);
 	}
-	@Override
-	protected void runNegativeTest(String[] testFiles, String expectedCompilerLog) {
-		runNegativeTest(testFiles, expectedCompilerLog, JavacTestOptions.forReleaseWithPreview("12"));
-	}
-	protected void runWarningTest(String[] testFiles, String expectedCompilerLog, Map<String, String> customOptions) {
-		Runner runner = new Runner();
-		runner.testFiles = testFiles;
-		runner.expectedCompilerLog = expectedCompilerLog;
-		runner.customOptions = customOptions;
-		runner.vmArguments = new String[] {"--enable-preview"};
-		runner.javacTestOptions = JavacTestOptions.forReleaseWithPreview("12");
-		runner.runWarningTest();
-	}
-
 	public void testSimpleExpressions() {
-		runConformTest(
+		runNegativeTest(
 				new String[] {
 						"X.java",
 						"public class X {\n" +
@@ -95,10 +74,15 @@
 						"	}\n" +
 						"}\n"
 				},
-				"3");
+				"----------\n" + 
+				"1. ERROR in X.java (at line 0)\n" + 
+				"	public class X {\n" + 
+				"	^\n" + 
+				"Preview features enabled at an invalid source release level 12, preview can be enabled only at source level 13\n" + 
+				"----------\n");
 	}
 	public void testSwitchExpression_531714_002() {
-		runConformTest(
+		runNegativeTest(
 				new String[] {
 						"X.java",
 						"public class X {\n"+
@@ -127,9 +111,14 @@
 								"	}\n"+
 								"}\n"
 				},
-				"Got Exception - expected");
+				"----------\n" + 
+				"1. ERROR in X.java (at line 0)\n" + 
+				"	public class X {\n" + 
+				"	^\n" + 
+				"Preview features enabled at an invalid source release level 12, preview can be enabled only at source level 13\n" + 
+				"----------\n");
 	}
-	public void testBug531714_error_003() {
+	public void _testBug531714_error_003() {
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -157,7 +146,7 @@
 			"A switch expression should have a default case\n" + 
 			"----------\n");
 	}
-	public void testBug531714_error_004() {
+	public void _testBug531714_error_004() {
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -180,13 +169,13 @@
 				"}\n",
 			},
 			"----------\n" + 
-			"1. ERROR in X.java (at line 12)\n" + 
-			"	case \"hello\" -> throw new java.io.IOException(\"hello\");\n" + 
-			"	     ^^^^^^^\n" + 
-			"Type mismatch: cannot convert from String to int\n" + 
+			"1. ERROR in X.java (at line 10)\n" + 
+			"	break 1;\n" + 
+			"	      ^\n" + 
+			"Syntax error on token \"1\", delete this token\n" + 
 			"----------\n");
 	}
-	public void testBug531714_error_005() {
+	public void _testBug531714_error_005() {
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -208,10 +197,10 @@
 				"}\n",
 			},
 			"----------\n" + 
-			"1. ERROR in X.java (at line 6)\n" + 
-			"	int tw = switch (i) {\n" + 
-			"	                 ^\n" + 
-			"A switch expression should have a default case\n" + 
+			"1. ERROR in X.java (at line 10)\n" + 
+			"	break 1;\n" + 
+			"	      ^\n" + 
+			"Syntax error on token \"1\", delete this token\n" + 
 			"----------\n");
 	}
 	/**
@@ -221,7 +210,7 @@
 	 *  must contain all the enum constants of that enum type
 	 *  Add a missing enum test case
 	 */
-	public void _testBug531714_error_006() {
+	public void __testBug531714_error_006() {
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -258,33 +247,43 @@
 	 * should compile - test for adding additional nesting in variables
 	 * dev note: ref consumeToken().case Switch 
 	 */
-	public void testBug531714_error_007() {
-		runConformTest(
-				new String[] {
-						"X.java",
-						"public class X {\n"+
-						"	static int foo(int i) {\n"+
-						"		int tw = \n"+
-						"		switch (i) {\n"+
-						"			case 1 -> \n"+
-						"			 {\n"+
-						" 				int z = 100;\n"+
-						" 				break z;\n"+
-						"			}\n"+
-						"			default -> {\n"+
-						"				break 12;\n"+
-						"			}\n"+
-						"		};\n"+
-						"		return tw;\n"+
-						"	}\n"+
-						"	public static void main(String[] args) {\n"+
-						"		System.out.print(foo(1));\n"+
-						"	}\n"+
-						"}\n"
-				},
-				"100");
+	public void _testBug531714_error_007() {
+		this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"public class X {\n"+
+				"	static int foo(int i) {\n"+
+				"		int tw = \n"+
+				"		switch (i) {\n"+
+				"			case 1 -> \n"+
+				"			 {\n"+
+				" 				int z = 100;\n"+
+				" 				break z;\n"+
+				"			}\n"+
+				"			default -> {\n"+
+				"				break 12;\n"+
+				"			}\n"+
+				"		};\n"+
+				"		return tw;\n"+
+				"	}\n"+
+				"	public static void main(String[] args) {\n"+
+				"		System.out.print(foo(1));\n"+
+				"	}\n"+
+				"}\n"
+			},
+			"----------\n" + 
+			"1. ERROR in X.java (at line 10)\n" + 
+			"	default -> {\n" + 
+			"	^^^^^^^\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+			"----------\n" + 
+			"2. ERROR in X.java (at line 11)\n" + 
+			"	break 12;\n" + 
+			"	      ^^\n" + 
+			"Syntax error on token \"12\", delete this token\n" + 
+			"----------\n");
 	}
-	public void testBug531714_008() {
+	public void _testBug531714_008() {
 		Map<String, String> disablePreviewOptions = getCompilerOptions();
 		disablePreviewOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.DISABLED);
 		String[] testFiles = new String[] {
@@ -328,7 +327,7 @@
 				"4. ERROR in X.java (at line 6)\n" + 
 				"	default -> 3;\n" + 
 				"	^^^^^^^\n" + 
-				"Case Labels with '->' is a preview feature and disabled by default. Use --enable-preview to enable\n" + 
+				"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
 				"----------\n";
 
 		this.runNegativeTest(
@@ -338,8 +337,8 @@
 				true,
 				disablePreviewOptions);
 	}
-	public void testBug543667_001() {
-		runConformTest(
+	public void _testBug543667_001() {
+		runNegativeTest(
 			new String[] {
 				"X.java",
 				"public class X {\n" +
@@ -355,9 +354,14 @@
 				"	}\n" +
 				"}\n"
 			},
-			"hello");
+			"----------\n" + 
+			"1. ERROR in X.java (at line 6)\n" + 
+			"	default -> System.out.println(\"DEFAULT\");\n" + 
+			"	^^^^^^^\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+			"----------\n");
 	}
-	public void testBug531714_009() {
+	public void _testBug531714_009() {
 		Map<String, String> disablePreviewOptions = getCompilerOptions();
 		disablePreviewOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.DISABLED);
 		String[] testFiles = new String[] {
@@ -392,7 +396,7 @@
 				"3. ERROR in X.java (at line 6)\n" + 
 				"	default -> 3;\n" + 
 				"	^^^^^^^\n" + 
-				"Case Labels with \'->\' is a preview feature and disabled by default. Use --enable-preview to enable\n" + 
+				"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
 				"----------\n";
 		this.runNegativeTest(
 				testFiles,
@@ -401,7 +405,7 @@
 				true,
 				disablePreviewOptions);
 	}
-	public void testBug531714_010() {
+	public void _testBug531714_010() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.ERROR);
@@ -425,7 +429,7 @@
 				"1. ERROR in X.java (at line 4)\n" + 
 				"	default -> 3;\n" + 
 				"	^^^^^^^\n" + 
-				"You are using a preview language feature that may or may not be supported in a future release\n" + 
+				"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
 				"----------\n" + 
 				"2. ERROR in X.java (at line 4)\n" + 
 				"	default -> 3;\n" + 
@@ -439,7 +443,7 @@
 				true,
 				options);
 	}
-	public void testBug531714_011() {
+	public void _testBug531714_011() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.WARNING);
@@ -463,12 +467,20 @@
 				"----------\n" + 
 				"1. ERROR in X.java (at line 5)\n" + 
 				"	default -> 3;\n" + 
+				"	^^^^^^^\n" + 
+				"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 5)\n" + 
+				"	default -> 3;\n" + 
 				"	           ^\n" + 
 				"Invalid expression as statement\n" + 
 				"----------\n";
 		this.runNegativeTest(
 				testFiles,
-				expectedProblemLog);
+				expectedProblemLog,
+				null,
+				true,
+				getCompilerOptions());
 	}
 	public void testBug531714_012() {
 		Map<String, String> options = getCompilerOptions();
@@ -494,15 +506,10 @@
 
 			String expectedProblemLog =
 					"----------\n" + 
-					"1. ERROR in X.java (at line 4)\n" + 
-					"	default -> 3;\n" + 
-					"	^^^^^^^\n" + 
-					"The preview feature Case Labels with \'->\' is only available with source level 12 and above\n" + 
-					"----------\n" + 
-					"2. ERROR in X.java (at line 4)\n" + 
-					"	default -> 3;\n" + 
-					"	           ^\n" + 
-					"Invalid expression as statement\n" + 
+					"1. ERROR in X.java (at line 0)\n" + 
+					"	public class X {\n" + 
+					"	^\n" + 
+					"Preview features enabled at an invalid source release level 11, preview can be enabled only at source level 13\n" + 
 					"----------\n";
 			this.runNegativeTest(
 					testFiles,
@@ -514,7 +521,7 @@
 			options.put(CompilerOptions.OPTION_Source, release);
 		}
 	}
-	public void testBug531714_013() {
+	public void _testBug531714_013() {
 			String[] testFiles = new String[] {
 					"X.java",
 					"public class X {\n" +
@@ -540,10 +547,10 @@
 
 			String expectedProblemLog =
 					"----------\n" + 
-					"1. ERROR in X.java (at line 8)\n" + 
-					"	default :v = 2;\n" + 
-					"	         ^^^^^\n" + 
-					"A switch labeled block in a switch expression should not complete normally\n" + 
+					"1. ERROR in X.java (at line 6)\n" + 
+					"	break 0;\n" + 
+					"	      ^\n" + 
+					"Syntax error on token \"0\", delete this token\n" + 
 					"----------\n";
 			this.runNegativeTest(
 					testFiles,
@@ -552,7 +559,7 @@
 					true,
 					getCompilerOptions());
 	}
-	public void testBug531714_014() {
+	public void _testBug531714_014() {
 		// switch expression is not a Primary
 		Runner runner = new Runner();
 		runner.customOptions = getCompilerOptions();
@@ -572,16 +579,20 @@
 		};
 		runner.expectedCompilerLog =
 				"----------\n" + 
-				"1. ERROR in X.java (at line 6)\n" + 
+				"1. ERROR in X.java (at line 5)\n" + 
+				"	default -> null;\n" + 
+				"	^^^^^^^\n" + 
+				"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 6)\n" + 
 				"	}.toLowerCase());\n" + 
 				"	 ^\n" + 
 				"Syntax error on token \".\", , expected\n" + 
 				"----------\n";
-		runner.javacTestOptions = JavacTestOptions.forReleaseWithPreview("12");
 		runner.runNegativeTest();
 	}
-	public void testBug543673_001() {
-		runConformTest(
+	public void _testBug543673_001() {
+		runNegativeTest(
 			new String[] {
 				"X.java",
 				"public class X {\n" +
@@ -603,12 +614,17 @@
 				"	MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;\n" +
 				"}\n"
 			},
-			"6");
+			"----------\n" + 
+			"1. ERROR in X.java (at line 6)\n" + 
+			"	default -> 10;\n" + 
+			"	^^^^^^^\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+			"----------\n");
 	}
 	/*
 	 * A simple multi constant case statement, compiled and run as expected
 	 */
-	public void testBug543240_1() {
+	public void _testBug543240_1() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -631,16 +647,24 @@
 						"enum Day { SATURDAY, SUNDAY, MONDAY;}",
 		};
 
-		String expectedOutput =
-				"SUNDAY";
-		this.runConformTest(
+		String expectedProblemLog =
+			"----------\n" + 
+			"1. ERROR in X.java (at line 4)\n" + 
+			"	case SATURDAY, SUNDAY: \n" + 
+			"	^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+			"----------\n";
+		this.runNegativeTest(
 				testFiles,
-				expectedOutput);
+				expectedProblemLog,
+				null,
+				true,
+				options);
 	}
 	/*
 	 * A simple multi constant case statement, compiler reports missing enum constants
 	 */
-	public void testBug543240_1a() {
+	public void _testBug543240_1a() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -668,16 +692,24 @@
 						"	switch (day) {\n" + 
 						"	        ^^^\n" + 
 						"The enum constant TUESDAY needs a corresponding case label in this enum switch on Day\n" + 
+						"----------\n" + 
+						"2. ERROR in X.java (at line 6)\n" + 
+						"	case SATURDAY, SUNDAY: \n" + 
+						"	^^^^^^^^^^^^^^^^^^^^^\n" + 
+						"The preview feature Multi constant case is only available with source level 13 and above\n" + 
 						"----------\n";
-		this.runWarningTest(
+		this.runNegativeTest(
 				testFiles,
 				expectedProblemLog,
+				null,
+				true,
+				new String[] { "--enable-preview"},
 				options);
 	}
 	/*
 	 * A simple multi constant case statement with duplicate enums
 	 */
-	public void testBug543240_2() {
+	public void _testBug543240_2() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -702,16 +734,21 @@
 
 		String expectedProblemLog =
 				"----------\n" + 
-						"1. ERROR in X.java (at line 4)\n" + 
-						"	case SATURDAY, SUNDAY: \n" + 
-						"	^^^^^^^^^^^^^^^^^^^^^\n" + 
-						"Duplicate case\n" + 
-						"----------\n" + 
-						"2. ERROR in X.java (at line 7)\n" + 
-						"	case SUNDAY : System.out.println(Day.SUNDAY);\n" + 
-						"	^^^^^^^^^^^\n" + 
-						"Duplicate case\n" + 
-						"----------\n";
+				"1. ERROR in X.java (at line 4)\n" + 
+				"	case SATURDAY, SUNDAY: \n" + 
+				"	^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 4)\n" + 
+				"	case SATURDAY, SUNDAY: \n" + 
+				"	^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Duplicate case\n" + 
+				"----------\n" + 
+				"3. ERROR in X.java (at line 7)\n" + 
+				"	case SUNDAY : System.out.println(Day.SUNDAY);\n" + 
+				"	^^^^^^^^^^^\n" + 
+				"Duplicate case\n" + 
+				"----------\n";
 		this.runNegativeTest(
 				testFiles,
 				expectedProblemLog,
@@ -722,7 +759,7 @@
 	/*
 	 * A simple multi constant case statement with duplicate enums
 	 */
-	public void testBug543240_2a() {
+	public void _testBug543240_2a() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -752,17 +789,27 @@
 						"----------\n" + 
 						"2. ERROR in X.java (at line 4)\n" + 
 						"	case SATURDAY, SUNDAY: \n" + 
-						"	^^^^^^^^^^^^^^^^^^^^^\n" +
-						"Duplicate case\n" + 
+						"	^^^^^^^^^^^^^^^^^^^^^\n" + 
+						"The preview feature Multi constant case is only available with source level 13 and above\n" + 
 						"----------\n" + 
-						"3. ERROR in X.java (at line 7)\n" + 
-						"	case SUNDAY, SATURDAY : \n" + 
+						"3. ERROR in X.java (at line 4)\n" + 
+						"	case SATURDAY, SUNDAY: \n" + 
 						"	^^^^^^^^^^^^^^^^^^^^^\n" + 
 						"Duplicate case\n" + 
 						"----------\n" + 
 						"4. ERROR in X.java (at line 7)\n" + 
 						"	case SUNDAY, SATURDAY : \n" + 
 						"	^^^^^^^^^^^^^^^^^^^^^\n" + 
+						"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+						"----------\n" + 
+						"5. ERROR in X.java (at line 7)\n" + 
+						"	case SUNDAY, SATURDAY : \n" + 
+						"	^^^^^^^^^^^^^^^^^^^^^\n" + 
+						"Duplicate case\n" + 
+						"----------\n" + 
+						"6. ERROR in X.java (at line 7)\n" + 
+						"	case SUNDAY, SATURDAY : \n" + 
+						"	^^^^^^^^^^^^^^^^^^^^^\n" + 
 						"Duplicate case\n" + 
 						"----------\n";
 		this.runNegativeTest(
@@ -775,7 +822,7 @@
 	/*
 	 * 
 	 */
-	public void testBug543240_3() {
+	public void _testBug543240_3() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -804,13 +851,21 @@
 				"	switch (day) {\n" + 
 				"	        ^^^\n" + 
 				"The enum constant MONDAY needs a corresponding case label in this enum switch on Day\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 4)\n" + 
+				"	case SATURDAY, SUNDAY: \n" + 
+				"	^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"The preview feature Multi constant case is only available with source level 13 and above\n" + 
 				"----------\n";
-		this.runWarningTest(
+		this.runNegativeTest(
 				testFiles,
 				expectedProblemLog,
+				null,
+				true,
+				new String[] {"--enable-preview"},
 				options);
 	}
-	public void testBug543240_4() {
+	public void _testBug543240_4() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -836,18 +891,23 @@
 		};
 
 		String expectedProblemLog =
-				"SATURDAY\n" + 
-				"0\n" + 
-				"SUNDAY";
-		this.runConformTest(
+				"----------\n" + 
+				"1. ERROR in X.java (at line 4)\n" + 
+				"	case SATURDAY, SUNDAY: \n" + 
+				"	^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+				"----------\n";
+		this.runNegativeTest(
 				testFiles,
 				expectedProblemLog,
+				null,
+				true,
 				options);
 	}
 	/*
 	 * Simple switch case with string literals
 	 */
-	public void testBug543240_5() {
+	public void _testBug543240_5() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -886,7 +946,7 @@
 				options,
 				new String[] {"--enable-preview"});
 	}
-	public void testBug543240_6() {
+	public void _testBug543240_6() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -914,20 +974,24 @@
 						"}",
 		};
 		String expectedProblemLog =
-				"A/B\n" + 
-				"A/B\n" + 
-				"C\n" + 
-				"NA";
-		this.runConformTest(
+				"----------\n" + 
+				"1. ERROR in X.java (at line 10)\n" + 
+				"	case \"a\", \"b\":\n" + 
+				"	^^^^^^^^^^^^^\n" + 
+				"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+				"----------\n";
+		this.runNegativeTest(
 				testFiles,
 				expectedProblemLog,
+				null,
+				true,
 				options);
 	}
 	/*
 	 * Switch with multi constant case statements with string literals
 	 * two string literals with same hashcode
 	 */
-	public void testBug543240_7() {
+	public void _testBug543240_7() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -955,19 +1019,23 @@
 						"}",
 		};
 		String expectedProblemLog =
-				"A\n" + 
-				"B\n" + 
-				"A\n" + 
-				"NA";
-		this.runConformTest(
+				"----------\n" + 
+				"1. ERROR in X.java (at line 10)\n" + 
+				"	case \"FB\", \"c\":\n" + 
+				"	^^^^^^^^^^^^^^\n" + 
+				"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+				"----------\n";
+		this.runNegativeTest(
 				testFiles,
 				expectedProblemLog,
+				null,
+				true,
 				options);
 	}
 	/*
 	 * Switch with multi constant case statements with integer constants
 	 */
-	public void testBug543240_8() {
+	public void _testBug543240_8() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -996,20 +1064,28 @@
 						"}",
 		};
 		String expectedProblemLog =
-				"Odd\n" + 
-				"Even\n" + 
-				"Odd\n" + 
-				"Even\n" + 
-				"Out of range";
-		this.runConformTest(
+				"----------\n" + 
+				"1. ERROR in X.java (at line 11)\n" + 
+				"	case 1, 3: \n" + 
+				"	^^^^^^^^^\n" + 
+				"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 14)\n" + 
+				"	case 2, 4: \n" + 
+				"	^^^^^^^^^\n" + 
+				"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+				"----------\n";
+		this.runNegativeTest(
 				testFiles,
 				expectedProblemLog,
+				null,
+				true,
 				options);
 	}
 	/*
 	 * Switch multi-constant with mixed constant types, reported
 	 */
-	public void testBug543240_9() {
+	public void _testBug543240_9() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -1034,7 +1110,12 @@
 		};
 		String expectedProblemLog =
 				"----------\n" + 
-				"1. ERROR in X.java (at line 9)\n" + 
+				"1. ERROR in X.java (at line 6)\n" + 
+				"	case 1, 3: \n" + 
+				"	^^^^^^^^^\n" + 
+				"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 9)\n" + 
 				"	case \"2\": \n" + 
 				"	     ^^^\n" + 
 				"Type mismatch: cannot convert from String to int\n" + 
@@ -1049,7 +1130,7 @@
 	/*
 	 * Switch multi-constant without break statement, reported
 	 */
-	public void testBug543240_10() {
+	public void _testBug543240_10() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -1074,20 +1155,27 @@
 		};
 		String expectedProblemLog =
 				"----------\n" + 
-				"1. WARNING in X.java (at line 8)\n" + 
+				"1. ERROR in X.java (at line 6)\n" + 
+				"	case 1, 3: \n" + 
+				"	^^^^^^^^^\n" + 
+				"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 8)\n" + 
 				"	case 2, 4: \n" + 
 				"	^^^^^^^^^\n" + 
-				"Switch case may be entered by falling through previous case. If intended, add a new comment //$FALL-THROUGH$ on the line above\n" + 
+				"The preview feature Multi constant case is only available with source level 13 and above\n" + 
 				"----------\n";
-		this.runWarningTest(
+		this.runNegativeTest(
 				testFiles,
 				expectedProblemLog,
+				null,
+				true,
 				options);
 	}
 	/*
 	 * Switch multi-constant without break statement, reported
 	 */
-	public void testBug543240_11() {
+	public void _testBug543240_11() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -1113,16 +1201,28 @@
 				"	switch (i) {\n" + 
 				"	        ^\n" + 
 				"The switch statement should have a default case\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 6)\n" + 
+				"	case 1, 3: \n" + 
+				"	^^^^^^^^^\n" + 
+				"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+				"----------\n" + 
+				"3. ERROR in X.java (at line 8)\n" + 
+				"	case 2, 4: \n" + 
+				"	^^^^^^^^^\n" + 
+				"The preview feature Multi constant case is only available with source level 13 and above\n" + 
 				"----------\n";
-		this.runWarningTest(
+		this.runNegativeTest(
 				testFiles,
 				expectedProblemLog,
+				null,
+				true,
 				options);
 	}
 	/*
 	 * Switch multi-constant with duplicate int constants
 	 */
-	public void testBug543240_12() {
+	public void _testBug543240_12() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -1146,9 +1246,19 @@
 				"1. ERROR in X.java (at line 6)\n" + 
 				"	case 1, 3: \n" + 
 				"	^^^^^^^^^\n" + 
+				"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 6)\n" + 
+				"	case 1, 3: \n" + 
+				"	^^^^^^^^^\n" + 
 				"Duplicate case\n" + 
 				"----------\n" + 
-				"2. ERROR in X.java (at line 8)\n" + 
+				"3. ERROR in X.java (at line 8)\n" + 
+				"	case 3, 4: \n" + 
+				"	^^^^^^^^^\n" + 
+				"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+				"----------\n" + 
+				"4. ERROR in X.java (at line 8)\n" + 
 				"	case 3, 4: \n" + 
 				"	^^^^^^^^^\n" + 
 				"Duplicate case\n" + 
@@ -1163,7 +1273,7 @@
 	/*
 	 * Switch multi-constant with duplicate String literals
 	 */
-	public void testBug543240_13() {
+	public void _testBug543240_13() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -1187,9 +1297,19 @@
 				"1. ERROR in X.java (at line 6)\n" + 
 				"	case \"a\", \"b\": \n" + 
 				"	^^^^^^^^^^^^^\n" + 
+				"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 6)\n" + 
+				"	case \"a\", \"b\": \n" + 
+				"	^^^^^^^^^^^^^\n" + 
 				"Duplicate case\n" + 
 				"----------\n" + 
-				"2. ERROR in X.java (at line 8)\n" + 
+				"3. ERROR in X.java (at line 8)\n" + 
+				"	case \"b\", \"c\": \n" + 
+				"	^^^^^^^^^^^^^\n" + 
+				"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+				"----------\n" + 
+				"4. ERROR in X.java (at line 8)\n" + 
 				"	case \"b\", \"c\": \n" + 
 				"	^^^^^^^^^^^^^\n" + 
 				"Duplicate case\n" + 
@@ -1204,7 +1324,7 @@
 	/*
 	 * Switch multi-constant with illegal qualified enum constant
 	 */
-	public void testBug543240_14() {
+	public void _testBug543240_14() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -1226,6 +1346,11 @@
 				"----------\n" + 
 				"1. ERROR in X.java (at line 6)\n" + 
 				"	case ONE, Num.TWO: \n" + 
+				"	^^^^^^^^^^^^^^^^^\n" + 
+				"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 6)\n" + 
+				"	case ONE, Num.TWO: \n" + 
 				"	          ^^^^^^^\n" + 
 				"The qualified case label Num.TWO must be replaced with the unqualified enum constant TWO\n" + 
 				"----------\n";
@@ -1236,7 +1361,7 @@
 				true,
 				options);
 	}
-	public void testBug543240_15() {
+	public void _testBug543240_15() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -1253,10 +1378,15 @@
 		};
 		String expectedProblemLog =
 				"----------\n" + 
-				"1. ERROR in X.java (at line 5)\n" + 
+				"1. ERROR in X.java (at line 4)\n" + 
+				"	case 1, 2, 3 -> (s+1);\n" + 
+				"	^^^^^^^^^^^^\n" + 
+				"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 5)\n" + 
 				"	default -> j;\n" + 
-				"	           ^\n" + 
-				"The local variable j may not have been initialized\n" + 
+				"	^^^^^^^\n" + 
+				"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
 				"----------\n";
 		this.runNegativeTest(
 				testFiles,
@@ -1265,7 +1395,7 @@
 				true,
 				options);
 	}
-	public void testBug543240_16() {
+	public void _testBug543240_16() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -1283,12 +1413,27 @@
 				"	}\n" + 
 				"}\n",
 		};
-		this.runConformTest(
+		String expectedProblemLog =
+				"----------\n" + 
+				"1. ERROR in X.java (at line 6)\n" + 
+				"	case 1, 2, 3 -> (s+1);\n" + 
+				"	^^^^^^^^^^^^\n" + 
+				"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 7)\n" + 
+				"	default -> j;\n" + 
+				"	^^^^^^^\n" + 
+				"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+				"----------\n";
+		this.runNegativeTest(
 				testFiles,
-				"",
+				expectedProblemLog,
+				null,
+				true,
+				new String[] { "--enable-preview"},
 				options);
 	}
-	public void testBug543795_01() {
+	public void _testBug543795_01() {
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -1322,13 +1467,18 @@
 				"}\n",
 			},
 			"----------\n" + 
-			"1. ERROR in X.java (at line 10)\n" + 
-			"	break;\n" + 
-			"	^^^^^^\n" + 
-			"Break of a switch expression should have a value\n" + 
+			"1. ERROR in X.java (at line 7)\n" + 
+			"	break 0;\n" + 
+			"	      ^\n" + 
+			"Syntax error on token \"0\", delete this token\n" + 
+			"----------\n" + 
+			"2. ERROR in X.java (at line 12)\n" + 
+			"	default : break 10;\n" + 
+			"	                ^^\n" + 
+			"Syntax error on token \"10\", delete this token\n" + 
 			"----------\n");
 	}
-	public void testBug543691() {
+	public void _testBug543691() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -1359,7 +1509,7 @@
 				true,
 				options);
 	}
-	public void testBug543799_1() {
+	public void _testBug543799_1() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -1380,10 +1530,16 @@
 			"	}\n" + 
 			"}\n"
 		};
-		String expectedOutput = "hello world";
-		runConformTest(testFiles, expectedOutput, options);
+		String expectedProblemLog =
+			"----------\n" + 
+			"1. ERROR in X.java (at line 5)\n" + 
+			"	default -> i == 3 ? null : \"\";\n" + 
+			"	^^^^^^^\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+			"----------\n";
+		runNegativeTest(testFiles, expectedProblemLog, null, true, options);
 	}
-	public void testBug543799_2() {
+	public void _testBug543799_2() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -1404,10 +1560,21 @@
 			"	}\n" + 
 			"}\n"
 		};
-		String expectedOutput = "hello world";
-		runConformTest(testFiles, expectedOutput, options);
+		String expectedProblemLog =
+			"----------\n" + 
+			"1. ERROR in X.java (at line 4)\n" + 
+			"	case 1: break \"\";\n" + 
+			"	              ^^\n" + 
+			"Syntax error on token \"\"\"\", delete this token\n" + 
+			"----------\n" + 
+			"2. ERROR in X.java (at line 5)\n" + 
+			"	default: break i == 3 ? null : \"\";\n" + 
+			"	         ^^^^^\n" + 
+			"Syntax error on token \"break\", yield expected\n" + 
+			"----------\n";
+		runNegativeTest(testFiles, expectedProblemLog, null, true, options);
 	}
-	public void testBug543799_3() {
+	public void _testBug543799_3() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -1435,10 +1602,16 @@
 			"	}\n" + 
 			"}\n"
 		};
-		String expectedOutput = "NPE as expected";
-		runConformTest(testFiles, expectedOutput, options);
+		String expectedProblemLog =
+				"----------\n" + 
+				"1. ERROR in X.java (at line 11)\n" + 
+				"	default -> b ? n1() : n2();\n" + 
+				"	^^^^^^^\n" + 
+				"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+				"----------\n";
+			runNegativeTest(testFiles, expectedProblemLog, null, true, options);
 	}
-	public void testBug543799_4() {
+	public void _testBug543799_4() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -1467,10 +1640,16 @@
 			"	}\n" + 
 			"}\n"
 		};
-		String expectedOutput = "NPE as expected";
-		runConformTest(testFiles, expectedOutput, options);
+		String expectedProblemLog =
+			"----------\n" + 
+			"1. ERROR in X.java (at line 12)\n" + 
+				"	default -> this::n2;\n" + 
+			"	^^^^^^^\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+			"----------\n";
+		runNegativeTest(testFiles, expectedProblemLog, null, true, options);
 	}
-	public void testBug543799_5() {
+	public void _testBug543799_5() {
 		// require resolving/inferring of poly-switch-expression during ASTNode.resolvePolyExpressionArguments()
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
@@ -1492,11 +1671,17 @@
 			"	}\n" + 
 			"}\n"
 		};
-		String expectedOutput = "3";
-		runConformTest(testFiles, expectedOutput, options);
+		String expectedProblemLog =
+			"----------\n" + 
+			"1. ERROR in X.java (at line 5)\n" + 
+			"	default -> i == 3 ? 3 : 5.0d;\n" + 
+			"	^^^^^^^\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+			"----------\n";
+		runNegativeTest(testFiles, expectedProblemLog, null, true, options);
 	}
-	public void testSwitchStatementWithBreakExpression() {
-		runConformTest(
+	public void _testSwitchStatementWithBreakExpression() {
+		runNegativeTest(
 			new String[] {
 					"X.java",
 					"public class X {\n" + 
@@ -1523,10 +1708,14 @@
 					"	}\n" + 
 					"}"
 			},
-			"inside foo\n"
-			+ "0");
+			"----------\n" + 
+			"1. ERROR in X.java (at line 6)\n" + 
+			"	default -> throw new Exception();\n" + 
+			"	^^^^^^^\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+			"----------\n");
 	}
-	public void testSwitchStatementWithEnumValues() {
+	public void _testSwitchStatementWithEnumValues() {
 		runConformTest(
 			new String[] {
 					"X.java",
@@ -1550,9 +1739,11 @@
 					"}\n" + 
 					""
 			},
-			"1");
+			"1",
+			null,
+			new String[] {"--enable-preview"});
 	}
-	public void testBug543967_01() {
+	public void _testBug543967_01() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		String[] testFiles = new String[] {
@@ -1574,6 +1765,11 @@
 				"----------\n" + 
 				"1. ERROR in X.java (at line 4)\n" + 
 				"	default -> 3; // should flag an error\n" + 
+				"	^^^^^^^\n" + 
+				"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 4)\n" + 
+				"	default -> 3; // should flag an error\n" + 
 				"	           ^\n" + 
 				"Invalid expression as statement\n" + 
 				"----------\n";
@@ -1585,8 +1781,8 @@
 				new String[] { "--enable-preview"},
 				options);
 	}
-	public void testBug544204() {
-		runConformTest(
+	public void _testBug544204() {
+		runNegativeTest(
 			new String[] {
 					"X.java",
 					"public class X {\n" + 
@@ -1603,10 +1799,15 @@
 					"	}\n" + 
 					"}"
 			},
-			"1");
+			"----------\n" + 
+			"1. ERROR in X.java (at line 5)\n" + 
+			"	default -> i;\n" + 
+			"	^^^^^^^\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" +
+			"----------\n");
 	}
-	public void testBug544204_2() {
-		runConformTest(
+	public void _testBug544204_2() {
+		runNegativeTest(
 			new String[] {
 					"X.java",
 					"public class X {\n" + 
@@ -1623,10 +1824,15 @@
 					"	}\n" + 
 					"}"
 			},
-			"10");
+			"----------\n" + 
+			"1. ERROR in X.java (at line 5)\n" + 
+			"	default -> 20L;\n" + 
+			"	^^^^^^^\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+			"----------\n");
 	}
-	public void testBug544223() {
-		runConformTest(
+	public void _testBug544223() {
+		runNegativeTest(
 			new String[] {
 					"X.java",
 					"public class X {\n" + 
@@ -1647,9 +1853,14 @@
 					"	}\n" + 
 					"}"
 			},
-			"1");
+			"----------\n" + 
+			"1. ERROR in X.java (at line 5)\n" + 
+			"	default -> throw new Exception();\n" + 
+			"	^^^^^^^\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+			"----------\n");
 	}
-	public void testBug544258_01() {
+	public void _testBug544258_01() {
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -1683,12 +1894,34 @@
 			"----------\n" + 
 			"1. ERROR in X.java (at line 4)\n" + 
 			"	today =  switch (day) {\n" + 
+			"    		      case SATURDAY,SUNDAY :\n" + 
+			"    		         today=1;\n" + 
+			"    		         break today;\n" + 
+			"    		      case MONDAY,TUESDAY,WEDNESDAY,THURSDAY :\n" + 
+			"    			 today=2;\n" + 
+			"    			 break today;\n" + 
+			"    		};\n" + 
+			"	         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"A switch expression should have at least one result expression\n" + 
+			"----------\n" + 
+			"2. ERROR in X.java (at line 4)\n" + 
+			"	today =  switch (day) {\n" + 
 			"	                 ^^^\n" + 
 			"A Switch expression should cover all possible values\n" + 
+			"----------\n" + 
+			"3. ERROR in X.java (at line 5)\n" + 
+			"	case SATURDAY,SUNDAY :\n" + 
+			"	^^^^^^^^^^^^^^^^^^^^\n" + 
+			"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+			"----------\n" + 
+			"4. ERROR in X.java (at line 8)\n" + 
+			"	case MONDAY,TUESDAY,WEDNESDAY,THURSDAY :\n" + 
+			"	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"The preview feature Multi constant case is only available with source level 13 and above\n" + 
 			"----------\n");
 	}
-	public void testBug544253() {
-		runConformTest(
+	public void _testBug544253() {
+		runNegativeTest(
 			new String[] {
 					"X.java",
 					"public class X {\n" + 
@@ -1704,10 +1937,15 @@
 					"    }\n" + 
 					"}"
 			},
-			"false");
+			"----------\n" + 
+			"1. ERROR in X.java (at line 5)\n" + 
+			"	default -> true;\n" + 
+			"	^^^^^^^\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+			"----------\n");
 	}
-	public void testBug544254() {
-		runConformTest(
+	public void _testBug544254() {
+		runNegativeTest(
 			new String[] {
 					"X.java",
 					"public class X {\n" + 
@@ -1726,12 +1964,17 @@
 					"    }\n" + 
 					"}"
 			},
-			"hello");
+			"----------\n" + 
+			"1. ERROR in X.java (at line 6)\n" + 
+			"	default -> 2;\n" + 
+			"	^^^^^^^\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+			"----------\n");
 	}
-	public void testBug544254_2() {
+	public void _testBug544254_2() {
 		Map<String, String> customOptions = getCompilerOptions();
 		customOptions.put(CompilerOptions.OPTION_PreserveUnusedLocal, CompilerOptions.OPTIMIZE_OUT);
-		runConformTest(
+		runNegativeTest(
 			new String[] {
 					"X.java",
 					"public class X {\n" + 
@@ -1750,12 +1993,17 @@
 					"    }\n" + 
 					"}"
 			},
-			"hello");
+			"----------\n" + 
+			"1. ERROR in X.java (at line 6)\n" + 
+			"	default -> 2;\n" + 
+			"	^^^^^^^\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+			"----------\n");
 	}
-	public void testBug544254_3() {
+	public void _testBug544254_3() {
 		Map<String, String> customOptions = getCompilerOptions();
 		customOptions.put(CompilerOptions.OPTION_PreserveUnusedLocal, CompilerOptions.OPTIMIZE_OUT);
-		runConformTest(
+		runNegativeTest(
 			new String[] {
 					"X.java",
 					"public class X {\n" + 
@@ -1774,12 +2022,17 @@
 					"    }\n" + 
 					"}"
 			},
-			"hello");
+			"----------\n" + 
+			"1. ERROR in X.java (at line 6)\n" + 
+			"	default -> 2;\n" + 
+			"	^^^^^^^\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+			"----------\n");
 	}
-	public void testBug544224_1() {
+	public void _testBug544224_1() {
 		Map<String, String> customOptions = getCompilerOptions();
 		customOptions.put(CompilerOptions.OPTION_PreserveUnusedLocal, CompilerOptions.OPTIMIZE_OUT);
-		runConformTest(
+		runNegativeTest(
 			new String[] {
 					"X.java",
 					"public class X {\n" +
@@ -1795,11 +2048,15 @@
 					"    }\n" +
 					"}\n"
 			},
-			"",
-			customOptions);
+			"----------\n" + 
+			"1. ERROR in X.java (at line 5)\n" + 
+			"	default -> 2;\n" + 
+			"	^^^^^^^\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+			"----------\n");
 	}
-	public void testBug544298() {
-		runConformTest(
+	public void _testBug544298() {
+		runNegativeTest(
 			new String[] {
 					"X.java",
 					"public class X {\n" + 
@@ -1819,10 +2076,12 @@
 					"	}\n" + 
 					"}"
 			},
-			"i:1");
+			"----------\n" + 
+			"1. ERROR in X.java (at line 7)\n" + 
+			"----------\n");
 	}
-	public void testBug544298_2() {
-		runConformTest(
+	public void _testBug544298_2() {
+		runNegativeTest(
 			new String[] {
 					"X.java",
 					"public class X {\n" + 
@@ -1843,9 +2102,14 @@
 					"	}\n" + 
 					"}"
 			},
-			"i:1");
+			"----------\n" + 
+			"1. ERROR in X.java (at line 9)\n" + 
+			"	default ->  0;\n" + 
+			"	^^^^^^^\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+			"----------\n");
 	}
-	public void testBug544428_01() {
+	public void _testBug544428_01() {
 		Map<String, String> options = getCompilerOptions();
 		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
@@ -1870,6 +2134,11 @@
 				"	case 0 -> x;\n" + 
 				"	          ^\n" + 
 				"x cannot be resolved to a variable\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 5)\n" + 
+				"	default -> 1;\n" + 
+				"	^^^^^^^\n" + 
+				"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
 				"----------\n";
 		this.runNegativeTest(
 				testFiles,
@@ -1879,8 +2148,8 @@
 				new String[] { "--enable-preview"},
 				options);
 	}
-	public void testBug544523_01() {
-		runConformTest(
+	public void _testBug544523_01() {
+		runNegativeTest(
 			new String[] {
 					"X.java",
 					"public class X {\n" +
@@ -1900,10 +2169,20 @@
 					"    }\n" +
 					"}"
 			},
-			"0");
+			"----------\n" + 
+			"1. ERROR in X.java (at line 7)\n" + 
+			"	default -> 1;\n" + 
+			"	^^^^^^^\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+			"----------\n" + 
+			"2. ERROR in X.java (at line 9)\n" + 
+			"	default -> 1;\n" + 
+			"	^^^^^^^\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+			"----------\n");
 	}
-	public void testBug544560_01() {
-		runConformTest(
+	public void _testBug544560_01() {
+		runNegativeTest(
 			new String[] {
 					"X.java",
 					"public class X {\n" +
@@ -1922,10 +2201,20 @@
 					"    }\n" +
 					"}\n"
 			},
-			"1");
+			"----------\n" + 
+			"1. ERROR in X.java (at line 5)\n" + 
+			"	default -> 1;\n" + 
+			"	^^^^^^^\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+			"----------\n" + 
+			"2. ERROR in X.java (at line 7)\n" + 
+			"	default -> 1;\n" + 
+			"	^^^^^^^\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+			"----------\n");
 	}
-	public void testBug544458() {
-		runConformTest(
+	public void _testBug544458() {
+		runNegativeTest(
 			new String[] {
 					"X.java",
 					"public class X {\n" + 
@@ -1941,10 +2230,20 @@
 					"	}\n" + 
 					"}"
 			},
-			"1");
+			"----------\n" + 
+			"1. ERROR in X.java (at line 4)\n" + 
+			"	case 1: i = 10; break true;\n" + 
+			"	                      ^^^^\n" + 
+			"Syntax error on token \"true\", delete this token\n" + 
+			"----------\n" + 
+			"2. ERROR in X.java (at line 5)\n" + 
+			"	default: break false;\n" + 
+			"	               ^^^^^\n" + 
+			"Syntax error on token \"false\", delete this token\n" + 
+			"----------\n");
 	}
-	public void testBug544458_2() {
-		runConformTest(
+	public void _testBug544458_2() {
+		runNegativeTest(
 			new String[] {
 					"X.java",
 					"public class X {\n" + 
@@ -1960,10 +2259,20 @@
 					"	}\n" + 
 					"}"
 			},
-			"0");
+			"----------\n" + 
+			"1. ERROR in X.java (at line 4)\n" + 
+			"	case 1: i++; break true;\n" + 
+			"	                   ^^^^\n" + 
+			"Syntax error on token \"true\", delete this token\n" + 
+			"----------\n" + 
+			"2. ERROR in X.java (at line 5)\n" + 
+			"	default: break false;\n" + 
+			"	               ^^^^^\n" + 
+			"Syntax error on token \"false\", delete this token\n" + 
+			"----------\n");
 	}
-	public void testBug544458_3() {
-		runConformTest(
+	public void _testBug544458_3() {
+		runNegativeTest(
 			new String[] {
 					"X.java",
 					"public class X {\n" + 
@@ -1979,10 +2288,20 @@
 					"	}\n" + 
 					"}"
 			},
-			"0");
+			"----------\n" + 
+			"1. ERROR in X.java (at line 4)\n" + 
+			"	case 1: i+= 10; break true;\n" + 
+			"	                      ^^^^\n" + 
+			"Syntax error on token \"true\", delete this token\n" + 
+			"----------\n" + 
+			"2. ERROR in X.java (at line 5)\n" + 
+			"	default: break false;\n" + 
+			"	               ^^^^^\n" + 
+			"Syntax error on token \"false\", delete this token\n" + 
+			"----------\n");
 	}
-	public void testBug544458_4() {
-		runConformTest(
+	public void _testBug544458_4() {
+		runNegativeTest(
 			new String[] {
 					"X.java",
 					"public class X {\n" + 
@@ -1998,10 +2317,20 @@
 					"	}\n" + 
 					"}"
 			},
-			"0");
+			"----------\n" + 
+			"1. ERROR in X.java (at line 4)\n" + 
+			"	case 1: switch(i) {case 4: break;}; break true;\n" + 
+			"	                                          ^^^^\n" + 
+			"Syntax error on token \"true\", delete this token\n" + 
+			"----------\n" + 
+			"2. ERROR in X.java (at line 5)\n" + 
+			"	default: break false;\n" + 
+			"	               ^^^^^\n" + 
+			"Syntax error on token \"false\", delete this token\n" + 
+			"----------\n");
 	}
-	public void testBug544458_5() {
-		runConformTest(
+	public void _testBug544458_5() {
+		runNegativeTest(
 			new String[] {
 					"X.java",
 					"public class X {\n" + 
@@ -2017,10 +2346,20 @@
 					"	}\n" + 
 					"}"
 			},
-			"0");
+			"----------\n" + 
+			"1. ERROR in X.java (at line 4)\n" + 
+			"	case 1: foo(5); break true;\n" + 
+			"	                      ^^^^\n" + 
+			"Syntax error on token \"true\", delete this token\n" + 
+			"----------\n" + 
+			"2. ERROR in X.java (at line 5)\n" + 
+			"	default: break false;\n" + 
+			"	               ^^^^^\n" + 
+			"Syntax error on token \"false\", delete this token\n" + 
+			"----------\n");
 	}
-	public void testBug544601_1() {
-		runConformTest(
+	public void _testBug544601_1() {
+		runNegativeTest(
 			new String[] {
 					"X.java",
 					"public class X {\n" +
@@ -2046,10 +2385,20 @@
 					"    }\n" +
 					"}\n"
 			},
-			"1");
+			"----------\n" + 
+			"1. ERROR in X.java (at line 13)\n" + 
+			"	break true;\n" + 
+			"	      ^^^^\n" + 
+			"Syntax error on token \"true\", delete this token\n" + 
+			"----------\n" + 
+			"2. ERROR in X.java (at line 14)\n" + 
+			"	default: break false;\n" + 
+			"	               ^^^^^\n" + 
+			"Syntax error on token \"false\", delete this token\n" + 
+			"----------\n");
 	}
-	public void testBug544556() {
-		runConformTest(
+	public void _testBug544556() {
+		runNegativeTest(
 			new String[] {
 				"X.java",
 				"public class X {\n" + 
@@ -2070,10 +2419,30 @@
 				"	}\n" + 
 				"}"
 		},
-		"1");
+		"----------\n" + 
+		"1. ERROR in X.java (at line 6)\n" + 
+		"	case 0 -> { break 2; }\n" + 
+		"	                  ^\n" + 
+		"Syntax error on token \"2\", delete this token\n" + 
+		"----------\n" + 
+		"2. ERROR in X.java (at line 7)\n" + 
+		"	default -> { break 3; }\n" + 
+		"	                   ^\n" + 
+		"Syntax error on token \"3\", delete this token\n" + 
+		"----------\n" + 
+		"3. ERROR in X.java (at line 9)\n" + 
+		"	case 0 -> { break 0; }\n" + 
+		"	                  ^\n" + 
+		"Syntax error on token \"0\", delete this token\n" + 
+		"----------\n" + 
+		"4. ERROR in X.java (at line 10)\n" + 
+		"	default -> { break 1; }\n" + 
+		"	                   ^\n" + 
+		"Syntax error on token \"1\", delete this token\n" + 
+		"----------\n");
 	}
-	public void testBug544702_01() {
-		runConformTest(
+	public void _testBug544702_01() {
+		runNegativeTest(
 			new String[] {
 				"X.java",
 				"public class X {\n" +
@@ -2092,10 +2461,15 @@
 				"\n" +
 				"}\n"
 		},
-		"Success");
+		"----------\n" + 
+		"1. ERROR in X.java (at line 7)\n" + 
+		"	default -> k = -1;\n" + 
+		"	^^^^^^^\n" + 
+		"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+		"----------\n");
 	}
-	public void testBug545168_01() {
-		runConformTest(
+	public void _testBug545168_01() {
+		runNegativeTest(
 			new String[] {
 				"X.java",
 				"public class X {\n" +
@@ -2118,10 +2492,25 @@
 				"	MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;\n" +
 				"}\n"
 		},
-		"9");
+		"----------\n" + 
+		"1. ERROR in X.java (at line 5)\n" + 
+		"	case MONDAY, FRIDAY -> System.out.println(Day.SUNDAY);\n" + 
+		"	^^^^^^^^^^^^^^^^^^^\n" + 
+		"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+		"----------\n" + 
+		"2. ERROR in X.java (at line 7)\n" + 
+		"	case THURSDAY, SATURDAY     -> System.out.println(8);\n" + 
+		"	^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+		"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+		"----------\n" + 
+		"3. ERROR in X.java (at line 9)\n" + 
+		"	default -> {}\n" + 
+		"	^^^^^^^\n" + 
+		"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+		"----------\n");
 	}
-	public void testBug545255_01() {
-		runConformTest(
+	public void _testBug545255_01() {
+		runNegativeTest(
 			new String[] {
 				"X.java",
 				"public class X {\n"+
@@ -2140,12 +2529,42 @@
 				"	}\n"+
 				"}\n"
 		},
-		"0");
+		"----------\n" + 
+		"1. ERROR in X.java (at line 4)\n" + 
+		"	case 60, 600: break 6;\n" + 
+		"	^^^^^^^^^^^^\n" + 
+		"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+		"----------\n" + 
+		"2. ERROR in X.java (at line 4)\n" + 
+		"	case 60, 600: break 6;\n" + 
+		"	                    ^\n" + 
+		"Syntax error on token \"6\", delete this token\n" + 
+		"----------\n" + 
+		"3. ERROR in X.java (at line 5)\n" + 
+		"	case 70: break 7;\n" + 
+		"	               ^\n" + 
+		"Syntax error on token \"7\", delete this token\n" + 
+		"----------\n" + 
+		"4. ERROR in X.java (at line 6)\n" + 
+		"	case 80: break 8;\n" + 
+		"	               ^\n" + 
+		"Syntax error on token \"8\", delete this token\n" + 
+		"----------\n" + 
+		"5. ERROR in X.java (at line 7)\n" + 
+		"	case 90, 900: break 9;\n" + 
+		"	                    ^\n" + 
+		"Syntax error on token \"9\", delete this token\n" + 
+		"----------\n" + 
+		"6. ERROR in X.java (at line 8)\n" + 
+		"	default: break 0;\n" + 
+		"	               ^\n" + 
+		"Syntax error on token \"0\", delete this token\n" + 
+		"----------\n");
 	}
 	// see comment 12 in the bug 
-	public void testBug513766_01() {
-		Runner runner = new Runner();
-		runner.testFiles = new String[] {
+	public void _testBug513766_01() {
+		this.runNegativeTest(
+			new String[] {
 				"X.java",
 				"public class X {\n"+
 				"    @SuppressWarnings(\"preview\")\n"+
@@ -2156,26 +2575,28 @@
 				"            System.out.println(\"true, too\");\n"+
 				"    }\n"+
 				"    <T> T magic() { return null; }\n"+
-				"}\n"};
-		runner.expectedCompilerLog =
+				"}\n",
+			},
 			"----------\n" + 
 			"1. ERROR in X.java (at line 4)\n" + 
 			"	if (switch(i) { default -> magic(); })\n" + 
 			"	    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
 			"Type mismatch: cannot convert from Object to boolean\n" + 
 			"----------\n" + 
-			"2. ERROR in X.java (at line 6)\n" + 
+			"2. ERROR in X.java (at line 4)\n" + 
+			"	if (switch(i) { default -> magic(); })\n" + 
+			"	                ^^^^^^^\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+			"----------\n" + 
+			"3. ERROR in X.java (at line 6)\n" + 
 			"	if (magic())\n" + 
 			"	    ^^^^^^^\n" + 
 			"Type mismatch: cannot convert from Object to boolean\n" + 
-			"----------\n";
-		runner.vmArguments = new String[] {"--enable-preview"};
-		runner.javacTestOptions = JavacHasABug.JavacBug8179483_switchExpression;
-		runner.runNegativeTest();
+			"----------\n");
 	}
-	public void testBug545333() {
-		Runner runner = new Runner();
-		runner.testFiles = 	new String[] {
+	public void _testBug545333() {
+		runNegativeTest(
+			new String[] {
 				"X.java",
 				"public class X {\n"+
 				"    @SuppressWarnings(\"preview\")\n"+
@@ -2196,8 +2617,7 @@
 				"class MyException extends Exception {\n"+
 				"	private static final long serialVersionUID = 3461899582505930473L;	\n"+
 				"}\n"
-		};
-		runner.expectedCompilerLog =
+			},
 			"----------\n" + 
 			"1. ERROR in X.java (at line 4)\n" + 
 			"	int v = switch (i) {\n" + 
@@ -2205,12 +2625,14 @@
 			"    	};\n" + 
 			"	        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
 			"A switch expression should have at least one result expression\n" + 
-			"----------\n";
-		runner.vmArguments = new String[] {"--enable-preview"};
-		runner.javacTestOptions = JavacHasABug.JavacBug8226510_switchExpression;
-		runner.runNegativeTest();
+			"----------\n" + 
+			"2. ERROR in X.java (at line 5)\n" + 
+			"	default -> throw new MyException();\n" + 
+			"	^^^^^^^\n" + 
+			"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+			"----------\n");
 	}
-	public void testBug545518() {
+	public void _testBug545518() {
 		if (this.complianceLevel < ClassFileConstants.JDK12)
 			return;
 		Map<String, String> options = getCompilerOptions();
@@ -2218,71 +2640,10 @@
 		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.WARNING);
 		String message = 
 				"----------\n" + 
-				"1. WARNING in X.java (at line 5)\n" + 
-				"	case \"ABC\", (false ? (String) \"c\" : (String) \"d\") : break;\n" + 
-				"	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
-				"You are using a preview language feature that may or may not be supported in a future release\n" + 
-				"----------\n" + 
-				"2. WARNING in X.java (at line 5)\n" + 
-				"	case \"ABC\", (false ? (String) \"c\" : (String) \"d\") : break;\n" + 
-				"	                     ^^^^^^^^^^^^\n" + 
-				"Dead code\n" + 
-				"----------\n";
-		
-		this.runWarningTest(new String[] {
-				"X.java",
-				"public class X {\n" +
-				"  public static void main(String [] args) {\n" +
-				"  	 String arg = \"ABD\";\n" +
-				"    switch(arg) {\n" + 
-				"      case \"ABC\", (false ? (String) \"c\" : (String) \"d\") : break;\n" +
-				"	 }\n" +
-				"  }\n" +
-				"}\n"
-			},
-			message,
-			options);
-	}
-	public void testBug545518a() {
-		if (this.complianceLevel < ClassFileConstants.JDK12)
-			return;
-		Map<String, String> options = getCompilerOptions();
-		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
-		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
-		String message = 
-				"----------\n" + 
-				"1. WARNING in X.java (at line 5)\n" + 
-				"	case \"ABC\", (false ? (String) \"c\" : (String) \"d\") : break;\n" + 
-				"	                     ^^^^^^^^^^^^\n" + 
-				"Dead code\n" + 
-				"----------\n";
-		
-		this.runWarningTest(new String[] {
-				"X.java",
-				"public class X {\n" +
-				"  public static void main(String [] args) {\n" +
-				"  	 String arg = \"ABD\";\n" +
-				"    switch(arg) {\n" + 
-				"      case \"ABC\", (false ? (String) \"c\" : (String) \"d\") : break;\n" +
-				"	 }\n" +
-				"  }\n" +
-				"}\n"
-			},
-			message,
-			options);
-	}
-	public void testBug545518b() {
-		if (this.complianceLevel < ClassFileConstants.JDK1_8)
-			return;
-		Map<String, String> options = getCompilerOptions();
-		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.DISABLED);
-		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.WARNING);
-		String message = 
-				"----------\n" + 
 				"1. ERROR in X.java (at line 5)\n" + 
 				"	case \"ABC\", (false ? (String) \"c\" : (String) \"d\") : break;\n" + 
 				"	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
-				"Multi constant case is a preview feature and disabled by default. Use --enable-preview to enable\n" + 
+				"The preview feature Multi constant case is only available with source level 13 and above\n" + 
 				"----------\n";
 		
 		this.runNegativeTest(new String[] {
@@ -2302,8 +2663,70 @@
 			new String[] { "--enable-preview"},
 			options);
 	}
-	public void testBug545715_01() {
-		runConformTest(
+	public void _testBug545518a() {
+		if (this.complianceLevel < ClassFileConstants.JDK12)
+			return;
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
+		String message = 
+				"----------\n" + 
+				"1. ERROR in X.java (at line 5)\n" + 
+				"	case \"ABC\", (false ? (String) \"c\" : (String) \"d\") : break;\n" + 
+				"	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+				"----------\n";
+		
+		this.runNegativeTest(new String[] {
+				"X.java",
+				"public class X {\n" +
+				"  public static void main(String [] args) {\n" +
+				"  	 String arg = \"ABD\";\n" +
+				"    switch(arg) {\n" + 
+				"      case \"ABC\", (false ? (String) \"c\" : (String) \"d\") : break;\n" +
+				"	 }\n" +
+				"  }\n" +
+				"}\n"
+			},
+			message,
+			null,
+			true,
+			new String[] { "--enable-preview"},
+			options);
+	}
+	public void _testBug545518b() {
+		if (this.complianceLevel < ClassFileConstants.JDK1_8)
+			return;
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.DISABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.WARNING);
+		String message = 
+				"----------\n" + 
+				"1. ERROR in X.java (at line 5)\n" + 
+				"	case \"ABC\", (false ? (String) \"c\" : (String) \"d\") : break;\n" + 
+				"	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+				"----------\n";
+		
+		this.runNegativeTest(new String[] {
+				"X.java",
+				"public class X {\n" +
+				"  public static void main(String [] args) {\n" +
+				"  	 String arg = \"ABD\";\n" +
+				"    switch(arg) {\n" + 
+				"      case \"ABC\", (false ? (String) \"c\" : (String) \"d\") : break;\n" +
+				"	 }\n" +
+				"  }\n" +
+				"}\n"
+			},
+			message,
+			null,
+			true,
+			new String[] { "--enable-preview"},
+			options);
+	}
+	public void _testBug545715_01() {
+		runNegativeTest(
 			new String[] {
 				"X.java",
 				"enum X {\n"+
@@ -2321,33 +2744,40 @@
 				"     }\n"+
 				"}\n"
 		},
-		"5");
+		"----------\n" + 
+		"1. ERROR in X.java (at line 10)\n" + 
+		"	default -> o = 0;\n" + 
+		"	^^^^^^^\n" + 
+		"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+		"----------\n");
 	}
-	public void testBug545716_01() {
-		Runner runner = new Runner();
-		runner.testFiles = new String[] {
-			"X.java",
-			"enum X {\n"+
-			"    A, B;\n"+
-			"     \n"+
-			"    @SuppressWarnings(\"preview\")\n"+
-			"    public static void main(String[] args) {\n"+
-			"         X myEnum = X.A;\n"+
-			"         int o;\n"+
-			"         var f = switch(myEnum) {\n"+
-			"             case A -> o = 5;\n"+
-			"             case B -> o = 10;\n"+
-			"         };\n"+
-			"         System.out.println(o);\n"+
-			"     }\n"+
-			"} \n"
-		};
-		runner.expectedOutputString = "5";
-		runner.vmArguments = new String[] {"--enable-preview"};
-		runner.javacTestOptions = JavacHasABug.JavacBug8221413_switchExpression;
-		runner.runConformTest();
+	public void _testBug545916_01() {
+		runConformTest(
+			new String[] {
+				"X.java",
+				"enum X {\n"+
+				"    A, B;\n"+
+				"     \n"+
+				"    @SuppressWarnings(\"preview\")\n"+
+				"    public static void main(String[] args) {\n"+
+				"         X myEnum = X.A;\n"+
+				"         int o;\n"+
+				"         var f = switch(myEnum) {\n"+
+				"             case A -> o = 5;\n"+
+				"             case B -> o = 10;\n"+
+				"         };\n"+
+				"         System.out.println(o);\n"+
+				"     }\n"+
+				"} \n"
+		},
+		"----------\n" + 
+		"1. ERROR in X.java (at line 10)\n" + 
+		"	default -> o = 0;\n" + 
+		"	^^^^^^^\n" + 
+		"The preview feature Case Labels with \'->\' is only available with source level 13 and above\n" + 
+		"----------\n");
 	}
-	public void testBug545983_01() {
+	public void _testBug545983_01() {
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -2373,13 +2803,13 @@
 				"}\n",
 			},
 			"----------\n" + 
-			"1. ERROR in X.java (at line 11)\n" + 
-			"	continue;\n" + 
-			"	^^^^^^^^^\n" + 
-			"'continue' or 'return' cannot be the last statement in a Switch expression case body\n" + 
+			"1. ERROR in X.java (at line 9)\n" + 
+			"	break 1;\n" + 
+			"	      ^\n" + 
+			"Syntax error on token \"1\", delete this token\n" + 
 			"----------\n");
 	}
-	public void testBug545983_02() {
+	public void _testBug545983_02() {
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -2405,13 +2835,13 @@
 				"}\n",
 			},
 			"----------\n" + 
-			"1. ERROR in X.java (at line 11)\n" + 
-			"	return 2;\n" + 
-			"	^^^^^^^^^\n" + 
-			"'continue' or 'return' cannot be the last statement in a Switch expression case body\n" + 
+			"1. ERROR in X.java (at line 9)\n" + 
+			"	break 1;\n" + 
+			"	      ^\n" + 
+			"Syntax error on token \"1\", delete this token\n" + 
 			"----------\n");
 	}
-	public void testBug547125_01() {
+	public void _testBug547125_01() {
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -2435,10 +2865,16 @@
 			"1. ERROR in X.java (at line 4)\n" + 
 			"	case SATURDAY, SUNDAY, SUNDAY:\n" + 
 			"	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+			"----------\n" + 
+			"2. ERROR in X.java (at line 4)\n" + 
+			"	case SATURDAY, SUNDAY, SUNDAY:\n" + 
+			"	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
 			"Duplicate case\n" + 
+			"	^^^^^^^\n" + 
 			"----------\n");
 	}
-	public void testBug547125_02() {
+	public void _testBug547125_02() {
 		this.runNegativeTest(
 			new String[] {
 				"X.java",
@@ -2462,114 +2898,27 @@
 			"1. ERROR in X.java (at line 4)\n" + 
 			"	case SATURDAY, SUNDAY, MONDAY:\n" + 
 			"	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
-			"Duplicate case\n" + 
+			"The preview feature Multi constant case is only available with source level 13 and above\n" + 
 			"----------\n" + 
-			"2. ERROR in X.java (at line 6)\n" + 
-			"	case MONDAY, SUNDAY:\n" + 
-			"	^^^^^^^^^^^^^^^^^^^\n" + 
+			"2. ERROR in X.java (at line 4)\n" + 
+			"	case SATURDAY, SUNDAY, MONDAY:\n" + 
+			"	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
 			"Duplicate case\n" + 
 			"----------\n" + 
 			"3. ERROR in X.java (at line 6)\n" + 
 			"	case MONDAY, SUNDAY:\n" + 
 			"	^^^^^^^^^^^^^^^^^^^\n" + 
+			"The preview feature Multi constant case is only available with source level 13 and above\n" + 
+			"----------\n" + 
+			"4. ERROR in X.java (at line 6)\n" + 
+			"	case MONDAY, SUNDAY:\n" + 
+			"	^^^^^^^^^^^^^^^^^^^\n" + 
 			"Duplicate case\n" + 
-			"----------\n");
-	}
-	public void testBug548476_01() {
-		this.runNegativeTest(
-			new String[] {
-				"X.java",
-				"class X {\n" + 
-				"	I expr = () -> break;\n" + 
-				"}\n" + 
-				"\n" + 
-				"interface I {\n" + 
-				"	void foo();\n" + 
-				"}",
-			},
 			"----------\n" + 
-			"1. ERROR in X.java (at line 2)\n" + 
-			"	I expr = () -> break;\n" + 
-			"	               ^^^^^\n" + 
-			"Syntax error on token \"break\", invalid LambdaBody\n" + 
-			"----------\n");
-	}
-	public void testBug548476_02() {
-		this.runNegativeTest(
-			new String[] {
-				"X.java",
-				"class X {\n" + 
-				"	void break () {}\n" + 
-				"}",
-			},
-			"----------\n" + 
-			"1. ERROR in X.java (at line 2)\n" + 
-			"	void break () {}\n" + 
-			"	     ^^^^^\n" + 
-			"Syntax error on token \"break\", Identifier expected\n" + 
-			"----------\n");
-	}
-	public void testBug548476_03() {
-		this.runNegativeTest(
-			new String[] {
-				"X.java",
-				"class X {\n" + 
-				"}\n" + 
-				"\n" + 
-				"class break{}\n" 
-			},
-			"----------\n" + 
-			"1. ERROR in X.java (at line 4)\n" + 
-			"	class break{}\n" + 
-			"	      ^^^^^\n" + 
-			"Syntax error on token \"break\", Identifier expected\n" + 
-			"----------\n");
-	}
-	public void testBug548476_04() {
-		this.runNegativeTest(
-			new String[] {
-				"module-info.java",
-				"module break.me {\n" + 
-				"}\n" 
-			},
-			"----------\n" + 
-			"1. ERROR in module-info.java (at line 1)\n" + 
-			"	module break.me {\n" + 
-			"	       ^^^^^\n" + 
-			"Syntax error on token \"break\", Identifier expected\n" + 
-			"----------\n");
-	}
-	public void testBug548476_05() {
-		this.runNegativeTest(
-			new String[] {
-				"X.java",
-				"class X {\n"+
-				"  public static void foo(int i) {\n"+
-				"	  int v = switch (i) {\n"+
-				"	  case 0 -> {\n"+
-				"		  I k = () -> break;\n"+
-				"	  }\n"+
-				"	  default -> {\n"+
-				"		  I k = () -> break;\n"+
-				"		  break 0;\n"+
-				"	  }\n"+
-				"	  };\n"+
-				"  }\n"+
-				"}\n"+
-				"interface I {\n"+
-				"	void foo();\n"+
-				"}\n"
-			},
-			"----------\n" + 
-			"1. ERROR in X.java (at line 5)\n" + 
-			"	I k = () -> break;\n" + 
-			"	            ^^^^^\n" + 
-			"Syntax error on token \"break\", invalid LambdaBody\n" + 
-			"----------\n" + 
-			"2. ERROR in X.java (at line 8)\n" + 
-			"	I k = () -> break;\n" + 
-			"	            ^^^^^\n" + 
-			"Syntax error on token \"break\", invalid LambdaBody\n" + 
+			"5. ERROR in X.java (at line 6)\n" + 
+			"	case MONDAY, SUNDAY:\n" + 
+			"	^^^^^^^^^^^^^^^^^^^\n" + 
+			"Duplicate case\n" + 
 			"----------\n");
 	}
 }
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchExpressionsYieldTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchExpressionsYieldTest.java
new file mode 100644
index 0000000..756679d
--- /dev/null
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchExpressionsYieldTest.java
@@ -0,0 +1,3375 @@
+/*******************************************************************************
+ * Copyright (c) 2019 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.core.tests.compiler.regression;
+
+import java.util.Map;
+
+import org.eclipse.jdt.core.tests.compiler.regression.AbstractRegressionTest.JavacTestOptions.JavacHasABug;
+import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
+import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
+
+import junit.framework.Test;
+
+public class SwitchExpressionsYieldTest extends AbstractRegressionTest {
+
+	static {
+//		TESTS_NUMBERS = new int [] { 40 };
+//		TESTS_RANGE = new int[] { 1, -1 };
+//		TESTS_NAMES = new String[] { "testBug550354_01" };
+	}
+	
+	public static Class<?> testClass() {
+		return SwitchExpressionsYieldTest.class;
+	}
+	public static Test suite() {
+		return buildMinimalComplianceTestSuite(testClass(), F_13);
+	}
+	public SwitchExpressionsYieldTest(String testName){
+		super(testName);
+	}
+
+	// Enables the tests to run individually
+	protected Map<String, String> getCompilerOptions() {
+		Map<String, String> defaultOptions = super.getCompilerOptions();
+		defaultOptions.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13); // FIXME
+		defaultOptions.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+		defaultOptions.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
+		defaultOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		defaultOptions.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
+		return defaultOptions;
+	}
+	
+	@Override
+	protected void runConformTest(String[] testFiles, String expectedOutput) {
+		runConformTest(testFiles, expectedOutput, getCompilerOptions());
+	}
+
+	@SuppressWarnings({ "unchecked", "rawtypes" })
+	@Override
+	protected void runConformTest(String[] testFiles, String expectedOutput, Map customOptions) {
+		Runner runner = new Runner();
+		runner.testFiles = testFiles;
+		runner.expectedOutputString = expectedOutput;
+		runner.vmArguments = new String[] {"--enable-preview"};
+		runner.customOptions = customOptions;
+		runner.javacTestOptions = JavacTestOptions.forReleaseWithPreview("13");
+		runner.runConformTest();
+	}
+	@Override
+	protected void runNegativeTest(String[] testFiles, String expectedCompilerLog) {
+		runNegativeTest(testFiles, expectedCompilerLog, JavacTestOptions.forReleaseWithPreview("13"));
+	}
+	protected void runWarningTest(String[] testFiles, String expectedCompilerLog) {
+		runWarningTest(testFiles, expectedCompilerLog, null);
+	}
+	protected void runWarningTest(String[] testFiles, String expectedCompilerLog, Map<String, String> customOptions) {
+		runWarningTest(testFiles, expectedCompilerLog, customOptions, null);
+	}
+	protected void runWarningTest(String[] testFiles, String expectedCompilerLog,
+			Map<String, String> customOptions, String javacAdditionalTestOptions) {
+
+		Runner runner = new Runner();
+		runner.testFiles = testFiles;
+		runner.expectedCompilerLog = expectedCompilerLog;
+		runner.customOptions = customOptions;
+		runner.vmArguments = new String[] {"--enable-preview"};
+		runner.javacTestOptions = javacAdditionalTestOptions == null ? JavacTestOptions.forReleaseWithPreview("13") :
+			JavacTestOptions.forReleaseWithPreview("13", javacAdditionalTestOptions);
+		runner.runWarningTest();
+	}
+	public void testBug544073_00() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n"+
+						"\n"+
+						"	public static int yield() {\n"+
+						"		return 1;\n"+
+						"	}\n"+
+						"	@SuppressWarnings(\"preview\")\n"+
+						"	public static int foo(int val) {\n"+
+						"		int k = switch (val) {\n"+
+						"		case 1 -> { yield 1; }\n"+
+						"		default -> { yield 2; }\n"+
+						"		};\n"+
+						"		return k;\n"+
+						"	}\n"+
+						"	public static void main(String[] args) {\n"+
+						"		System.out.println(X.foo(1));\n"+
+						"	}\n"+
+						"}\n"
+				},
+				"1");
+	}
+	public void testBug544073_001() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	static int twice(int i) {\n" +
+						"		int tw = switch (i) {\n" +
+						"			case 0 -> i * 0;\n" +
+						"			case 1 -> 2;\n" +
+						"			default -> 3;\n" +
+						"		};\n" +
+						"		return tw;\n" +
+						"	}\n" +
+						"	public static void main(String... args) {\n" +
+						"		System.out.print(twice(3));\n" +
+						"	}\n" +
+						"}\n"
+				},
+				"3");
+	}
+	public void testBug544073_002() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n"+
+								"	static int twice(int i) throws Exception {\n"+
+								"		int tw = switch (i) {\n"+
+								"			case 0 -> 0;\n"+
+								"			case 1 -> { \n"+
+								"				System.out.println(\"do_not_print\");\n"+
+								"				yield 1;\n"+
+								"			} \n"+
+								"			case 3 -> throw new Exception();\n"+
+								"			default -> throw new Exception();\n"+
+								"		};\n"+
+								"		return tw;\n"+
+								"	}\n"+
+								"	public static void main(String[] args) {\n"+
+								"		try {\n"+
+								"		    try {\n"+
+								"				System.out.print(twice(3));\n"+
+								"			} catch (Exception e) {\n"+
+								"				System.out.print(\"Got Exception - expected\");\n"+
+								"			}\n"+
+								"		} catch (Exception e) {\n"+
+								"		System.out.print(\"Got Exception\");\n"+
+								"		}\n"+
+								"	}\n"+
+								"}\n"
+				},
+				"Got Exception - expected");
+	}
+	public void testBug544073_003() {
+		this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"public class X {\n" +
+				"  public static void main(String[] args) {\n" +
+				"    twice(1);\n" +
+				"  }\n" +
+				"	public static int twice(int i) {\n" +
+				"		int tw = switch (i) {\n" +
+				"		};\n" +
+				"		return tw;\n" +
+				"	}\n" +
+				"}\n",
+			},
+			"----------\n" + 
+			"1. ERROR in X.java (at line 6)\n" + 
+			"	int tw = switch (i) {\n" + 
+			"		};\n" + 
+			"	         ^^^^^^^^^^^^^^^^\n" + 
+			"A switch expression should have a non-empty switch block\n" + 
+			"----------\n" + 
+			"2. ERROR in X.java (at line 6)\n" + 
+			"	int tw = switch (i) {\n" + 
+			"	                 ^\n" + 
+			"A switch expression should have a default case\n" + 
+			"----------\n");
+	}
+	public void testBug544073_004() {
+		this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"public class X {\n" +
+				"  public static void main(String[] args) {\n" +
+				"    twice(1);\n" +
+				"  }\n" +
+				"	public static int twice(int i) {\n" +
+				"		int tw = switch (i) {\n" +
+				"			case 0 -> 0;\n" +
+				"			case 1 -> { \n" +
+				"				System.out.println(\"heel\");\n" +
+				"				yield 1;\n" +
+				"			} \n" +
+				"			case \"hello\" -> throw new java.io.IOException(\"hello\");\n" +
+				"			default -> throw new java.io.IOException(\"world\");\n" +
+				"		};\n" +
+				"		return tw;\n" +
+				"	}\n" +
+				"}\n",
+			},
+			"----------\n" + 
+			"1. ERROR in X.java (at line 12)\n" + 
+			"	case \"hello\" -> throw new java.io.IOException(\"hello\");\n" + 
+			"	     ^^^^^^^\n" + 
+			"Type mismatch: cannot convert from String to int\n" + 
+			"----------\n");
+	}
+	public void testBug544073_005() {
+		this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"public class X {\n" +
+				"  public static void main(String[] args) {\n" +
+				"    twice(1);\n" +
+				"  }\n" +
+				"	public static int twice(int i) {\n" +
+				"		int tw = switch (i) {\n" +
+				"			case 0 -> 0;\n" +
+				"			case 1 -> { \n" +
+				"				System.out.println(\"heel\");\n" +
+				"				yield 1;\n" +
+				"			} \n" +
+				"		    case 2 -> 2;\n" +
+				"		};\n" +
+				"		return tw;\n" +
+				"	}\n" +
+				"}\n",
+			},
+			"----------\n" + 
+			"1. ERROR in X.java (at line 6)\n" + 
+			"	int tw = switch (i) {\n" + 
+			"	                 ^\n" + 
+			"A switch expression should have a default case\n" + 
+			"----------\n");
+	}
+	/**
+	 * Add a test case for enum
+	 * If the type of the selector expression is an enum type, 
+	 * then the set of all the case constants associated with the switch block
+	 *  must contain all the enum constants of that enum type
+	 *  Add a missing enum test case
+	 */
+	public void _testBug544073_006() {
+		this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"public class X {\n" +
+				"  public static void main(String[] args) {\n" +
+				"    int x, y;\n" +
+				"    I i = () -> {\n" +
+				"      int z = 10;\n" +
+				"    };\n" +
+				"    i++;\n" +
+				"  }\n" +
+				"	public static int twice(int i) {\n" +
+				"		int tw = switch (i) {\n" +
+				"			case 0 -> 0;\n" +
+				"			case 1 -> { \n" +
+				"				System.out.println(\"heel\");\n" +
+				"				yield 1;\n" +
+				"			} \n" +
+				"		//	case 2 -> 2;\n" +
+				"			case \"hello\" -> throw new IOException(\"hello\");\n" +
+				"		};\n" +
+				"		return tw;\n" +
+				"	}\n" +
+				"}\n",
+			},
+			"----------\n" + 
+			"1. ERROR in X.java (at line 7)\n" + 
+			"	int tw = switch (i) {\n" + 
+			"	      ^^^^^\n" + 
+			" The switch expression should have a default case\n" + 
+			"----------\n");
+	}
+	/*
+	 * should compile - test for adding additional nesting in variables
+	 * dev note: ref consumeToken().case Switch 
+	 */
+	public void testBug544073_007() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n"+
+						"	static int foo(int i) {\n"+
+						"		int tw = \n"+
+						"		switch (i) {\n"+
+						"			case 1 -> \n"+
+						"			 {\n"+
+						" 				int z = 100;\n"+
+						" 				yield z;\n"+
+						"			}\n"+
+						"			default -> {\n"+
+						"				yield 12;\n"+
+						"			}\n"+
+						"		};\n"+
+						"		return tw;\n"+
+						"	}\n"+
+						"	public static void main(String[] args) {\n"+
+						"		System.out.print(foo(1));\n"+
+						"	}\n"+
+						"}\n"
+				},
+				"100");
+	}
+	public void testBug544073_008() {
+		Map<String, String> disablePreviewOptions = getCompilerOptions();
+		disablePreviewOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.DISABLED);
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" +
+				"	static int twice(int i) {\n" +
+				"		int tw = switch (i) {\n" +
+				"			case 0 -> i * 0;\n" +
+				"			case 1 -> 2;\n" +
+				"			default -> 3;\n" +
+				"		};\n" +
+				"		return tw;\n" +
+				"	}\n" +
+				"	public static void main(String[] args) {\n" +
+				"		System.out.print(twice(3));\n" +
+				"	}\n" +
+				"}\n",
+		};
+
+		String expectedProblemLog =
+				"----------\n" + 
+				"1. ERROR in X.java (at line 3)\n" + 
+				"	int tw = switch (i) {\n" + 
+				"			case 0 -> i * 0;\n" + 
+				"			case 1 -> 2;\n" + 
+				"			default -> 3;\n" + 
+				"		};\n" + 
+				"	         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Switch Expressions is a preview feature and disabled by default. Use --enable-preview to enable\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 4)\n" + 
+				"	case 0 -> i * 0;\n" + 
+				"	^^^^^^\n" + 
+				"Case Labels with '->' is a preview feature and disabled by default. Use --enable-preview to enable\n" + 
+				"----------\n" + 
+				"3. ERROR in X.java (at line 5)\n" + 
+				"	case 1 -> 2;\n" + 
+				"	^^^^^^\n" + 
+				"Case Labels with '->' is a preview feature and disabled by default. Use --enable-preview to enable\n" + 
+				"----------\n" + 
+				"4. ERROR in X.java (at line 6)\n" + 
+				"	default -> 3;\n" + 
+				"	^^^^^^^\n" + 
+				"Case Labels with '->' is a preview feature and disabled by default. Use --enable-preview to enable\n" + 
+				"----------\n";
+
+		this.runNegativeTest(
+				testFiles,
+				expectedProblemLog,
+				null,
+				true,
+				disablePreviewOptions);
+	}
+	public void testBug544073_009() {
+		runConformTest(
+			new String[] {
+				"X.java",
+				"public class X {\n" +
+				"\n" +
+				"	public static void bar(int  i) {\n" +
+				"		switch (i) {\n" +
+				"		case 1 -> System.out.println(\"hello\");\n" +
+				"		default -> System.out.println(\"DEFAULT\");\n" +
+				"		}\n" +
+				"	}\n" +
+				"	public static void main(String[] args) {\n" +
+				"		bar(1);\n" +
+				"	}\n" +
+				"}\n"
+			},
+			"hello");
+	}
+	public void testBug544073_010() {
+		Map<String, String> disablePreviewOptions = getCompilerOptions();
+		disablePreviewOptions.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.DISABLED);
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" +
+				"	static int twice(int i) {\n" +
+				"		switch (i) {\n" +
+				"			case 0 -> i * 0;\n" +
+				"			case 1 -> 2;\n" +
+				"			default -> 3;\n" +
+				"		}\n" +
+				"		return 0;\n" +
+				"	}\n" +
+				"	public static void main(String[] args) {\n" +
+				"		System.out.print(twice(3));\n" +
+				"	}\n" +
+				"}\n",
+		};
+
+		String expectedProblemLog =
+				"----------\n" + 
+				"1. ERROR in X.java (at line 4)\n" + 
+				"	case 0 -> i * 0;\n" + 
+				"	^^^^^^\n" + 
+				"Case Labels with \'->\' is a preview feature and disabled by default. Use --enable-preview to enable\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 5)\n" + 
+				"	case 1 -> 2;\n" + 
+				"	^^^^^^\n" + 
+				"Case Labels with \'->\' is a preview feature and disabled by default. Use --enable-preview to enable\n" + 
+				"----------\n" + 
+				"3. ERROR in X.java (at line 6)\n" + 
+				"	default -> 3;\n" + 
+				"	^^^^^^^\n" + 
+				"Case Labels with \'->\' is a preview feature and disabled by default. Use --enable-preview to enable\n" + 
+				"----------\n";
+		this.runNegativeTest(
+				testFiles,
+				expectedProblemLog,
+				null,
+				true,
+				disablePreviewOptions);
+	}
+	public void testBug544073_011() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.ERROR);
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" +
+				"	static int twice(int i) {\n" +
+				"		switch (i) {\n" +
+				"			default -> 3;\n" +
+				"		}\n" +
+				"		return 0;\n" +
+				"	}\n" +
+				"	public static void main(String[] args) {\n" +
+				"		System.out.print(twice(3));\n" +
+				"	}\n" +
+				"}\n",
+		};
+
+		String expectedProblemLog =
+				"----------\n" + 
+				"1. ERROR in X.java (at line 4)\n" + 
+				"	default -> 3;\n" + 
+				"	^^^^^^^\n" + 
+				"You are using a preview language feature that may or may not be supported in a future release\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 4)\n" + 
+				"	default -> 3;\n" + 
+				"	           ^\n" + 
+				"Invalid expression as statement\n" + 
+				"----------\n";
+		this.runNegativeTest(
+				testFiles,
+				expectedProblemLog,
+				null,
+				true,
+				options);
+	}
+	public void testBug544073_012() {
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" +
+				"	@SuppressWarnings(\"preview\")\n" +
+				"	static int twice(int i) {\n" +
+				"		switch (i) {\n" +
+				"			default -> 3;\n" +
+				"		}\n" +
+				"		return 0;\n" +
+				"	}\n" +
+				"	public static void main(String[] args) {\n" +
+				"		System.out.print(twice(3));\n" +
+				"	}\n" +
+				"}\n",
+		};
+
+		String expectedProblemLog =
+				"----------\n" + 
+				"1. ERROR in X.java (at line 5)\n" + 
+				"	default -> 3;\n" + 
+				"	           ^\n" + 
+				"Invalid expression as statement\n" + 
+				"----------\n";
+		this.runNegativeTest(
+				testFiles,
+				expectedProblemLog);
+	}
+	public void testBug544073_013() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.WARNING);
+		String release = options.get(CompilerOptions.OPTION_Release);
+		options.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_11);
+		try {
+			String[] testFiles = new String[] {
+					"X.java",
+					"public class X {\n" +
+					"	static int twice(int i) {\n" +
+					"		switch (i) {\n" +
+					"			default -> 3;\n" +
+					"		}\n" +
+					"		return 0;\n" +
+					"	}\n" +
+					"	public static void main(String[] args) {\n" +
+					"		System.out.print(twice(3));\n" +
+					"	}\n" +
+					"}\n",
+			};
+
+			String expectedProblemLog =
+					"----------\n" + 
+					"1. ERROR in X.java (at line 0)\n" + 
+					"	public class X {\n" + 
+					"	^\n" + 
+					"Preview features enabled at an invalid source release level 11, preview can be enabled only at source level 13\n" + 
+					"----------\n";
+			this.runNegativeTest(
+					testFiles,
+					expectedProblemLog,
+					null,
+					true,
+					options);
+		} finally {
+			options.put(CompilerOptions.OPTION_Source, release);
+		}
+	}
+	public void testBug544073_014() {
+			String[] testFiles = new String[] {
+					"X.java",
+					"public class X {\n" +
+					"	public static int foo(int i) {\n" +
+					"		int v;\n" +
+					"		int t = switch (i) {\n" +
+					"		case 0 : {\n" +
+					"			yield 0;\n" +
+					"		}\n" +
+					"		default :v = 2;\n" +
+					"		};\n" +
+					"		return t;\n" +
+					"	}\n" +
+					"	\n" +
+					"	public boolean bar() {\n" +
+					"		return true;\n" +
+					"	}\n" +
+					"	public static void main(String[] args) {\n" +
+					"		System.out.println(foo(3));\n" +
+					"	}\n" +
+					"}\n",
+			};
+
+			String expectedProblemLog =
+					"----------\n" + 
+					"1. ERROR in X.java (at line 8)\n" + 
+					"	default :v = 2;\n" + 
+					"	         ^^^^^\n" + 
+					"A switch labeled block in a switch expression should not complete normally\n" + 
+					"----------\n";
+			this.runNegativeTest(
+					testFiles,
+					expectedProblemLog);
+	}
+	public void testBug544073_015() {
+		// switch expression is not a Primary
+		Runner runner = new Runner();
+		runner.customOptions = getCompilerOptions();
+		runner.testFiles = new String[] {
+			"X.java",
+			"public class X {\n" +
+			"	void test(int i) {\n" +
+			"		System.out.println(switch (i) {\n" +
+			"			case 1 -> \"one\";\n" +
+			"			default -> null;\n" +
+			"		}.toLowerCase());\n" +
+			"	}\n" +
+			"	public static void main(String[] args) {\n" +
+			"		new X().test(1);\n" +
+			"	}\n" +
+			"}\n"
+		};
+		runner.expectedCompilerLog =
+				"----------\n" + 
+				"1. ERROR in X.java (at line 6)\n" + 
+				"	}.toLowerCase());\n" + 
+				"	 ^\n" + 
+				"Syntax error on token \".\", , expected\n" + 
+				"----------\n";
+		runner.runNegativeTest();
+	}
+	public void testBug544073_016() {
+		runConformTest(
+			new String[] {
+				"X.java",
+				"public class X {\n" +
+				"	public static int foo(Day day) {\n" +
+				"\n" +
+				"		var len= switch (day) {\n" +
+				"			case SUNDAY-> 6;\n" +
+				"			default -> 10;\n" +
+				"		};\n" +
+				"\n" +
+				"		return len;\n" +
+				"	}\n" +
+				"\n" +
+				"	public static void main(String[] args) {\n" +
+				"		System.out.println(foo(Day.SUNDAY));\n" +
+				"	}\n" +
+				"}\n" +
+				"enum Day {\n" +
+				"	MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;\n" +
+				"}\n"
+			},
+			"6");
+	}
+	/*
+	 * A simple multi constant case statement, compiled and run as expected
+	 */
+	public void testBug544073_017() {
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" +
+						"public static void bar(Day day) {\n" + 
+						"		switch (day) {\n" + 
+						"		case SATURDAY, SUNDAY: \n" + 
+						"			System.out.println(Day.SUNDAY);\n" + 
+						"			break;\n" + 
+						"		case MONDAY : System.out.println(Day.MONDAY);\n" + 
+						"					break;\n" + 
+						"		}\n" + 
+						"	}" +
+						"	public static void main(String[] args) {\n" +
+						"		bar(Day.SATURDAY);\n" +
+						"	}\n" +
+						"}\n" +
+						"enum Day { SATURDAY, SUNDAY, MONDAY;}",
+		};
+
+		String expectedProblemLog =
+				"SUNDAY";
+		this.runConformTest(
+				testFiles,
+				expectedProblemLog);
+	}
+	/*
+	 * A simple multi constant case statement, compiler reports missing enum constants
+	 */
+	public void testBug544073_018() {
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" +
+						"	public static void main(String[] args) {\n" + 
+						"	}\n" + 
+						"public static void bar(Day day) {\n" + 
+						"		switch (day) {\n" + 
+						"		case SATURDAY, SUNDAY: \n" + 
+						"			System.out.println(Day.SUNDAY);\n" + 
+						"			break;\n" + 
+						"		case MONDAY : System.out.println(Day.MONDAY);\n" + 
+						"					break;\n" + 
+						"		}\n" + 
+						"	}" +
+						"}\n" +
+						"enum Day { SATURDAY, SUNDAY, MONDAY, TUESDAY;}",
+		};
+
+		String expectedProblemLog =
+						"----------\n" + 
+						"1. WARNING in X.java (at line 5)\n" + 
+						"	switch (day) {\n" + 
+						"	        ^^^\n" + 
+						"The enum constant TUESDAY needs a corresponding case label in this enum switch on Day\n" + 
+						"----------\n";
+		this.runWarningTest(
+				testFiles,
+				expectedProblemLog);
+	}
+	/*
+	 * A simple multi constant case statement with duplicate enums
+	 */
+	public void testBug544073_019() {
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" +
+						"public static void bar(Day day) {\n" + 
+						"		switch (day) {\n" + 
+						"		case SATURDAY, SUNDAY: \n" + 
+						"			System.out.println(Day.SUNDAY);\n" + 
+						"			break;\n" + 
+						"		case SUNDAY : System.out.println(Day.SUNDAY);\n" + 
+						"					break;\n" + 
+						"		}\n" + 
+						"	}" +
+						"	public static void main(String[] args) {\n" +
+						"		bar(Day.SATURDAY);\n" +
+						"	}\n" +
+						"}\n" +
+						"enum Day { SATURDAY, SUNDAY, MONDAY;}",
+		};
+
+		String expectedProblemLog =
+				"----------\n" + 
+						"1. ERROR in X.java (at line 4)\n" + 
+						"	case SATURDAY, SUNDAY: \n" + 
+						"	^^^^^^^^^^^^^^^^^^^^^\n" + 
+						"Duplicate case\n" + 
+						"----------\n" + 
+						"2. ERROR in X.java (at line 7)\n" + 
+						"	case SUNDAY : System.out.println(Day.SUNDAY);\n" + 
+						"	^^^^^^^^^^^\n" + 
+						"Duplicate case\n" + 
+						"----------\n";
+		this.runNegativeTest(
+				testFiles,
+				expectedProblemLog);
+	}
+	/*
+	 * A simple multi constant case statement with duplicate enums
+	 */
+	public void testBug544073_020() {
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" +
+						"public static void bar(Day day) {\n" + 
+						"		switch (day) {\n" + 
+						"		case SATURDAY, SUNDAY: \n" + 
+						"			System.out.println(Day.SUNDAY);\n" + 
+						"			break;\n" + 
+						"		case SUNDAY, SATURDAY : \n" +
+						"			System.out.println(Day.SUNDAY);\n" + 
+						"			break;\n" + 
+						"		}\n" + 
+						"	}" +
+						"}\n" +
+						"enum Day { SATURDAY, SUNDAY, MONDAY;}",
+		};
+
+		String expectedProblemLog =
+						"----------\n" + 
+						"1. WARNING in X.java (at line 3)\n" + 
+						"	switch (day) {\n" + 
+						"	        ^^^\n" + 
+						"The enum constant MONDAY needs a corresponding case label in this enum switch on Day\n" + 
+						"----------\n" + 
+						"2. ERROR in X.java (at line 4)\n" + 
+						"	case SATURDAY, SUNDAY: \n" + 
+						"	^^^^^^^^^^^^^^^^^^^^^\n" +
+						"Duplicate case\n" + 
+						"----------\n" + 
+						"3. ERROR in X.java (at line 7)\n" + 
+						"	case SUNDAY, SATURDAY : \n" + 
+						"	^^^^^^^^^^^^^^^^^^^^^\n" + 
+						"Duplicate case\n" + 
+						"----------\n" + 
+						"4. ERROR in X.java (at line 7)\n" + 
+						"	case SUNDAY, SATURDAY : \n" + 
+						"	^^^^^^^^^^^^^^^^^^^^^\n" + 
+						"Duplicate case\n" + 
+						"----------\n";
+		this.runNegativeTest(
+				testFiles,
+				expectedProblemLog);
+	}
+	/*
+	 * 
+	 */
+	public void testBug544073_021() {
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" +
+						"public static void bar(Day day) {\n" + 
+						"		switch (day) {\n" + 
+						"		case SATURDAY, SUNDAY: \n" + 
+						"			System.out.println(Day.SUNDAY);\n" + 
+						"			break;\n" + 
+						"		case TUESDAY : System.out.println(Day.SUNDAY);\n" + 
+						"					break;\n" + 
+						"		}\n" + 
+						"	}" +
+						"	public static void main(String[] args) {\n" +
+						"		bar(Day.SATURDAY);\n" +
+						"	}\n" +
+						"}\n" +
+						"enum Day { SATURDAY, SUNDAY, MONDAY, TUESDAY;}",
+		};
+
+		String expectedProblemLog =
+				"----------\n" + 
+				"1. WARNING in X.java (at line 3)\n" + 
+				"	switch (day) {\n" + 
+				"	        ^^^\n" + 
+				"The enum constant MONDAY needs a corresponding case label in this enum switch on Day\n" + 
+				"----------\n";
+		this.runWarningTest(
+				testFiles,
+				expectedProblemLog);
+	}
+	public void testBug544073_022() {
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" +
+						"public static void bar(Day day) {\n" + 
+						"		switch (day) {\n" + 
+						"		case SATURDAY, SUNDAY: \n" + 
+						"			System.out.println(day);\n" + 
+						"			break;\n" + 
+						"		case MONDAY : System.out.println(0);\n" + 
+						"					break;\n" + 
+						"		}\n" + 
+						"	}" +
+						"	public static void main(String[] args) {\n" +
+						"		bar(Day.SATURDAY);\n" +
+						"		bar(Day.MONDAY);\n" +
+						"		bar(Day.SUNDAY);\n" +
+						"	}\n" +
+						"}\n" +
+						"enum Day { SATURDAY, SUNDAY, MONDAY;}",
+		};
+
+		String expectedProblemLog =
+				"SATURDAY\n" + 
+				"0\n" + 
+				"SUNDAY";
+		this.runConformTest(
+				testFiles,
+				expectedProblemLog);
+	}
+	/*
+	 * Simple switch case with string literals
+	 */
+	public void testBug544073_023() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" + 
+						"	public static void main(String[] args) {\n" + 
+						"		bar(\"a\");\n" + 
+						"		bar(\"b\");\n" + 
+						"		bar(\"c\");\n" + 
+						"		bar(\"d\");\n" + 
+						"	}\n" + 
+						"	public static void bar(String s) {\n" + 
+						"		switch(s) {\n" + 
+						"		case \"a\":\n" + 
+						"		case \"b\":\n" + 
+						"			System.out.println(\"A/B\");\n" + 
+						"			break;\n" + 
+						"		case \"c\":\n" + 
+						"			System.out.println(\"C\");\n" + 
+						"			break;\n" + 
+						"		default:\n" + 
+						"			System.out.println(\"NA\");\n" + 
+						"		}\n" + 
+						"	}\n" + 
+						"}",
+		};
+		String expectedProblemLog =
+				"A/B\n" + 
+				"A/B\n" + 
+				"C\n" + 
+				"NA";
+		this.runConformTest(
+				testFiles,
+				expectedProblemLog);
+	}
+	public void testBug544073_024() {
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" + 
+						"	public static void main(String[] args) {\n" + 
+						"		bar(\"a\");\n" + 
+						"		bar(\"b\");\n" + 
+						"		bar(\"c\");\n" + 
+						"		bar(\"d\");\n" + 
+						"	}\n" + 
+						"	public static void bar(String s) {\n" + 
+						"		switch(s) {\n" + 
+						"		case \"a\", \"b\":\n" + 
+						"			System.out.println(\"A/B\");\n" + 
+						"			break;\n" + 
+						"		case \"c\":\n" + 
+						"			System.out.println(\"C\");\n" + 
+						"			break;\n" + 
+						"		default:\n" + 
+						"			System.out.println(\"NA\");\n" + 
+						"		}\n" + 
+						"	}\n" + 
+						"}",
+		};
+		String expectedProblemLog =
+				"A/B\n" + 
+				"A/B\n" + 
+				"C\n" + 
+				"NA";
+		this.runConformTest(
+				testFiles,
+				expectedProblemLog);
+	}
+	/*
+	 * Switch with multi constant case statements with string literals
+	 * two string literals with same hashcode
+	 */
+	public void testBug544073_025() {
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" + 
+						"	public static void main(String[] args) {\n" + 
+						"		bar(\"FB\");\n" + 
+						"		bar(\"Ea\");\n" + 
+						"		bar(\"c\");\n" + 
+						"		bar(\"D\");\n" + 
+						"	}\n" + 
+						"	public static void bar(String s) {\n" + 
+						"		switch(s) {\n" + 
+						"		case \"FB\", \"c\":\n" + 
+						"			System.out.println(\"A\");\n" + 
+						"			break;\n" + 
+						"		case \"Ea\":\n" + 
+						"			System.out.println(\"B\");\n" + 
+						"			break;\n" + 
+						"		default:\n" + 
+						"			System.out.println(\"NA\");\n" + 
+						"		}\n" + 
+						"	}\n" + 
+						"}",
+		};
+		String expectedProblemLog =
+				"A\n" + 
+				"B\n" + 
+				"A\n" + 
+				"NA";
+		this.runConformTest(
+				testFiles,
+				expectedProblemLog);
+	}
+	/*
+	 * Switch with multi constant case statements with integer constants
+	 */
+	public void testBug544073_026() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" + 
+						"	public static void main(String[] args) {\n" + 
+						"		bar(1);\n" + 
+						"		bar(2);\n" + 
+						"		bar(3);\n" + 
+						"		bar(4);\n" + 
+						"		bar(5);\n" + 
+						"	}\n" + 
+						"	public static void bar(int i) {\n" + 
+						"		switch (i) {\n" + 
+						"		case 1, 3: \n" + 
+						"			System.out.println(\"Odd\");\n" + 
+						"			break;\n" + 
+						"		case 2, 4: \n" + 
+						"			System.out.println(\"Even\");\n" + 
+						"			break;\n" + 
+						"		default:\n" + 
+						"			System.out.println(\"Out of range\");\n" + 
+						"		}\n" + 
+						"	}\n" + 
+						"}",
+		};
+		String expectedProblemLog =
+				"Odd\n" + 
+				"Even\n" + 
+				"Odd\n" + 
+				"Even\n" + 
+				"Out of range";
+		this.runConformTest(
+				testFiles,
+				expectedProblemLog);
+	}
+	/*
+	 * Switch multi-constant with mixed constant types, reported
+	 */
+	public void testBug544073_027() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" + 
+						"	public static void main(String[] args) {\n" + 
+						"	}\n" + 
+						"	public static void bar(int i) {\n" + 
+						"		switch (i) {\n" + 
+						"		case 1, 3: \n" + 
+						"			System.out.println(\"Odd\");\n" + 
+						"			break;\n" + 
+						"		case \"2\": \n" + 
+						"			System.out.println(\"Even\");\n" + 
+						"			break;\n" + 
+						"		default:\n" + 
+						"				System.out.println(\"Out of range\");\n" + 
+						"		}\n" + 
+						"	}\n" + 
+						"}",
+		};
+		String expectedProblemLog =
+				"----------\n" + 
+				"1. ERROR in X.java (at line 9)\n" + 
+				"	case \"2\": \n" + 
+				"	     ^^^\n" + 
+				"Type mismatch: cannot convert from String to int\n" + 
+				"----------\n";
+		this.runNegativeTest(
+				testFiles,
+				expectedProblemLog,
+				null,
+				true,
+				options);
+	}
+	/*
+	 * Switch multi-constant without break statement, reported
+	 */
+	public void testBug544073_028() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
+		options.put(CompilerOptions.OPTION_ReportFallthroughCase, CompilerOptions.WARNING);
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" + 
+				"	public static void main(String[] args) {\n" + 
+				"	}\n" + 
+				"	public static void bar(int i) {\n" + 
+				"		switch (i) {\n" + 
+				"		case 1, 3: \n" + 
+				"			System.out.println(\"Odd\");\n" + 
+				"		case 2, 4: \n" + 
+				"			System.out.println(\"Even\");\n" + 
+				"			break;\n" +
+				"		default:\n" + 
+				"				System.out.println(\"Out of range\");\n" + 
+				"		}\n" + 
+				"	}\n" + 
+				"}",
+		};
+		String expectedProblemLog =
+				"----------\n" + 
+				"1. WARNING in X.java (at line 8)\n" + 
+				"	case 2, 4: \n" + 
+				"	^^^^^^^^^\n" + 
+				"Switch case may be entered by falling through previous case. If intended, add a new comment //$FALL-THROUGH$ on the line above\n" + 
+				"----------\n";
+		this.runWarningTest(
+				testFiles,
+				expectedProblemLog,
+				options,
+				"-Xlint:fallthrough");
+	}
+	/*
+	 * Switch multi-constant without yield statement, reported
+	 */
+	public void testBug544073_029() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
+		options.put(CompilerOptions.OPTION_ReportMissingDefaultCase, CompilerOptions.WARNING);
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" + 
+				"	public static void main(String[] args) {\n" + 
+				"	}\n" + 
+				"	public static void bar(int i) {\n" + 
+				"		switch (i) {\n" + 
+				"		case 1, 3: \n" + 
+				"			System.out.println(\"Odd\");\n" + 
+				"		case 2, 4: \n" + 
+				"			System.out.println(\"Even\");\n" + 
+				"		}\n" + 
+				"	}\n" + 
+				"}",
+		};
+		String expectedProblemLog =
+				"----------\n" + 
+				"1. WARNING in X.java (at line 5)\n" + 
+				"	switch (i) {\n" + 
+				"	        ^\n" + 
+				"The switch statement should have a default case\n" + 
+				"----------\n";
+		this.runWarningTest(
+				testFiles,
+				expectedProblemLog,
+				options);
+	}
+	/*
+	 * Switch multi-constant with duplicate int constants
+	 */
+	public void testBug544073_030() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" + 
+						"	public static void main(String[] args) {\n" + 
+						"	}\n" + 
+						"	public static void bar(int i) {\n" + 
+						"		switch (i) {\n" + 
+						"		case 1, 3: \n" + 
+						"			System.out.println(\"Odd\");\n" + 
+						"		case 3, 4: \n" + 
+						"			System.out.println(\"Odd\");\n" + 
+						"		}\n" + 
+						"	}\n" + 
+						"}",
+		};
+		String expectedProblemLog =
+				"----------\n" + 
+				"1. ERROR in X.java (at line 6)\n" + 
+				"	case 1, 3: \n" + 
+				"	^^^^^^^^^\n" + 
+				"Duplicate case\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 8)\n" + 
+				"	case 3, 4: \n" + 
+				"	^^^^^^^^^\n" + 
+				"Duplicate case\n" + 
+				"----------\n";
+		this.runNegativeTest(
+				testFiles,
+				expectedProblemLog,
+				null,
+				true,
+				options);
+	}
+	/*
+	 * Switch multi-constant with duplicate String literals
+	 */
+	public void testBug544073_031() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" + 
+						"	public static void main(String[] args) {\n" + 
+						"	}\n" + 
+						"	public static void bar(String s) {\n" + 
+						"		switch (s) {\n" + 
+						"		case \"a\", \"b\": \n" + 
+						"			System.out.println(\"Odd\");\n" + 
+						"		case \"b\", \"c\": \n" + 
+						"			System.out.println(\"Odd\");\n" + 
+						"		}\n" + 
+						"	}\n" + 
+						"}",
+		};
+		String expectedProblemLog =
+				"----------\n" + 
+				"1. ERROR in X.java (at line 6)\n" + 
+				"	case \"a\", \"b\": \n" + 
+				"	^^^^^^^^^^^^^\n" + 
+				"Duplicate case\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 8)\n" + 
+				"	case \"b\", \"c\": \n" + 
+				"	^^^^^^^^^^^^^\n" + 
+				"Duplicate case\n" + 
+				"----------\n";
+		this.runNegativeTest(
+				testFiles,
+				expectedProblemLog,
+				null,
+				true,
+				options);
+	}
+	/*
+	 * Switch multi-constant with illegal qualified enum constant
+	 */
+	public void testBug544073_032() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" + 
+						"	public static void main(String[] args) {\n" + 
+						"	}\n" + 
+						"	public static void bar(Num s) {\n" + 
+						"		switch (s) {\n" + 
+						"		case ONE, Num.TWO: \n" + 
+						"			System.out.println(\"Odd\");\n" + 
+						"		}\n" + 
+						"	}\n" + 
+						"}\n" +
+						"enum Num { ONE, TWO}\n",
+		};
+		String expectedProblemLog =
+				"----------\n" + 
+				"1. ERROR in X.java (at line 6)\n" + 
+				"	case ONE, Num.TWO: \n" + 
+				"	          ^^^^^^^\n" + 
+				"The qualified case label Num.TWO must be replaced with the unqualified enum constant TWO\n" + 
+				"----------\n";
+		this.runNegativeTest(
+				testFiles,
+				expectedProblemLog,
+				null,
+				true,
+				options);
+	}
+	public void testBug544073_033() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" + 
+				"	public void bar(int s) {\n" + 
+				"		int j = switch (s) {\n" + 
+				"			case 1, 2, 3 -> (s+1);\n" +
+				"			default -> j;\n" + 
+				"		};\n" + 
+				"	}\n" + 
+				"}\n",
+		};
+		String expectedProblemLog =
+				"----------\n" + 
+				"1. ERROR in X.java (at line 5)\n" + 
+				"	default -> j;\n" + 
+				"	           ^\n" + 
+				"The local variable j may not have been initialized\n" + 
+				"----------\n";
+		this.runNegativeTest(
+				testFiles,
+				expectedProblemLog,
+				null,
+				true,
+				options);
+	}
+	public void testBug544073_034() {
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" + 
+				"	public static void main(String[] args) {\n" + 
+				"	}\n" + 
+				"	public void bar(int s) {\n" +
+				"		int j = 0;" + 
+				"		j = switch (s) {\n" + 
+				"			case 1, 2, 3 -> (s+1);\n" +
+				"			default -> j;\n" + 
+				"		};\n" + 
+				"	}\n" + 
+				"}\n",
+		};
+		this.runConformTest(
+				testFiles,
+				"");
+	}
+	public void testBug544073_035() {
+		// TODO: Fix me
+		this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"import java.io.IOException;\n" +
+				"\n" +
+				"public class X {\n" +
+				"	public static int foo(int i) throws IOException {\n" +
+				"		int t = switch (i) {\n" +
+				"		case 0 : {\n" +
+				"			yield 0;\n" +
+				"		}\n" +
+				"		case 2 : {\n" +
+				"			break;\n" +
+				"		}\n" +
+				"		default : yield 10;\n" +
+				"		};\n" +
+				"		return t;\n" +
+				"	}\n" +
+				"	\n" +
+				"	public boolean bar() {\n" +
+				"		return true;\n" +
+				"	}\n" +
+				"	public static void main(String[] args) {\n" +
+				"		try {\n" +
+				"			System.out.println(foo(3));\n" +
+				"		} catch (IOException e) {\n" +
+				"			// TODO Auto-generated catch block\n" +
+				"			e.printStackTrace();\n" +
+				"		}\n" +
+				"	}\n" +
+				"}\n",
+			},
+			"----------\n" + 
+			"1. ERROR in X.java (at line 10)\n" + 
+			"	break;\n" + 
+			"	^^^^^^\n" + 
+			"break out of switch expression not allowed\n" + 
+			"----------\n");
+	}
+	public void testBug544073_036() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" + 
+				"	@SuppressWarnings(\"preview\")\n" + 
+				"	public static void bar(int  i) {\n" + 
+				"		i = switch (i+0) {\n" + 
+				"			default: System.out.println(0);\n" + 
+				"		}; " + 
+				"	}\n" + 
+				"}",
+		};
+		String expectedProblemLog =
+				"----------\n" + 
+				"1. ERROR in X.java (at line 4)\n" + 
+				"	i = switch (i+0) {\n" + 
+				"			default: System.out.println(0);\n" + 
+				"		}; 	}\n" + 
+				"	    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"A switch expression should have at least one result expression\n" + 
+				"----------\n";
+		this.runNegativeTest(
+				testFiles,
+				expectedProblemLog,
+				null,
+				true,
+				options);
+	}
+	public void testBug544073_037() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
+		String[] testFiles = new String[] {
+			"X.java",
+			"public class X {\n" +
+			"	void test(int i) {\n" + 
+			"		need(switch (i) {\n" + 
+			"			case 1 -> \"\";\n" + 
+			"			default -> i == 3 ? null : \"\";\n" + 
+			"		}); \n" + 
+			"	}\n" + 
+			"	void need(String s) {\n" + 
+			"		System.out.println(s.toLowerCase());\n" + 
+			"	}\n" + 
+			"	public static void main(String[] args) {\n" + 
+			"		new X().need(\"Hello World\");\n" + 
+			"	}\n" + 
+			"}\n"
+		};
+		String expectedOutput = "hello world";
+		runConformTest(testFiles, expectedOutput, options);
+	}
+	public void testBug544073_038() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
+		String[] testFiles = new String[] {
+			"X.java",
+			"public class X {\n" +
+			"	void test(int i) {\n" + 
+			"		need(switch (i) {\n" + 
+			"			case 1: yield \"\";\n" + 
+			"			default: yield i == 3 ? null : \"\";\n" + 
+			"		}); \n" + 
+			"	}\n" + 
+			"	void need(String s) {\n" + 
+			"		System.out.println(s.toLowerCase());\n" + 
+			"	}\n" +
+			"	public static void main(String[] args) {\n" + 
+			"		new X().need(\"Hello World\");\n" + 
+			"	}\n" + 
+			"}\n"
+		};
+		String expectedOutput = "hello world";
+		runConformTest(testFiles, expectedOutput, options);
+	}
+	public void testBug544073_039() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
+		String[] testFiles = new String[] {
+			"X.java",
+			"interface I0 { void i(); }\n" + 
+			"interface I1 extends I0 {}\n" + 
+			"interface I2 extends I0 {}\n" +
+			"public class X {\n" +
+			"	I1 n1() { return null; }\n" + 
+			"	<I extends I2> I n2() { return null; }\n" + 
+			"	<M> M m(M m) { return m; }\n" + 
+			"	void test(int i, boolean b) {\n" + 
+			"		m(switch (i) {\n" + 
+			"			case 1 -> n1();\n" + 
+			"			default -> b ? n1() : n2();\n" + 
+			"		}).i(); \n" + 
+			"	}\n" + 
+			"	public static void main(String[] args) {\n" + 
+			"		try {\n" +
+			"			new X().test(1, true);\n" +
+			"		} catch (NullPointerException e) {\n" +
+			"			System.out.println(\"NPE as expected\");\n" +
+			"		}\n" +
+			"	}\n" + 
+			"}\n"
+		};
+		String expectedOutput = "NPE as expected";
+		runConformTest(testFiles, expectedOutput, options);
+	}
+	public void testBug544073_040() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
+		String[] testFiles = new String[] {
+			"X.java",
+			"import java.util.function.Supplier;\n" +
+			"interface I0 { void i(); }\n" + 
+			"interface I1 extends I0 {}\n" + 
+			"interface I2 extends I0 {}\n" +
+			"public class X {\n" +
+			"	I1 n1() { return null; }\n" + 
+			"	<I extends I2> I n2() { return null; }\n" + 
+			"	<M> M m(Supplier<M> m) { return m.get(); }\n" + 
+			"	void test(int i, boolean b) {\n" + 
+			"		m(switch (i) {\n" + 
+			"			case 1 -> this::n1;\n" + 
+			"			default -> this::n2;\n" + 
+			"		}).i(); \n" + 
+			"	}\n" + 
+			"	public static void main(String[] args) {\n" + 
+			"		try {\n" +
+			"			new X().test(1, true);\n" +
+			"		} catch (NullPointerException e) {\n" +
+			"			System.out.println(\"NPE as expected\");\n" +
+			"		}\n" +
+			"	}\n" + 
+			"}\n"
+		};
+		String expectedOutput = "NPE as expected";
+		runConformTest(testFiles, expectedOutput, options);
+	}
+	public void testBug544073_041() {
+		// require resolving/inferring of poly-switch-expression during ASTNode.resolvePolyExpressionArguments()
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
+		String[] testFiles = new String[] {
+			"X.java",
+			"public class X {\n" +
+			"		void test(int i) {\n" + 
+			"		need(switch (i) {\n" + 
+			"			case 1 -> 1.0f;\n" + 
+			"			default -> i == 3 ? 3 : 5.0d;\n" + 
+			"		}); \n" + 
+			"	}\n" + 
+			"	<N extends Number> void need(N s) {\n" + 
+			"		System.out.println(s.toString());\n" + 
+			"	}\n" + 
+			"	public static void main(String[] args) {\n" + 
+			"		new X().need(3);\n" +
+			"	}\n" + 
+			"}\n"
+		};
+		String expectedOutput = "3";
+		runConformTest(testFiles, expectedOutput, options);
+	}
+	public void testBug544073_042() {
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n" + 
+					"	static int twice(int i) throws Exception {\n" + 
+					"		switch (i) {\n" + 
+					"			case 0 -> System.out.println(\"hellow\");\n" + 
+					"			case 1 -> foo();\n" + 
+					"			default -> throw new Exception();\n" + 
+					"		};\n" + 
+					"		return 0;\n" + 
+					"	}\n" + 
+					"\n" + 
+					"	static int foo() {\n" + 
+					"		System.out.println(\"inside foo\");\n" + 
+					"		return 1;\n" + 
+					"	}\n" + 
+					"\n" + 
+					"	public static void main(String[] args) {\n" + 
+					"		try {\n" + 
+					"			System.out.print(twice(1));\n" + 
+					"		} catch (Exception e) {\n" + 
+					"			System.out.print(\"Got Exception\");\n" + 
+					"		}\n" + 
+					"	}\n" + 
+					"}"
+			},
+			"inside foo\n"
+			+ "0");
+	}
+	public void testBug544073_043() {
+		runConformTest(
+			new String[] {
+					"X.java",
+					"enum SomeDays {\n" + 
+					"	Mon, Wed, Fri\n" + 
+					"}\n" + 
+					"\n" + 
+					"public class X {\n" + 
+					"	int testEnum(boolean b) {\n" + 
+					"		SomeDays day = b ? SomeDays.Mon : null;\n" + 
+					"		return switch(day) {\n" + 
+					"			case Mon -> 1;\n" + 
+					"			case Wed -> 2;\n" + 
+					"			case Fri -> 3;\n" + 
+					"		};\n" + 
+					"	}\n" + 
+					"\n" + 
+					"	public static void main(String[] args) {\n" + 
+					"		System.out.println(new X().testEnum(true));\n" + 
+					"	}\n" + 
+					"}\n" + 
+					""
+			},
+			"1");
+	}
+	public void testBug544073_044() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" +
+				"	static int foo(int i) {\n" +
+				"		switch (i) {\n" +
+				"			default -> 3; // should flag an error\n" +
+				"			\n" +
+				"		};\n" +
+				"		return 0;\n" +
+				"	}\n" +
+				"	public static void main(String[] args) {\n" +
+				"		foo(1);\n" +
+				"	}\n" +
+				"}\n",
+		};
+		String expectedProblemLog =
+				"----------\n" + 
+				"1. ERROR in X.java (at line 4)\n" + 
+				"	default -> 3; // should flag an error\n" + 
+				"	           ^\n" + 
+				"Invalid expression as statement\n" + 
+				"----------\n";
+		this.runNegativeTest(
+				testFiles,
+				expectedProblemLog,
+				null,
+				true,
+				new String[] { "--enable-preview"},
+				options);
+	}
+	public void testBug544073_045() {
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n" + 
+					"	public void foo(int i) {\n" + 
+					"		int j = switch (i) {\n" + 
+					"			case 1 -> i;\n" + 
+					"			default -> i;\n" + 
+					"		};\n" + 
+					"		System.out.println(j);\n" + 
+					"	}\n" + 
+					"	\n" + 
+					"	public static void main(String[] args) {\n" + 
+					"		new X().foo(1);\n" + 
+					"	}\n" + 
+					"}"
+			},
+			"1");
+	}
+	public void testBug544073_046() {
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n" + 
+					"	public void foo(int i) {\n" + 
+					"		long j = switch (i) {\n" + 
+					"			case 1 -> 10L;\n" + 
+					"			default -> 20L;\n" + 
+					"		};\n" + 
+					"		System.out.println(j);\n" + 
+					"	}\n" + 
+					"	\n" + 
+					"	public static void main(String[] args) {\n" + 
+					"		new X().foo(1);\n" + 
+					"	}\n" + 
+					"}"
+			},
+			"10");
+	}
+	public void testBug544073_047() {
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n" + 
+					"	public int foo(String s) throws Exception {\n" + 
+					"		int i = switch (s) {\n" + 
+					"			case \"hello\" -> 1;\n" + 
+					"			default -> throw new Exception();\n" + 
+					"		};\n" + 
+					"		return i;\n" + 
+					"	}\n" + 
+					"\n" + 
+					"	public static void main(String[] argv) {\n" + 
+					"		try {\n" + 
+					"			System.out.print(new X().foo(\"hello\"));\n" + 
+					"		} catch (Exception e) {\n" + 
+					"			//\n" + 
+					"		}\n" + 
+					"	}\n" + 
+					"}"
+			},
+			"1");
+	}
+	public void testBug544073_048() {
+		this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"public class X {\n" +
+				"    public void foo(Day day) {\n" +
+				"    	var today = 1;\n" +
+				"    	today =  switch (day) {\n" +
+				"    		      case SATURDAY,SUNDAY :\n" +
+				"    		         today=1;\n" +
+				"    		         yield today;\n" +
+				"    		      case MONDAY,TUESDAY,WEDNESDAY,THURSDAY :\n" +
+				"    			 today=2;\n" +
+				"    			 yield today;\n" +
+				"    		};\n" +
+				"    }\n" +
+				"    public static void main(String argv[]) {\n" +
+				"    	new X().foo(Day.FRIDAY);\n" +
+				"    }\n" +
+				"}\n" +
+				"\n" +
+				"enum Day {\n" +
+				"	SUNDAY,\n" +
+				"	MONDAY,\n" +
+				"	TUESDAY,\n" +
+				"	WEDNESDAY,\n" +
+				"	THURSDAY,\n" +
+				"	FRIDAY,\n" +
+				"	SATURDAY\n" +
+				"}\n",
+			},
+			"----------\n" + 
+			"1. ERROR in X.java (at line 4)\n" + 
+			"	today =  switch (day) {\n" + 
+			"	                 ^^^\n" + 
+			"A Switch expression should cover all possible values\n" + 
+			"----------\n");
+	}
+	public void testBug544073_049() {
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n" + 
+					"    public void foo(int i ) {\n" + 
+					"        boolean b = switch (i) {\n" + 
+					"            case 0 -> i == 1;\n" + 
+					"            default -> true;\n" + 
+					"        };\n" + 
+					"        System.out.println( b ? \" true\" : \"false\");\n" + 
+					"    }\n" + 
+					"    public static void main(String[] argv) {\n" + 
+					"    	new X().foo(0);\n" + 
+					"    }\n" + 
+					"}"
+			},
+			"false");
+	}
+	public void testBug544073_050() {
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n" + 
+					"    public void foo(String s) {\n" + 
+					"        try {\n" + 
+					"            int i = switch (s) {\n" + 
+					"                case \"hello\" -> 0;\n" + 
+					"                default -> 2;\n" + 
+					"            };\n" + 
+					"        } finally {\n" + 
+					"        	System.out.println(s);\n" + 
+					"        }\n" + 
+					"    }\n" + 
+					"    public static void main(String argv[]) {\n" + 
+					"    	new X().foo(\"hello\");\n" + 
+					"    }\n" + 
+					"}"
+			},
+			"hello");
+	}
+	public void testBug544073_051() {
+		Map<String, String> customOptions = getCompilerOptions();
+		customOptions.put(CompilerOptions.OPTION_PreserveUnusedLocal, CompilerOptions.OPTIMIZE_OUT);
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n" + 
+					"    public void foo(String s) {\n" + 
+					"        try {\n" + 
+					"            int i = switch (s) {\n" + 
+					"                case \"hello\" -> 0;\n" + 
+					"                default -> 2;\n" + 
+					"            };\n" + 
+					"        } finally {\n" + 
+					"        	System.out.println(s);\n" + 
+					"        }\n" + 
+					"    }\n" + 
+					"    public static void main(String argv[]) {\n" + 
+					"    	new X().foo(\"hello\");\n" + 
+					"    }\n" + 
+					"}"
+			},
+			"hello");
+	}
+	public void testBug544073_052() {
+		Map<String, String> customOptions = getCompilerOptions();
+		customOptions.put(CompilerOptions.OPTION_PreserveUnusedLocal, CompilerOptions.OPTIMIZE_OUT);
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n" + 
+					"    public void foo(String s) {\n" + 
+					"        try {\n" + 
+					"            long l = switch (s) {\n" + 
+					"                case \"hello\" -> 0;\n" + 
+					"                default -> 2;\n" + 
+					"            };\n" + 
+					"        } finally {\n" + 
+					"        	System.out.println(s);\n" + 
+					"        }\n" + 
+					"    }\n" + 
+					"    public static void main(String argv[]) {\n" + 
+					"    	new X().foo(\"hello\");\n" + 
+					"    }\n" + 
+					"}"
+			},
+			"hello");
+	}
+	public void testBug544073_053() {
+		Map<String, String> customOptions = getCompilerOptions();
+		customOptions.put(CompilerOptions.OPTION_PreserveUnusedLocal, CompilerOptions.OPTIMIZE_OUT);
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n" +
+					"    public int foo(int i)  {\n" +
+					"        int j = (switch (i) {\n" +
+					"            case 1 -> 1;\n" +
+					"            default -> 2;\n" +
+					"        });\n" +
+					"        return j;\n" +
+					"    }\n" +
+					"    public static void main(String[] argv) {\n" +
+					"    	new X().foo(1);\n" +
+					"    }\n" +
+					"}\n"
+			},
+			"",
+			customOptions);
+	}
+	public void testBug544073_054() {
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n" + 
+					"	enum MyEnum {\n" + 
+					"		FIRST;\n" + 
+					"	}\n" + 
+					"\n" + 
+					"	public void foo(MyEnum myEnum) {\n" + 
+					"		int i = switch (myEnum) {\n" + 
+					"			case FIRST ->  1;\n" + 
+					"		};\n" + 
+					"			System.out.println( \"i:\" + i);\n" + 
+					"	}\n" + 
+					"\n" + 
+					"	public static void main(String argv[]) {\n" + 
+					"		new X().foo(MyEnum.FIRST);\n" + 
+					"	}\n" + 
+					"}"
+			},
+			"i:1");
+	}
+	public void testBug544073_055() {
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n" + 
+					"	enum MyEnum {\n" + 
+					"		FIRST;\n" + 
+					"	}\n" + 
+					"\n" + 
+					"	public void foo(MyEnum myEnum) {\n" + 
+					"		int i = switch (myEnum) {\n" + 
+					"			case FIRST ->  1;\n" + 
+					"			default ->  0;\n" + 
+					"		};\n" + 
+					"			System.out.println( \"i:\" + i);\n" + 
+					"	}\n" + 
+					"\n" + 
+					"	public static void main(String argv[]) {\n" + 
+					"		new X().foo(MyEnum.FIRST);\n" + 
+					"	}\n" + 
+					"}"
+			},
+			"i:1");
+	}
+	public void testBug544073_056() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n" +
+				"    public int foo(int i) {\n" +
+				"    	var v = switch(i) {\n" +
+				"    	case 0 -> x;\n" +
+				"    	default -> 1;\n" +
+				"    	};\n" +
+				"    	return v;\n" +
+				"    }\n" +
+				"    public static void main(String[] argv) {\n" +
+				"       System.out.println(new X().foo(0));\n" +
+				"    }\n" +
+				"}",
+		};
+		String expectedProblemLog =
+				"----------\n" + 
+				"1. ERROR in X.java (at line 4)\n" + 
+				"	case 0 -> x;\n" + 
+				"	          ^\n" + 
+				"x cannot be resolved to a variable\n" + 
+				"----------\n";
+		this.runNegativeTest(
+				testFiles,
+				expectedProblemLog,
+				null,
+				true,
+				new String[] { "--enable-preview"},
+				options);
+	}
+	public void testBug544073_057() {
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n" +
+					"    @SuppressWarnings(\"preview\")\n" +
+					"	public int foo(int i) {\n" +
+					"    	int v = switch(i) {\n" +
+					"    	case 0 -> switch(i) {\n" +
+					"    			case 0 -> 0;\n" +
+					"    			default -> 1;\n" +
+					"    		};\n" +
+					"    	default -> 1;\n" +
+					"    	};\n" +
+					"    	return v;\n" +
+					"    }\n" +
+					"    public static void main(String[] argv) {\n" +
+					"       System.out.println(new X().foo(0));\n" +
+					"    }\n" +
+					"}"
+			},
+			"0");
+	}
+	public void testBug544073_058() {
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n" +
+					"    public int foo(int i) {\n" +
+					"    	@SuppressWarnings(\"preview\")\n" +
+					"    	int v = switch(switch(i) {\n" +
+					"        		default -> 1;\n" +
+					"        		}) {\n" +
+					"        	default -> 1;\n" +
+					"        };\n" +
+					"       return v;\n" +
+					"    }\n" +
+					"\n" +
+					"    public static void main(String[] argv) {\n" +
+					"       System.out.println(new X().foo(0));\n" +
+					"    }\n" +
+					"}\n"
+			},
+			"1");
+	}
+	public void testBug544073_059() {
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n" + 
+					"	public static int foo(int i) {\n" + 
+					"		boolean v = switch (i) {\n" + 
+					"			case 1: i = 10; yield true;\n" + 
+					"			default: yield false;\n" + 
+					"		};\n" + 
+					"		return v ? 0 : 1;\n" + 
+					"	}\n" + 
+					"	public static void main(String[] argv) {\n" + 
+					"		System.out.println(X.foo(0));\n" + 
+					"	}\n" + 
+					"}"
+			},
+			"1");
+	}
+	public void testBug544073_060() {
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n" + 
+					"	public static int foo(int i) {\n" + 
+					"		boolean v = switch (i) {\n" + 
+					"			case 1: i++; yield true;\n" + 
+					"			default: yield false;\n" + 
+					"		};\n" + 
+					"		return v ? 0 : 1;\n" + 
+					"	}\n" + 
+					"	public static void main(String[] argv) {\n" + 
+					"		System.out.println(X.foo(1));\n" + 
+					"	}\n" + 
+					"}"
+			},
+			"0");
+	}
+	public void testBug544073_061() {
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n" + 
+					"	public static int foo(int i) {\n" + 
+					"		boolean v = switch (i) {\n" + 
+					"			case 1: i+= 10; yield true;\n" + 
+					"			default: yield false;\n" + 
+					"		};\n" + 
+					"		return v ? 0 : 1;\n" + 
+					"	}\n" + 
+					"	public static void main(String[] argv) {\n" + 
+					"		System.out.println(X.foo(1));\n" + 
+					"	}\n" + 
+					"}"
+			},
+			"0");
+	}
+	public void testBug544073_062() {
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n" + 
+					"	public static int foo(int i) {\n" + 
+					"		boolean v = switch (i) {\n" + 
+					"			case 1: switch(i) {case 4: break;}; yield true;\n" + 
+					"			default: yield false;\n" + 
+					"		};\n" + 
+					"		return v ? 0 : 1;\n" + 
+					"	}\n" + 
+					"	public static void main(String[] argv) {\n" + 
+					"		System.out.println(X.foo(1));\n" + 
+					"	}\n" + 
+					"}"
+			},
+			"0");
+	}
+	public void testBug544073_063() {
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n" + 
+					"	public static int foo(int i) {\n" + 
+					"		boolean v = switch (i) {\n" + 
+					"			case 1: foo(5); yield true;\n" + 
+					"			default: yield false;\n" + 
+					"		};\n" + 
+					"		return v ? 0 : 1;\n" + 
+					"	}\n" + 
+					"	public static void main(String[] argv) {\n" + 
+					"		System.out.println(X.foo(1));\n" + 
+					"	}\n" + 
+					"}"
+			},
+			"0");
+	}
+	public void testBug544073_064() {
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n" +
+					"    public int foo(int i) {\n" +
+					"    @SuppressWarnings(\"preview\")\n" +
+					"	boolean v = switch (i) {\n" +
+					"        case 1:\n" +
+					"        	switch (i) {\n" +
+					"        		case 1 : i = 10;\n" +
+					"        			break;\n" +
+					"        		default :\n" +
+					"        			i = 2;\n" +
+					"        			break;\n" +
+					"        		}\n" +
+					"        yield true;\n" +
+					"        default: yield false;\n" +
+					"    };\n" +
+					"    return v ? 0 : 1;\n" +
+					"    }\n" +
+					"\n" +
+					"    public static void main(String[] argv) {\n" +
+					"       System.out.println(new X().foo(0));\n" +
+					"    }\n" +
+					"}\n"
+			},
+			"1");
+	}
+	public void testBug544073_065() {
+		runConformTest(
+			new String[] {
+				"X.java",
+				"public class X {\n" + 
+				"	public int foo(int i) {\n" + 
+				"		@SuppressWarnings(\"preview\")\n" + 
+				"		int v =\n" + 
+				"			switch(switch(i) {\n" + 
+				"					case 0 -> { yield 2; }\n" + 
+				"					default -> { yield 3; }\n" + 
+				"				}) {\n" + 
+				"			case 0 -> { yield 0; }\n" + 
+				"			default -> { yield 1; }\n" + 
+				"		};\n" + 
+				"	return v == 1 ? v : 0;\n" + 
+				"	}\n" + 
+				"	public static void main(String[] argv) {\n" + 
+				"		System.out.println(new X().foo(0));\n" + 
+				"	}\n" + 
+				"}"
+		},
+		"1");
+	}
+	public void testBug544073_066() {
+		runConformTest(
+			new String[] {
+				"X.java",
+				"public class X {\n" +
+				"    @SuppressWarnings(\"preview\")\n" +
+				"	public int foo(int i) {\n" +
+				"    	int k = 10;\n" +
+				"    	switch (i) {\n" +
+				"    		case 0 -> { k = 0;}\n" +
+				"    		default -> k = -1;\n" +
+				"    	}\n" +
+				"        return k;\n" +
+				"    }\n" +
+				"    public static void main(String[] argv) {\n" +
+				"        System.out.println(new X().foo(0) == 0 ? \"Success\" : \"Failure\");\n" +
+				"    }\n" +
+				"\n" +
+				"}\n"
+		},
+		"Success");
+	}
+	public void testBug544073_067() {
+		runConformTest(
+			new String[] {
+				"X.java",
+				"public class X {\n" +
+				"	@SuppressWarnings(\"preview\")\n" +
+				"	public static void foo(Day day) {\n" +
+				"		switch (day) {\n" +
+				"		case MONDAY, FRIDAY -> System.out.println(Day.SUNDAY);\n" +
+				"		case TUESDAY                -> System.out.println(7);\n" +
+				"		case THURSDAY, SATURDAY     -> System.out.println(8);\n" +
+				"		case WEDNESDAY              -> System.out.println(9);\n" +
+				"		default -> {}\n" +
+				"		}     \n" +
+				"	}\n" +
+				"	public static void main(String[] args) {\n" +
+				"		X.foo(Day.WEDNESDAY);\n" +
+				"	}\n" +
+				"}\n" +
+				"\n" +
+				"enum Day {\n" +
+				"	MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;\n" +
+				"}\n"
+		},
+		"9");
+	}
+	public void testBug544073_068() {
+		runConformTest(
+			new String[] {
+				"X.java",
+				"public class X {\n"+
+				"	public static void foo (int i) {\n"+
+				"		int v = switch (i) {\n"+
+				"			case 60, 600: yield 6;\n"+
+				"			case 70: yield 7;\n"+
+				"			case 80: yield 8;\n"+
+				"			case 90, 900: yield 9;\n"+
+				"			default: yield 0;\n"+
+				"		};\n"+
+				"		System.out.println(v);\n"+
+				"	}\n"+
+				"	public static void main(String[] args) {\n"+
+				"		X.foo(10);\n"+
+				"	}\n"+
+				"}\n"
+		},
+		"0");
+	}
+	// see comment 12 in the bug 
+	public void testBug513766_01() {
+		Runner runner = new Runner();
+		runner.testFiles = new String[] {
+				"X.java",
+				"public class X {\n"+
+				"    @SuppressWarnings(\"preview\")\n"+
+				"    public void foo(int i) {\n"+
+				"    	if (switch(i) { default -> magic(); })\n"+
+				"            System.out.println(\"true\");\n"+
+				"        if (magic())\n"+
+				"            System.out.println(\"true, too\");\n"+
+				"    }\n"+
+				"    <T> T magic() { return null; }\n"+
+				"}\n",
+			};
+		runner.expectedCompilerLog =
+			"----------\n" + 
+			"1. ERROR in X.java (at line 4)\n" + 
+			"	if (switch(i) { default -> magic(); })\n" + 
+			"	    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Type mismatch: cannot convert from Object to boolean\n" + 
+			"----------\n" + 
+			"2. ERROR in X.java (at line 6)\n" + 
+			"	if (magic())\n" + 
+			"	    ^^^^^^^\n" + 
+			"Type mismatch: cannot convert from Object to boolean\n" + 
+			"----------\n";
+		runner.vmArguments = new String[] {"--enable-preview"};
+		runner.javacTestOptions = JavacHasABug.JavacBug8179483_switchExpression;
+		runner.runNegativeTest();
+	}
+	public void testBug544073_070() {
+		runNegativeTest(
+			new String[] {
+				"X.java",
+				"public class X {\n"+
+				"    @SuppressWarnings(\"preview\")\n"+
+				"	public static int foo(int i) throws MyException {\n"+
+				"    	int v = switch (i) {\n"+
+				"    		default -> throw new MyException();\n"+
+				"    	};\n"+
+				"        return v;\n"+
+				"    }\n"+
+				"    public static void main(String argv[]) {\n"+
+				"    	try {\n"+
+				"			System.out.println(X.foo(1));\n"+
+				"		} catch (MyException e) {\n"+
+				"			System.out.println(\"Exception thrown as expected\");\n"+
+				"		}\n"+
+				"	}\n"+
+				"}\n"+
+				"class MyException extends Exception {\n"+
+				"	private static final long serialVersionUID = 3461899582505930473L;	\n"+
+				"}\n"
+			},
+			"----------\n" + 
+			"1. ERROR in X.java (at line 4)\n" + 
+			"	int v = switch (i) {\n" + 
+			"    		default -> throw new MyException();\n" + 
+			"    	};\n" + 
+			"	        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"A switch expression should have at least one result expression\n" + 
+			"----------\n");
+	}
+	public void testBug544073_071() {
+		if (this.complianceLevel < ClassFileConstants.JDK12)
+			return;
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.WARNING);
+		String message = 
+				"----------\n" + 
+				"1. WARNING in X.java (at line 5)\n" + 
+				"	case \"ABC\", (false ? (String) \"c\" : (String) \"d\") : break;\n" + 
+				"	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"You are using a preview language feature that may or may not be supported in a future release\n" + 
+				"----------\n" + 
+				"2. WARNING in X.java (at line 5)\n" + 
+				"	case \"ABC\", (false ? (String) \"c\" : (String) \"d\") : break;\n" + 
+				"	                     ^^^^^^^^^^^^\n" + 
+				"Dead code\n" + 
+				"----------\n";
+		
+		this.runWarningTest(new String[] {
+				"X.java",
+				"public class X {\n" +
+				"  public static void main(String [] args) {\n" +
+				"  	 String arg = \"ABD\";\n" +
+				"    switch(arg) {\n" + 
+				"      case \"ABC\", (false ? (String) \"c\" : (String) \"d\") : break;\n" +
+				"	 }\n" +
+				"  }\n" +
+				"}\n"
+			},
+			message, 
+			options,
+			"-Xlint:preview");
+	}
+	public void testBug544073_072() {
+		if (this.complianceLevel < ClassFileConstants.JDK12)
+			return;
+		String message = 
+				"----------\n" + 
+				"1. WARNING in X.java (at line 5)\n" + 
+				"	case \"ABC\", (false ? (String) \"c\" : (String) \"d\") : break;\n" + 
+				"	                     ^^^^^^^^^^^^\n" + 
+				"Dead code\n" + 
+				"----------\n";
+		
+		this.runWarningTest(new String[] {
+				"X.java",
+				"public class X {\n" +
+				"  public static void main(String [] args) {\n" +
+				"  	 String arg = \"ABD\";\n" +
+				"    switch(arg) {\n" + 
+				"      case \"ABC\", (false ? (String) \"c\" : (String) \"d\") : break;\n" +
+				"	 }\n" +
+				"  }\n" +
+				"}\n"
+			},
+			message);
+	}
+	public void testBug544073_073() {
+		if (this.complianceLevel < ClassFileConstants.JDK1_8)
+			return;
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.DISABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.WARNING);
+		String message = 
+				"----------\n" + 
+				"1. ERROR in X.java (at line 5)\n" + 
+				"	case \"ABC\", (false ? (String) \"c\" : (String) \"d\") : break;\n" + 
+				"	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+				"Multi constant case is a preview feature and disabled by default. Use --enable-preview to enable\n" + 
+				"----------\n";
+		
+		this.runNegativeTest(new String[] {
+				"X.java",
+				"public class X {\n" +
+				"  public static void main(String [] args) {\n" +
+				"  	 String arg = \"ABD\";\n" +
+				"    switch(arg) {\n" + 
+				"      case \"ABC\", (false ? (String) \"c\" : (String) \"d\") : break;\n" +
+				"	 }\n" +
+				"  }\n" +
+				"}\n"
+			},
+			message,
+			null,
+			true,
+			new String[] { "--enable-preview"},
+			options);
+	}
+	public void testBug544073_074() {
+		runConformTest(
+			new String[] {
+				"X.java",
+				"enum X {\n"+
+				"    A, B; \n"+
+				"    @SuppressWarnings(\"preview\")\n"+
+				"    public static void main(String[] args) {\n"+
+				"         X myEnum = X.A;\n"+
+				"         int o;\n"+
+				"         switch(myEnum) {\n"+
+				"             case A -> o = 5;\n"+
+				"             case B -> o = 10;\n"+
+				"             default -> o = 0;\n"+
+				"         }\n"+
+				"         System.out.println(o);\n"+
+				"     }\n"+
+				"}\n"
+		},
+		"5");
+	}
+	public void testBug544073_075() {
+		runConformTest(
+			new String[] {
+				"X.java",
+				"enum X {\n"+
+				"    A, B;\n"+
+				"     \n"+
+				"    @SuppressWarnings(\"preview\")\n"+
+				"    public static void main(String[] args) {\n"+
+				"         X myEnum = X.A;\n"+
+				"         int o;\n"+
+				"         var f = switch(myEnum) {\n"+
+				"             case A -> o = 5;\n"+
+				"             case B -> o = 10;\n"+
+				"         };\n"+
+				"         System.out.println(o);\n"+
+				"     }\n"+
+				"} \n"
+		},
+		"5");
+	}
+	public void testBug544073_076() {
+		this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"\n"+
+				"public class X {\n"+
+				"\n"+
+				"	@SuppressWarnings(\"preview\")\n"+
+				"	public static int foo() {\n"+
+				"	for (int i = 0; i < 1; ++i) {\n"+
+				"			int k = switch (i) {\n"+
+				"				case 0:\n"+
+				"					yield 1;\n"+
+				"				default:\n"+
+				"					continue;\n"+
+				"			};\n"+
+				"			System.out.println(k);\n"+
+				"		}\n"+
+				"		return 1;\n"+
+				"	}\n"+
+				"	public static void main(String[] args) {\n"+
+				"		X.foo();\n"+
+				"	}\n"+
+				"}\n",
+			},
+			"----------\n" + 
+			"1. ERROR in X.java (at line 11)\n" + 
+			"	continue;\n" + 
+			"	^^^^^^^^^\n" + 
+			"'continue' or 'return' cannot be the last statement in a Switch expression case body\n" + 
+			"----------\n");
+	}
+	public void testBug544073_077() {
+		this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"\n"+
+				"public class X {\n"+
+				"\n"+
+				"	@SuppressWarnings(\"preview\")\n"+
+				"	public static int foo() {\n"+
+				"	for (int i = 0; i < 1; ++i) {\n"+
+				"			int k = switch (i) {\n"+
+				"				case 0:\n"+
+				"					yield 1;\n"+
+				"				default:\n"+
+				"					return 2;\n"+
+				"			};\n"+
+				"			System.out.println(k);\n"+
+				"		}\n"+
+				"		return 1;\n"+
+				"	}\n"+
+				"	public static void main(String[] args) {\n"+
+				"		X.foo();\n"+
+				"	}\n"+
+				"}\n",
+			},
+			"----------\n" + 
+			"1. ERROR in X.java (at line 11)\n" + 
+			"	return 2;\n" + 
+			"	^^^^^^^^^\n" + 
+			"'continue' or 'return' cannot be the last statement in a Switch expression case body\n" + 
+			"----------\n");
+	}
+	public void testBug544073_078() {
+		this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"public class X {\n" + 
+				"	void foo(Day day) {\n" + 
+				"		switch (day) {\n" + 
+				"		case SATURDAY, SUNDAY, SUNDAY:\n" + 
+				"			System.out.println(\"Weekend\");\n" + 
+				"		case MONDAY:\n" + 
+				"			System.out.println(\"Weekday\");\n" +
+				"		default: \n" + 
+				"		}\n" + 
+				"	}\n" + 
+				"}\n" + 
+				"\n" + 
+				"enum Day {\n" + 
+				"	MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;\n" + 
+				"}",
+			},
+			"----------\n" + 
+			"1. ERROR in X.java (at line 4)\n" + 
+			"	case SATURDAY, SUNDAY, SUNDAY:\n" + 
+			"	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Duplicate case\n" + 
+			"----------\n");
+	}
+	public void testBug544073_079() {
+		this.runNegativeTest(
+			new String[] {
+				"X.java",
+				"public class X {\n" + 
+				"	void foo(Day day) {\n" + 
+				"		switch (day) {\n" + 
+				"		case SATURDAY, SUNDAY, MONDAY:\n" + 
+				"			System.out.println(\"Weekend\");\n" + 
+				"		case MONDAY, SUNDAY:\n" + 
+				"			System.out.println(\"Weekday\");\n" +
+				"		default: \n" + 
+				"		}\n" + 
+				"	}\n" + 
+				"}\n" + 
+				"\n" + 
+				"enum Day {\n" + 
+				"	MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;\n" + 
+				"}",
+			},
+			"----------\n" + 
+			"1. ERROR in X.java (at line 4)\n" + 
+			"	case SATURDAY, SUNDAY, MONDAY:\n" + 
+			"	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
+			"Duplicate case\n" + 
+			"----------\n" + 
+			"2. ERROR in X.java (at line 6)\n" + 
+			"	case MONDAY, SUNDAY:\n" + 
+			"	^^^^^^^^^^^^^^^^^^^\n" + 
+			"Duplicate case\n" + 
+			"----------\n" + 
+			"3. ERROR in X.java (at line 6)\n" + 
+			"	case MONDAY, SUNDAY:\n" + 
+			"	^^^^^^^^^^^^^^^^^^^\n" + 
+			"Duplicate case\n" + 
+			"----------\n");
+	}
+	public void testBug544073_80() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"\n"+
+						"public class X {\n"+
+						"\n"+
+						"	public static int yield() {\n"+
+						"		return 1;\n"+
+						"	}\n"+
+						"	@SuppressWarnings(\"preview\")\n"+
+						"	public static int foo(int val) {\n"+
+						"		return bar (switch (val) {\n"+
+						"		case 1 : { yield val == 1 ? 2 : 3; }\n"+
+						"		default : { yield 2; }\n"+
+						"		});\n"+
+						"	}\n"+
+						"	public static int bar(int val) {\n"+
+						"		return val;\n"+
+						"	}\n"+
+						"	public static void main(String[] args) {\n"+
+						"		System.out.println(X.foo(1));\n"+
+						"	}\n"+
+						"}\n"
+				},
+				"2");
+	}
+	public void testBug544073_81() {
+		this.runNegativeTest(
+				new String[] {
+					"X.java",
+					"public class X {\n"+
+					"\n"+
+					"	@SuppressWarnings(\"preview\")\n"+
+					"	public static int foo(int val) {\n"+
+					"		int k = switch (val) {\n"+
+					"		case 1 : { break 1; }\n"+
+					"		default : { break 2; }\n"+
+					"		};\n"+
+					"		return k;\n"+
+					"	}\n"+
+					"	public static void main(String[] args) {\n"+
+					"		System.out.println(X.foo(1));\n"+
+					"	}\n"+
+					"}\n", 
+				},
+				"----------\n" + 
+				"1. ERROR in X.java (at line 6)\n" + 
+				"	case 1 : { break 1; }\n" + 
+				"	                 ^\n" + 
+				"Syntax error on token \"1\", delete this token\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 7)\n" + 
+				"	default : { break 2; }\n" + 
+				"	                  ^\n" + 
+				"Syntax error on token \"2\", delete this token\n" + 
+				"----------\n");
+	}
+	public void testBug547891_01() {
+		this.runNegativeTest(
+				new String[] {
+					"X.java",
+					"public class X {\n"+
+					"	public static void yield() {}\n"+
+					"	public static void main(String[] args) {\n"+
+					"		yield();\n"+
+					"		X.yield();\n"+
+					"	}\n"+
+					"}\n", 
+				},
+				"----------\n" + 
+				"1. ERROR in X.java (at line 4)\n" + 
+				"	yield();\n" + 
+				"	^^^^^^^\n" + 
+				"restricted identifier yield not allowed here - method calls need to be qualified\n" + 
+				"----------\n");
+	}
+	public void testBug547891_02() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.DISABLED);
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n"+
+				"	public static void yield() {}\n"+
+				"	public static void main(String[] args) {\n"+
+				"		yield();\n"+
+				"	}\n"+
+				"	public static void bar() {\n"+
+				"		Zork();\n"+
+				"	}\n"+
+				"}\n", 
+		};
+		String expectedProblemLog =
+				"----------\n" + 
+				"1. WARNING in X.java (at line 4)\n" + 
+				"	yield();\n" + 
+				"	^^^^^^^\n" + 
+				"yield may be disallowed in future - qualify method calls to avoid this message\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 7)\n" + 
+				"	Zork();\n" + 
+				"	^^^^\n" + 
+				"The method Zork() is undefined for the type X\n" + 
+				"----------\n";
+		this.runNegativeTest(
+				testFiles,
+				expectedProblemLog,
+				null,
+				true,
+				new String[] {""},
+				options);
+	}
+	public void testBug547891_03() {
+		this.runNegativeTest(
+				new String[] {
+				"X.java",
+				"public class X {\n"+
+				"	public static void main(String[] args) {\n"+
+				"		yield 1;\n"+
+				"	}\n"+
+				"}\n"+
+				"class yield {\n" +
+				"}\n", 
+				},
+				"----------\n" + 
+				"1. ERROR in X.java (at line 3)\n" + 
+				"	yield 1;\n" + 
+				"	^^^^^\n" + 
+				"Syntax error on token \"yield\", AssignmentOperator expected after this token\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 6)\n" + 
+				"	class yield {\n" + 
+				"	      ^^^^^\n" + 
+				"yield is a restricted identifier and cannot be used as type name\n" + 
+				"----------\n");
+	}
+	public void testBug547891_04() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.DISABLED);
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n"+
+				"	public static void main(String[] args) {\n"+
+				"		yield 1;\n"+
+				"		Zork();\n"+
+				"	}\n"+
+				"}\n"+
+				"class yield {\n" +
+				"}\n", 
+		};
+		String expectedProblemLog =
+				"----------\n" + 
+				"1. ERROR in X.java (at line 3)\n" + 
+				"	yield 1;\n" + 
+				"	^^^^^\n" + 
+				"Syntax error on token \"yield\", AssignmentOperator expected after this token\n" + 
+				"----------\n" + 
+				"2. WARNING in X.java (at line 7)\n" + 
+				"	class yield {\n" + 
+				"	      ^^^^^\n" + 
+				"yield may be a restricted identifier in future and may be disallowed as a type name\n" + 
+				"----------\n";
+		this.runNegativeTest(
+				testFiles,
+				expectedProblemLog,
+				null,
+				true,
+				new String[] {""},
+				options);
+	}
+	public void testBug547891_05() {
+		this.runNegativeTest(
+				new String[] {
+				"X.java",
+				"public class X {\n"+
+				"	public static void main(String[] args) {\n"+
+				"		yield y;\n"+
+				"	}\n"+
+				"}\n"+
+				"class yield {\n" +
+				"}\n", 
+				},
+				"----------\n" + 
+				"1. ERROR in X.java (at line 3)\n" + 
+				"	yield y;\n" + 
+				"	^^^^^\n" + 
+				"yield is a restricted identifier and cannot be used as type name\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 6)\n" + 
+				"	class yield {\n" + 
+				"	      ^^^^^\n" + 
+				"yield is a restricted identifier and cannot be used as type name\n" + 
+				"----------\n");
+	}
+	public void testBug547891_06() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.DISABLED);
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n"+
+				"	public static void main(String[] args) {\n"+
+				"		yield y;\n"+
+				"		Zork();\n"+
+				"	}\n"+
+				"}\n"+
+				"class yield {\n" +
+				"}\n", 
+		};
+		String expectedProblemLog =
+				"----------\n" + 
+				"1. WARNING in X.java (at line 3)\n" + 
+				"	yield y;\n" + 
+				"	^^^^^\n" + 
+				"yield may be a restricted identifier in future and may be disallowed as a type name\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 4)\n" + 
+				"	Zork();\n" + 
+				"	^^^^\n" + 
+				"The method Zork() is undefined for the type X\n" + 
+				"----------\n" + 
+				"3. WARNING in X.java (at line 7)\n" + 
+				"	class yield {\n" + 
+				"	      ^^^^^\n" + 
+				"yield may be a restricted identifier in future and may be disallowed as a type name\n" + 
+				"----------\n";
+		this.runNegativeTest(
+				testFiles,
+				expectedProblemLog,
+				null,
+				true,
+				new String[] {""},
+				options);
+	}
+	public void testBug547891_07() {
+		this.runNegativeTest(
+				new String[] {
+				"X.java",
+				"public class X {\n"+
+				"	public static void main(String[] args) {\n"+
+				"		yield y = null;\n"+
+				"	}\n"+
+				"}\n"+
+				"class yield {\n" +
+				"}\n", 
+				},
+				"----------\n" + 
+				"1. ERROR in X.java (at line 3)\n" + 
+				"	yield y = null;\n" + 
+				"	^^^^^\n" + 
+				"yield is a restricted identifier and cannot be used as type name\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 6)\n" + 
+				"	class yield {\n" + 
+				"	      ^^^^^\n" + 
+				"yield is a restricted identifier and cannot be used as type name\n" + 
+				"----------\n");
+	}
+	public void testBug547891_08() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.DISABLED);
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n"+
+				"	public static void main(String[] args) {\n"+
+				"		yield y = null;\n"+
+				"		Zork();\n"+
+				"	}\n"+
+				"}\n"+
+				"class yield {\n" +
+				"}\n", 
+		};
+		String expectedProblemLog =
+				"----------\n" + 
+				"1. WARNING in X.java (at line 3)\n" + 
+				"	yield y = null;\n" + 
+				"	^^^^^\n" + 
+				"yield may be a restricted identifier in future and may be disallowed as a type name\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 4)\n" + 
+				"	Zork();\n" + 
+				"	^^^^\n" + 
+				"The method Zork() is undefined for the type X\n" + 
+				"----------\n" + 
+				"3. WARNING in X.java (at line 7)\n" + 
+				"	class yield {\n" + 
+				"	      ^^^^^\n" + 
+				"yield may be a restricted identifier in future and may be disallowed as a type name\n" + 
+				"----------\n";
+		this.runNegativeTest(
+				testFiles,
+				expectedProblemLog,
+				null,
+				true,
+				new String[] {""},
+				options);
+	}	public void testBug547891_09() {
+		this.runNegativeTest(
+				new String[] {
+				"X.java",
+				"public class X {\n"+
+				"	public static void main(String[] args) {\n"+
+				"	}\n"+
+				"}\n"+
+				"class yield {\n" +
+				"}\n", 
+				},
+				"----------\n" + 
+				"1. ERROR in X.java (at line 5)\n" + 
+				"	class yield {\n" + 
+				"	      ^^^^^\n" + 
+				"yield is a restricted identifier and cannot be used as type name\n" + 
+				"----------\n");
+	}
+	public void testBug547891_10() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.DISABLED);
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n"+
+				"	public static void main(String[] args) {\n"+
+				"		Zork();\n"+
+				"	}\n"+
+				"}\n"+
+				"class yield {\n" +
+				"}\n", 
+		};
+		String expectedProblemLog =
+				"----------\n" + 
+				"1. ERROR in X.java (at line 3)\n" + 
+				"	Zork();\n" + 
+				"	^^^^\n" + 
+				"The method Zork() is undefined for the type X\n" + 
+				"----------\n" + 
+				"2. WARNING in X.java (at line 6)\n" + 
+				"	class yield {\n" + 
+				"	      ^^^^^\n" + 
+				"yield may be a restricted identifier in future and may be disallowed as a type name\n" + 
+				"----------\n";
+		this.runNegativeTest(
+				testFiles,
+				expectedProblemLog,
+				null,
+				true,
+				new String[] {""},
+				options);
+	}
+	public void testBug547891_11() {
+		this.runNegativeTest(
+				new String[] {
+				"X.java",
+				"public class X {\n"+
+				"	public static void main(String[] args) {\n"+
+				"		new yield();\n"+
+				"	}\n"+
+				"}\n"+
+				"class yield {\n" +
+				"}\n", 
+				},
+				"----------\n" + 
+				"1. ERROR in X.java (at line 3)\n" + 
+				"	new yield();\n" + 
+				"	    ^^^^^\n" + 
+				"yield is a restricted identifier and cannot be used as type name\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 6)\n" + 
+				"	class yield {\n" + 
+				"	      ^^^^^\n" + 
+				"yield is a restricted identifier and cannot be used as type name\n" + 
+				"----------\n");
+	}
+	public void testBug547891_12() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.DISABLED);
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n"+
+				"	public static void main(String[] args) {\n"+
+				"		new yield();\n"+
+				"		Zork();\n"+
+				"	}\n"+
+				"}\n"+
+				"class yield {\n" +
+				"}\n", 
+		};
+		String expectedProblemLog =
+				"----------\n" + 
+				"1. WARNING in X.java (at line 3)\n" + 
+				"	new yield();\n" + 
+				"	    ^^^^^\n" + 
+				"yield may be a restricted identifier in future and may be disallowed as a type name\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 4)\n" + 
+				"	Zork();\n" + 
+				"	^^^^\n" + 
+				"The method Zork() is undefined for the type X\n" + 
+				"----------\n" + 
+				"3. WARNING in X.java (at line 7)\n" + 
+				"	class yield {\n" + 
+				"	      ^^^^^\n" + 
+				"yield may be a restricted identifier in future and may be disallowed as a type name\n" + 
+				"----------\n";
+		this.runNegativeTest(
+				testFiles,
+				expectedProblemLog,
+				null,
+				true,
+				new String[] {""},
+				options);
+	}
+	public void testBug547891_13() {
+		this.runNegativeTest(
+				new String[] {
+				"X.java",
+				"public class X {\n"+
+				"	public static void main(String[] args) {\n"+
+				"		yield[] y;\n"+
+				"	}\n"+
+				"}\n"+
+				"class yield {\n" +
+				"}\n", 
+				},
+				"----------\n" + 
+				"1. ERROR in X.java (at line 3)\n" + 
+				"	yield[] y;\n" + 
+				"	^^^^^^^\n" + 
+				"yield is a restricted identifier and cannot be used as type name\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 6)\n" + 
+				"	class yield {\n" + 
+				"	      ^^^^^\n" + 
+				"yield is a restricted identifier and cannot be used as type name\n" + 
+				"----------\n");
+	}
+	public void testBug547891_14() {
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.DISABLED);
+		String[] testFiles = new String[] {
+				"X.java",
+				"public class X {\n"+
+				"	public static void main(String[] args) {\n"+
+				"		yield[] y;\n"+
+				"		Zork();\n"+
+				"	}\n"+
+				"}\n"+
+				"class yield {\n" +
+				"}\n", 
+		};
+		String expectedProblemLog =
+				"----------\n" + 
+				"1. WARNING in X.java (at line 3)\n" + 
+				"	yield[] y;\n" + 
+				"	^^^^^^^\n" + 
+				"yield may be a restricted identifier in future and may be disallowed as a type name\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 4)\n" + 
+				"	Zork();\n" + 
+				"	^^^^\n" + 
+				"The method Zork() is undefined for the type X\n" + 
+				"----------\n" + 
+				"3. WARNING in X.java (at line 7)\n" + 
+				"	class yield {\n" + 
+				"	      ^^^^^\n" + 
+				"yield may be a restricted identifier in future and may be disallowed as a type name\n" + 
+				"----------\n";
+		this.runNegativeTest(
+				testFiles,
+				expectedProblemLog,
+				null,
+				true,
+				new String[] {""},
+				options);
+	}
+	public void testBug547891_15() {
+		if (this.complianceLevel < ClassFileConstants.JDK12)
+			return;
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.WARNING);
+		String message = 
+				"----------\n" + 
+				"1. ERROR in X.java (at line 6)\n" + 
+				"	case 1 -> yield();\n" + 
+				"	          ^^^^^^^\n" + 
+				"restricted identifier yield not allowed here - method calls need to be qualified\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 8)\n" + 
+				"	case 3 -> {yield yield();}\n" + 
+				"	                 ^^^^^^^\n" + 
+				"restricted identifier yield not allowed here - method calls need to be qualified\n" + 
+				"----------\n" + 
+				"3. ERROR in X.java (at line 10)\n" + 
+				"	default -> { yield yield();}\n" + 
+				"	                   ^^^^^^^\n" + 
+				"restricted identifier yield not allowed here - method calls need to be qualified\n" + 
+				"----------\n";
+		
+		this.runNegativeTest(new String[] {
+				"X.java",
+				"public class X {\n"+
+				"\n"+
+				"	@SuppressWarnings(\"preview\")\n"+
+				"	public static int foo(int i) {\n"+
+				"		int r = switch(i) {\n"+
+				"			case 1 -> yield();\n"+
+				"			case 2 -> X.yield();\n"+
+				"			case 3 -> {yield yield();}\n"+
+				"			case 4 -> {yield X.yield();}\n"+
+				"			default -> { yield yield();}\n"+
+				"		};\n"+
+				"		return r;\n"+
+				"	}\n"+
+				"	public static int yield() {\n"+
+				"		return 0;\n"+
+				"	}\n"+
+				"	public static void main(String[] args) {\n"+
+				"		System.out.println(X.foo(0));\n"+
+				"	}\n"+
+				"}\n"
+			},
+			message,
+			null,
+			true,
+			new String[] { "--enable-preview"},
+			options);
+	}
+	public void testBug547891_16() {
+		if (this.complianceLevel < ClassFileConstants.JDK12)
+			return;
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.WARNING);
+		String message = 
+				"----------\n" + 
+				"1. ERROR in X.java (at line 9)\n" + 
+				"	case 3 -> {yield yield();}\n" + 
+				"	                 ^^^^^^^\n" + 
+				"restricted identifier yield not allowed here - method calls need to be qualified\n" + 
+				"----------\n" + 
+				"2. ERROR in X.java (at line 11)\n" + 
+				"	default -> { yield yield();}\n" + 
+				"	                   ^^^^^^^\n" + 
+				"restricted identifier yield not allowed here - method calls need to be qualified\n" + 
+				"----------\n";
+		
+		this.runNegativeTest(new String[] {
+				"X.java",
+				"public class X {\n"+
+				"\n"+
+				"	@SuppressWarnings(\"preview\")\n"+
+				"	public  int foo(int i) {\n"+
+				"		X x = new X();\n"+
+				"		int r = switch(i) {\n"+
+				"			case 1 -> this.yield();\n"+
+				"			case 2 -> x.new Y().yield();\n"+
+				"			case 3 -> {yield yield();}\n"+
+				"			case 4 -> {yield new X().yield() + x.new Y().yield();}\n"+
+				"			default -> { yield yield();}\n"+
+				"		};\n"+
+				"		return r;\n"+
+				"	}\n"+
+				"	public  int yield() {\n"+
+				"		return 0;\n"+
+				"	}\n"+
+				"	class Y {\n"+
+				"		public  int yield() {\n"+
+				"			return 0;\n"+
+				"		}	\n"+
+				"	}\n"+
+				"	public static void main(String[] args) {\n"+
+				"		System.out.println(new X().foo(0));\n"+
+				"	}\n"+
+				"}\n"
+			},
+			message,
+			null,
+			true,
+			new String[] { "--enable-preview"},
+			options);
+	}
+	public void testBug547891_17() {
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n"+
+					"\n"+
+					"	@SuppressWarnings(\"preview\")\n"+
+					"	public  static int foo(int i) {\n"+
+					"		int yield = 100;\n"+
+					"		int r = switch(i) {\n"+
+					"			default -> yield - 1;\n"+
+					"		};\n"+
+					"		return r;\n"+
+					"	}\n"+
+					"	public  int yield() {\n"+
+					"		return 0;\n"+
+					"	}\n"+
+					"	public static void main(String[] args) {\n"+
+					"		System.out.println(X.foo(0));\n"+
+					"	}\n"+
+					"}"
+			},
+			"99");
+	}
+	public void testBug547891_18() {
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n"+
+					"\n"+
+					"	@SuppressWarnings(\"preview\")\n"+
+					"	public  static int foo(int i) {\n"+
+					"		int yield = 100;\n"+
+					"		int r = switch(i) {\n"+
+					"			default -> {yield - 1;}\n"+
+					"		};\n"+
+					"		return r;\n"+
+					"	}\n"+
+					"	public  int yield() {\n"+
+					"		return 0;\n"+
+					"	}\n"+
+					"	public static void main(String[] args) {\n"+
+					"		System.out.println(X.foo(0));\n"+
+					"	}\n"+
+					"}"
+			},
+			"-1");
+	}
+	public void testBug547891_19() {
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n"+
+					"   static int yield = 100;\n"+
+					"\n"+
+					"	@SuppressWarnings(\"preview\")\n"+
+					"	public  static int foo(int i) {\n"+
+					"		int r = switch(i) {\n"+
+					"			default -> yield - 1;\n"+
+					"		};\n"+
+					"		return r;\n"+
+					"	}\n"+
+					"	public  int yield() {\n"+
+					"		return 0;\n"+
+					"	}\n"+
+					"	public static void main(String[] args) {\n"+
+					"		System.out.println(X.foo(0));\n"+
+					"	}\n"+
+					"}"
+			},
+			"99");
+	}
+	public void testBug547891_20() {
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n"+
+					"   static int yield = 100;\n"+
+					"\n"+
+					"	@SuppressWarnings(\"preview\")\n"+
+					"	public  static int foo(int i) {\n"+
+					"		int r = switch(i) {\n"+
+					"			default -> {yield - 1;}\n"+
+					"		};\n"+
+					"		return r;\n"+
+					"	}\n"+
+					"	public  int yield() {\n"+
+					"		return 0;\n"+
+					"	}\n"+
+					"	public static void main(String[] args) {\n"+
+					"		System.out.println(X.foo(0));\n"+
+					"	}\n"+
+					"}"
+			},
+			"-1");
+	}
+	public void testBug547891_21() {
+		if (this.complianceLevel < ClassFileConstants.JDK12)
+			return;
+		Map<String, String> options = getCompilerOptions();
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.WARNING);
+		String message = 
+				"----------\n" + 
+				"1. ERROR in X.java (at line 7)\n" + 
+				"	default -> yield - 1;\n" + 
+				"	           ^^^^^\n" + 
+				"Cannot make a static reference to the non-static field yield\n" + 
+				"----------\n";
+		
+		this.runNegativeTest(new String[] {
+				"X.java",
+				"public class X {\n"+
+				"   int yield = 100;\n"+
+				"\n"+
+				"	@SuppressWarnings(\"preview\")\n"+
+				"	public  static int foo(int i) {\n"+
+				"		int r = switch(i) {\n"+
+				"			default -> yield - 1;\n"+
+				"		};\n"+
+				"		return r;\n"+
+				"	}\n"+
+				"	public  int yield() {\n"+
+				"		return 0;\n"+
+				"	}\n"+
+				"	public static void main(String[] args) {\n"+
+				"		System.out.println(X.foo(0));\n"+
+				"	}\n"+
+				"}"
+			},
+			message,
+			null,
+			true,
+			new String[] { "--enable-preview"},
+			options);
+	}
+	public void testBug547891_22() {
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n"+
+					"\n"+
+					"	static int yield = 100;\n"+
+					"	@SuppressWarnings(\"preview\")\n"+
+					"	public  static int foo(int i) {\n"+
+					"	int r = switch(i) {\n"+
+					"			default -> X.yield();\n"+
+					"		};\n"+
+					"		return r;\n"+
+					"	}\n"+
+					"	public static  int yield() {\n"+
+					"		yield: while (X.yield == 100) {\n"+
+					"			yield = 256;\n"+
+					"			break yield;\n"+
+					"		}\n"+
+					"		return yield;\n"+
+					"	}\n"+
+					"	public static void main(String[] args) {\n"+
+					"		System.out.println(X.foo(0));\n"+
+					"	}\n"+
+					"}\n"
+			},
+			"256");
+	}
+	public void testBug547891_23() {
+		runConformTest(
+			new String[] {
+					"X.java",
+					"public class X {\n"+
+					"\n"+
+					"	static int yield =100 ;\n"+
+					"	@SuppressWarnings(\"preview\")\n"+
+					"	public  static int foo(int i) {\n"+
+					"	int r = switch(i) {\n"+
+					"			default -> X.yield();\n"+
+					"		};\n"+
+					"		return r;\n"+
+					"	}\n"+
+					"	public static  int yield() {\n"+
+					"		int yield = 500 ;\n"+
+					"		yield: while (yield == 500) {\n"+
+					"			yield = 1024;\n"+
+					"			break yield;\n"+
+					"		}\n"+
+					"		return yield;\n"+
+					"	}\n"+
+					"	public static void main(String[] args) {\n"+
+					"		System.out.println(X.foo(0));\n"+
+					"	}\n"+
+					"}\n"
+			},
+			"1024");
+	}
+	public void testBug547891_24() {
+		runConformTest(
+			new String[] {
+				"X.java",
+				"public class X {\n"+
+				"\n"+
+				"	@SuppressWarnings(\"preview\")\n"+
+				"	public  static int foo(int i) {\n"+
+				"		int yield = 100;\n"+
+				"		int r = switch(i) {\n"+
+				"			default -> {yield yield + 1;}\n"+
+				"		};\n"+
+				"		return r;\n"+
+				"	}\n"+
+				"	public static void main(String[] args) {\n"+
+				"		System.out.println(X.foo(0));\n"+
+				"	}\n"+
+				"}"
+			},
+			"101");
+	}
+	public void testBug547891_25() {
+		runConformTest(
+			new String[] {
+				"X.java",
+				"public class X {\n"+
+				"\n"+
+				"	@SuppressWarnings(\"preview\")\n"+
+				"	public  static int foo(int i) {\n"+
+				"		int yield = 100;\n"+
+				"		int r = switch(i) {\n"+
+				"			default -> {yield yield + yield + yield * yield;}\n"+
+				"		};\n"+
+				"		return r;\n"+
+				"	}\n"+
+				"	public static void main(String[] args) {\n"+
+				"		System.out.println(X.foo(0));\n"+
+				"	}\n"+
+				"}"
+			},
+			"10200");
+	}
+	public void testBug547891_26() {
+		runConformTest(
+			new String[] {
+				"X.java",
+				"public class X {\n"+
+				"\n"+
+				"	@SuppressWarnings(\"preview\")\n"+
+				"	public  static int foo(int i) {\n"+
+				"		int yield = 100;\n"+
+				"		int r = switch(i) {\n"+
+				"			default -> {yield + yield + yield + yield * yield;}\n"+
+				"		};\n"+
+				"		return r;\n"+
+				"	}\n"+
+				"	public static void main(String[] args) {\n"+
+				"		System.out.println(X.foo(0));\n"+
+				"	}\n"+
+				"}"
+			},
+			"10200");
+	}
+	public void testBug547891_27() {
+		runConformTest(
+			new String[] {
+				"X.java",
+				"public class X {\n"+
+				"\n"+
+				"	@SuppressWarnings(\"preview\")\n"+
+				"	public  static int foo(int i) {\n"+
+				"		int yield = 100;\n"+
+				"		int r = switch(i) {\n"+
+				"			default ->0 + yield + 10;\n"+
+				"		};\n"+
+				"		return r;\n"+
+				"	}\n"+
+				"	public static void main(String[] args) {\n"+
+				"		System.out.println(X.foo(0));\n"+
+				"	}\n"+
+				"}"
+			},
+			"110");
+	}
+	public void testBug547891_28() {
+		runConformTest(
+			new String[] {
+				"X.java",
+				"public class X {\n"+
+				"	@SuppressWarnings(\"preview\")\n"+
+				"	public  static int foo(int i) {\n"+
+				"		int yield = 100;\n"+
+				"		int r = switch(i) {\n"+
+				"			 case 0 : yield 100;\n"+
+				"			 case 1 : yield yield;\n"+
+				"			 default: yield 0;\n"+
+				"		};\n"+
+				"		return r;\n"+
+				"	}\n"+
+				"	public static void main(String[] args) {\n"+
+				"		System.out.println(X.foo(0));\n"+
+				"	}\n"+
+				"}"
+			},
+			"100");
+	}
+	public void testBug547891_29() {
+		runConformTest(
+			new String[] {
+				"X.java",
+				"public class X {\n"+
+				"	@SuppressWarnings(\"preview\")\n"+
+				"	public  static int foo(int i) {\n"+
+				"		int yield = 100;\n"+
+				"		int r = switch(i) {\n"+
+				"			 case 0 : yield 100;\n"+
+				"			 case 1 : yield yield;\n"+
+				"			 default: yield 0;\n"+
+				"		};\n"+
+				"		return r > 100 ? yield + 1 : yield + 200;\n"+
+				"	}\n"+
+				"	public static void main(String[] args) {\n"+
+				"		System.out.println(X.foo(0));\n"+
+				"	}\n"+
+				"}"
+			},
+			"300");
+	}
+	public void testBug550354_01() {
+		runConformTest(
+			new String[] {
+				"X.java",
+				"public class X {\n"+
+				"  @SuppressWarnings({ \"preview\" })\n"+
+				"  public static int foo(int i) throws Exception {\n"+
+				"    int v = switch (i) {\n"+
+				"        default ->  {if (i > 0) yield 1;\n"+
+				"        else yield 2;}\n"+
+				"    };\n"+
+				"    return v;\n"+
+				"  }\n"+
+				"  public static void main(String argv[]) throws Exception {\n"+
+				"    System.out.println(X.foo(1));\n"+
+				"  }\n"+
+				"}"
+			},
+			"1");
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchTest.java
index 004768e..cfe6b0d 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchTest.java
@@ -3114,7 +3114,7 @@
 			"1. ERROR in X.java (at line 5)\n" + 
 			"	case \"ABC\", (false ? (String) \"c\" : (String) \"d\") : break;\n" + 
 			"	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
-			"The preview feature Multi constant case is only available with source level 12 and above\n" + 
+			"The preview feature Multi constant case is only available with source level 13 and above\n" + 
 			"----------\n";
 	
 	this.runNegativeTest(new String[] {
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/TestAll.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/TestAll.java
index 644b96e..a8957c7 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/TestAll.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/TestAll.java
@@ -189,6 +189,11 @@
 	 since_12.add(SwitchExpressionTest.class);
 	 since_12.add(Unicode11Test.class);
 
+		// add 13 specific test here (check duplicates)
+	 ArrayList since_13 = new ArrayList();
+	 since_13.add(SwitchExpressionsYieldTest.class);
+	 since_13.add(Unicode12_1Test.class);
+
 	// Build final test suite
 	TestSuite all = new TestSuite(TestAll.class.getName());
 	all.addTest(new TestSuite(StandAloneASTParserTest.class));
@@ -300,6 +305,21 @@
 		TestCase.resetForgottenFilters(tests_12);
 		all.addTest(AbstractCompilerTest.buildComplianceTestSuite(ClassFileConstants.getComplianceLevelForJavaVersion(ClassFileConstants.MAJOR_VERSION_12), tests_12));
 	}
+	if ((possibleComplianceLevels & AbstractCompilerTest.F_13) != 0) {
+		ArrayList tests_13 = (ArrayList)standardTests.clone();
+		tests_13.addAll(since_1_4);
+		tests_13.addAll(since_1_5);
+		tests_13.addAll(since_1_6);
+		tests_13.addAll(since_1_7);
+		tests_13.addAll(since_1_8);
+		tests_13.addAll(since_9);
+		tests_13.addAll(since_10);
+		tests_13.addAll(since_11);
+		tests_13.addAll(since_12);
+		tests_13.addAll(since_13);
+		TestCase.resetForgottenFilters(tests_13);
+		all.addTest(AbstractCompilerTest.buildComplianceTestSuite(ClassFileConstants.getComplianceLevelForJavaVersion(ClassFileConstants.MAJOR_VERSION_13), tests_13));
+	}
 	all.addTest(new TestSuite(Jsr14Test.class));
 	return all;
 }
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/Unicode12_1Test.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/Unicode12_1Test.java
new file mode 100644
index 0000000..11f4a39
--- /dev/null
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/Unicode12_1Test.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2019 IBM Corporation and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.core.tests.compiler.regression;
+
+import java.util.Map;
+
+import junit.framework.Test;
+
+import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
+
+public class Unicode12_1Test extends AbstractRegressionTest {
+public Unicode12_1Test(String name) {
+	super(name);
+}
+public static Test suite() {
+	return buildMinimalComplianceTestSuite(testClass(), F_13);
+}
+public void test1() {
+	Map<String, String> options = getCompilerOptions();
+	options.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+	this.runConformTest(
+		new String[] {
+			"X.java",
+			"public class X {\n" + 
+			"		public int a\\uA7BA; // new unicode character in unicode 12.0 \n" + 
+			"}",
+		},
+		"",
+		options);
+}
+public void test2() {
+	Map<String, String> options = getCompilerOptions();
+	options.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_12);
+	this.runNegativeTest(
+		new String[] {
+			"X.java",
+			"public class X {\n" + 
+			"		public int a\\uA7BA; // new unicode character in unicode 12.0 \n" + 
+			"}",
+		},
+		"----------\n" + 
+		"1. ERROR in X.java (at line 2)\n" + 
+		"	public int a\\uA7BA; // new unicode character in unicode 12.0 \n" + 
+		"	            ^^^^^^\n" + 
+		"Syntax error on token \"Invalid Character\", delete this token\n" + 
+		"----------\n",
+		null,
+		true,
+		options);
+}
+public static Class<Unicode12_1Test> testClass() {
+	return Unicode12_1Test.class;
+}
+}
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/dom/StandAloneASTParserTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/dom/StandAloneASTParserTest.java
index 170bb63..9fb808e 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/dom/StandAloneASTParserTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/dom/StandAloneASTParserTest.java
@@ -8,6 +8,10 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Stephan Herrmann - Contribution for
@@ -32,7 +36,6 @@
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.Block;
-import org.eclipse.jdt.core.dom.BreakStatement;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.ExpressionStatement;
@@ -55,6 +58,7 @@
 import org.eclipse.jdt.core.dom.TypeDeclaration;
 import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 import org.eclipse.jdt.core.dom.VariableDeclarationStatement;
+import org.eclipse.jdt.core.dom.YieldStatement;
 import org.eclipse.jdt.core.tests.compiler.regression.AbstractRegressionTest;
 import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
 
@@ -64,7 +68,7 @@
 		super(name);
 	}
 	
-	private static final int AST_JLS_LATEST = AST.JLS12;
+	private static final int AST_JLS_LATEST = AST.JLS13;
 
 	public ASTNode runConversion(
 			int astLevel,
@@ -1591,7 +1595,7 @@
 					super.acceptAST(sourceFilePath, ast);
 				}
 			};
-			ASTParser parser = ASTParser.newParser(AST.JLS11);
+			ASTParser parser = ASTParser.newParser(AST_JLS_LATEST);
 			parser.setResolveBindings(true);
 			parser.setStatementsRecovery(true);
 			parser.setBindingsRecovery(true);
@@ -1622,7 +1626,7 @@
 				"       for (var i = 0; i < 10; ++i) {}\n" +
 				"	}\n" +
 				"}";
-	    ASTParser parser = ASTParser.newParser(AST.JLS11);
+	    ASTParser parser = ASTParser.newParser(AST_JLS_LATEST);
 	    parser.setSource(contents.toCharArray());
 		parser.setStatementsRecovery(true);
 		parser.setBindingsRecovery(true);
@@ -1758,6 +1762,7 @@
 			SimpleName simpleName = (SimpleName) name;
 			assertFalse("A var", simpleName.isVar());
 	}
+	@Deprecated
 	public void testBug545383_01() throws JavaModelException {
 		String contents =
 				"class X {\n"+
@@ -1785,14 +1790,44 @@
 		ASTNode node = parser.createAST(null);
 		assertTrue("Should be a compilation unit", node instanceof CompilationUnit);
 		CompilationUnit cu = (CompilationUnit) node;
+		IProblem[] problems = cu.getProblems();
+		assertTrue(problems.length > 0);
+		assertTrue(problems[0].toString().contains("preview"));
+	}	
+	public void testBug547900_01() throws JavaModelException {
+		String contents =
+				"class X {\n"+
+				"	public static int foo(int i) {\n"+
+				"		int result = switch (i) {\n"+
+				"		case 1 -> {yield 5;}\n"+
+				"		default -> 0;\n"+
+				"		};\n"+
+				"		return result;\n"+
+				"	}\n"+
+				"}\n";
+
+		ASTParser parser = ASTParser.newParser(AST_JLS_LATEST);
+		parser.setSource(contents.toCharArray());
+		parser.setEnvironment(null, null, null, true);
+		parser.setResolveBindings(false);
+		Map<String, String> options = getCompilerOptions();
+		options.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_13);
+		options.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_13);
+		options.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_13);
+		options.put(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		options.put(CompilerOptions.OPTION_ReportPreviewFeatures, CompilerOptions.IGNORE);
+		parser.setCompilerOptions(options);
+	
+		ASTNode node = parser.createAST(null);
+		assertTrue("Should be a compilation unit", node instanceof CompilationUnit);
+		CompilationUnit cu = (CompilationUnit) node;
 		TypeDeclaration typeDeclaration = (TypeDeclaration) cu.types().get(0);
 		MethodDeclaration[] methods = typeDeclaration.getMethods();
 		MethodDeclaration methodDeclaration = methods[0];
 		VariableDeclarationStatement stmt = (VariableDeclarationStatement) methodDeclaration.getBody().statements().get(0);
 		VariableDeclarationFragment fragment = (VariableDeclarationFragment) stmt.fragments().get(0);
 		SwitchExpression se = (SwitchExpression) fragment.getInitializer();
-		BreakStatement breakStatement = (BreakStatement) ((Block)se.statements().get(1)).statements().get(0);
-		assertNull("Unexpected Non null label", breakStatement.getLabel());
-		assertNotNull("Expression null", breakStatement.getExpression());
+		YieldStatement yieldStatement = (YieldStatement) ((Block)se.statements().get(1)).statements().get(0);
+		assertNotNull("Expression null", yieldStatement.getExpression());
 	}	
 }
\ No newline at end of file
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/runtime/StandardVMLauncher.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/runtime/StandardVMLauncher.java
index 80eecdc..de7fef3 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/runtime/StandardVMLauncher.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/runtime/StandardVMLauncher.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2016 IBM Corporation and others.
+ * Copyright (c) 2000, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -8,6 +8,10 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -112,8 +116,10 @@
 
 	long vmVersion = Util.getMajorMinorVMVersion();
 	if (vmVersion != -1) {
-		if (vmVersion >= ClassFileConstants.JDK1_6) {
+		if (vmVersion < ClassFileConstants.JDK13) { // FailOverToOldVerifier deprecated from 13
 			commandLine.addElement("-XX:-FailOverToOldVerifier");
+		} 	
+		if (vmVersion >= ClassFileConstants.JDK1_6) {
 			commandLine.addElement("-Xverify:all");
 		}
 		if (vmVersion >= ClassFileConstants.JDK1_7) {
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/util/AbstractCompilerTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/util/AbstractCompilerTest.java
index ace9a6a..e64a387 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/util/AbstractCompilerTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/util/AbstractCompilerTest.java
@@ -44,6 +44,7 @@
 	public static final int F_10  = 0x80;
 	public static final int F_11  = 0x100;
 	public static final int F_12  = 0x200;
+	public static final int F_13  = 0x400;
 
 	public static final boolean RUN_JAVAC = CompilerOptions.ENABLED.equals(System.getProperty("run.javac"));
 	private static final int UNINITIALIZED = -1;
@@ -55,6 +56,7 @@
 	protected static boolean isJRE9Plus = false; // Stop gap, so tests need not be run at 9, but some tests can be adjusted for JRE 9
 	protected static boolean isJRE11Plus = false;
 	protected static boolean isJRE12Plus = false;
+	protected static boolean isJRE13Plus = false;
 	protected static boolean reflectNestedClassUseDollar;
 
 	/**
@@ -102,6 +104,9 @@
 		if ((complianceLevels & AbstractCompilerTest.F_12) != 0) {
 			suite.addTest(buildUniqueComplianceTestSuite(evaluationTestClass, ClassFileConstants.getComplianceLevelForJavaVersion(ClassFileConstants.MAJOR_VERSION_12)));
 		}
+		if ((complianceLevels & AbstractCompilerTest.F_13) != 0) {
+			suite.addTest(buildUniqueComplianceTestSuite(evaluationTestClass, ClassFileConstants.getComplianceLevelForJavaVersion(ClassFileConstants.MAJOR_VERSION_13)));
+		}
 	}
 
 	/**
@@ -147,6 +152,9 @@
 		if ((complianceLevels & AbstractCompilerTest.F_12) != 0) {
 			suite.addTest(buildComplianceTestSuite(testClasses, setupClass, ClassFileConstants.getComplianceLevelForJavaVersion(ClassFileConstants.MAJOR_VERSION_12)));
 		}
+		if ((complianceLevels & AbstractCompilerTest.F_13) != 0) {
+			suite.addTest(buildComplianceTestSuite(testClasses, setupClass, ClassFileConstants.getComplianceLevelForJavaVersion(ClassFileConstants.MAJOR_VERSION_13)));
+		}
 		return suite;
 	}
 
@@ -154,8 +162,9 @@
          possibleComplianceLevels = complianceLevel;
          int lessthan9 = F_1_3 | F_1_4 | F_1_5 | F_1_6 | F_1_7 | F_1_8;
          isJRE9Plus = !isJRELevel(lessthan9);
-         isJRE11Plus = isJRELevel(F_11);
-         isJRE12Plus = isJRELevel(F_12);
+         isJRE13Plus = isJRELevel(F_13);
+         isJRE12Plus = isJRE13Plus || isJRELevel(F_12);
+         isJRE11Plus = isJRE12Plus || isJRELevel(F_11);
 	 }
 
 	/**
@@ -306,6 +315,14 @@
 				suite.addTest(buildUniqueComplianceTestSuite(evaluationTestClass, ClassFileConstants.getComplianceLevelForJavaVersion(ClassFileConstants.MAJOR_VERSION_12)));
 			}
 		}
+		int level_13 = complianceLevels & AbstractCompilerTest.F_13;
+		if (level_13 != 0) {
+			if (level_13 < minimalCompliance) {
+				System.err.println("Cannot run "+evaluationTestClass.getName()+" at compliance 13!");
+			} else {
+				suite.addTest(buildUniqueComplianceTestSuite(evaluationTestClass, ClassFileConstants.getComplianceLevelForJavaVersion(ClassFileConstants.MAJOR_VERSION_13)));
+			}
+		}
 		return suite;
 	}
 
@@ -364,6 +381,9 @@
 	 */
 	public static long highestComplianceLevels() {
 		int complianceLevels = AbstractCompilerTest.getPossibleComplianceLevels();
+		if ((complianceLevels & AbstractCompilerTest.F_13) != 0) {
+			return ClassFileConstants.getComplianceLevelForJavaVersion(ClassFileConstants.MAJOR_VERSION_13);
+		}
 		if ((complianceLevels & AbstractCompilerTest.F_12) != 0) {
 			return ClassFileConstants.getComplianceLevelForJavaVersion(ClassFileConstants.MAJOR_VERSION_12);
 		}
@@ -420,7 +440,8 @@
 	public static int getPossibleComplianceLevels() {
 		if (possibleComplianceLevels == UNINITIALIZED) {
 			String specVersion = System.getProperty("java.specification.version");
-			isJRE12Plus = CompilerOptions.VERSION_12.equals(specVersion);
+			isJRE13Plus = CompilerOptions.VERSION_13.equals(specVersion);
+			isJRE12Plus = isJRE13Plus || CompilerOptions.VERSION_12.equals(specVersion);
 			isJRE11Plus = isJRE12Plus || CompilerOptions.VERSION_11.equals(specVersion);
 			isJRE9Plus = isJRE11Plus || CompilerOptions.VERSION_9.equals(specVersion)
 					||	CompilerOptions.VERSION_10.equals(specVersion);
@@ -449,6 +470,8 @@
 						possibleComplianceLevels |= F_11;
 					} else if (CompilerOptions.VERSION_12.equals(compliance)) {
 						possibleComplianceLevels |= F_12;
+					} else if (CompilerOptions.VERSION_13.equals(compliance)) {
+						possibleComplianceLevels |= F_13;
 					} else {
 						System.out.println("Ignoring invalid compliance (" + compliance + ")");
 						System.out.print("Use one of ");
@@ -462,7 +485,8 @@
 						System.out.print(CompilerOptions.VERSION_9 + ", ");
 						System.out.print(CompilerOptions.VERSION_10 + ", ");
 						System.out.print(CompilerOptions.VERSION_11 + ", ");
-						System.out.println(CompilerOptions.VERSION_12);
+						System.out.print(CompilerOptions.VERSION_12 + ", ");
+						System.out.println(CompilerOptions.VERSION_13);
 					}
 				}
 				if (possibleComplianceLevels == 0) {
@@ -512,6 +536,10 @@
 					if (canRun12) {
 						possibleComplianceLevels |= F_12;
 					}
+					boolean canRun13 = canRun12 && !CompilerOptions.VERSION_12.equals(specVersion);
+					if (canRun13) {
+						possibleComplianceLevels |= F_13;
+					}
 				} else if ("1.0".equals(specVersion)
 							|| CompilerOptions.VERSION_1_1.equals(specVersion)
 							|| CompilerOptions.VERSION_1_2.equals(specVersion)
@@ -534,6 +562,9 @@
 											possibleComplianceLevels |= F_11;
 											if (!CompilerOptions.VERSION_11.equals(specVersion)) {
 												possibleComplianceLevels |= F_12;
+												if (!CompilerOptions.VERSION_12.equals(specVersion)) {
+													possibleComplianceLevels |= F_13;
+												}
 											}
 										}
 									}
@@ -709,7 +740,7 @@
 	}
 
 	protected static String getVersionString(long compliance) {
-		String version = "version 11 : 55.0";
+		String version = "version 13 : 57.0";
 		if (compliance < ClassFileConstants.JDK9) return "version 1.8 : 52.0";
 		if (compliance == ClassFileConstants.JDK9) return "version 9 : 53.0";
 		if (compliance == ClassFileConstants.JDK10) return "version 10 : 54.0";
@@ -718,7 +749,7 @@
 			int major = Integer.parseInt(ver) + ClassFileConstants.MAJOR_VERSION_0;
 			return "version " + ver + " : " + major + ".0";
 		}
-		if (compliance >= ClassFileConstants.getComplianceLevelForJavaVersion(ClassFileConstants.MAJOR_VERSION_11)) return version; // keep this stmt for search for next bump up
+		if (compliance >= ClassFileConstants.getComplianceLevelForJavaVersion(ClassFileConstants.MAJOR_VERSION_13)) return version; // keep this stmt for search for next bump up
 		return version;
 	}
 
diff --git a/org.eclipse.jdt.core.tests.model/JCL/jclMin13.jar b/org.eclipse.jdt.core.tests.model/JCL/jclMin13.jar
new file mode 100644
index 0000000..0f621d1
--- /dev/null
+++ b/org.eclipse.jdt.core.tests.model/JCL/jclMin13.jar
Binary files differ
diff --git a/org.eclipse.jdt.core.tests.model/JCL/jclMin13src.zip b/org.eclipse.jdt.core.tests.model/JCL/jclMin13src.zip
new file mode 100644
index 0000000..bf05b46
--- /dev/null
+++ b/org.eclipse.jdt.core.tests.model/JCL/jclMin13src.zip
Binary files differ
diff --git a/org.eclipse.jdt.core.tests.model/META-INF/MANIFEST.MF b/org.eclipse.jdt.core.tests.model/META-INF/MANIFEST.MF
index 18bc7cd..ee24351 100644
--- a/org.eclipse.jdt.core.tests.model/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.core.tests.model/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.core.tests.model;singleton:=true
-Bundle-Version: 3.10.950.qualifier
+Bundle-Version: 3.10.951.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Export-Package: org.eclipse.jdt.core.tests,
@@ -18,6 +18,7 @@
  org.junit;bundle-version="3.8.1",
  org.eclipse.test.performance;bundle-version="[3.1.0,4.0.0)",
  org.eclipse.jdt.core.tests.compiler;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.jdt.compiler.apt.tests;bundle-version="[1.0.0,2.0.0)",
  org.eclipse.jdt.core.tests.builder;bundle-version="[3.4.0,4.0.0)",
  org.eclipse.jdt.launching;bundle-version="[3.10.0,4.0.0)",
  org.eclipse.team.core;bundle-version="[3.2.0,4.0.0)",
diff --git a/org.eclipse.jdt.core.tests.model/pom.xml b/org.eclipse.jdt.core.tests.model/pom.xml
index ce350db..c6d2ad4 100644
--- a/org.eclipse.jdt.core.tests.model/pom.xml
+++ b/org.eclipse.jdt.core.tests.model/pom.xml
@@ -20,7 +20,7 @@
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.core.tests.model</artifactId>
-  <version>3.10.950-SNAPSHOT</version>
+  <version>3.10.951-SNAPSHOT</version>
   <packaging>eclipse-test-plugin</packaging>
 
   <properties>
@@ -170,6 +170,37 @@
 			<tycho.surefire.argLine>--add-modules ALL-SYSTEM -Dcompliance=1.4,1.7,1.8,12</tycho.surefire.argLine>
 		</properties>
 	</profile>
+	<profile>
+		<id>test-on-javase-13</id>
+		<build>
+			<plugins>
+				<plugin>
+					<groupId>org.apache.maven.plugins</groupId>
+					<artifactId>maven-toolchains-plugin</artifactId>
+					<version>1.1</version>
+					<executions>
+						<execution>
+							<phase>validate</phase>
+							<goals>
+								<goal>toolchain</goal>
+							</goals>
+						</execution>
+					</executions>
+					<configuration>
+						<toolchains>
+							<jdk>
+								<id>JavaSE-13</id>
+							</jdk>
+						</toolchains>
+					</configuration>
+				</plugin>
+			</plugins>
+		</build>
+		<properties>
+			<!-- Overridden in https://ci.eclipse.org/jdt/job/eclipse.jdt.core-run.javac-13/configure  -->
+			<tycho.surefire.argLine>--add-modules ALL-SYSTEM -Dcompliance=1.4,1.7,1.8,13</tycho.surefire.argLine>
+		</properties>
+	</profile>
   </profiles>
 
 </project>
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/RunAllJava12Tests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/RunAllJava12Tests.java
index eabf761..60e0229 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/RunAllJava12Tests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/RunAllJava12Tests.java
@@ -6,6 +6,10 @@
  * which accompanies this distribution, and is available at
  * https://www.eclipse.org/legal/epl-2.0/
  *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ * 
  * SPDX-License-Identifier: EPL-2.0
  *Contributors:
  *     IBM Corporation - initial API and implementation
@@ -15,7 +19,6 @@
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 
-import org.eclipse.jdt.core.tests.dom.ASTConverter12Test;
 import org.eclipse.jdt.core.tests.dom.ConverterTestSetup;
 import org.eclipse.jdt.core.tests.util.AbstractCompilerTest;
 
@@ -35,12 +38,6 @@
 		};
 	}
 
-	public static Class[] getConverterTestClasses() {
-		return new Class[] {
-				ASTConverter12Test.class,
-		};
-	}
-
 	public static Class[] getCompilerClasses() {
 		return new Class[] {
 			org.eclipse.jdt.core.tests.eval.TestAll.class,
@@ -53,8 +50,6 @@
 
 		Class[] testClasses = getAllTestClasses();
 		addTestsToSuite(ts, testClasses);
-		testClasses = getConverterTestClasses();
-		addTestsToSuite(ts, testClasses);
 
 		AbstractCompilerTest.setpossibleComplianceLevels(AbstractCompilerTest.F_11);
 		addTestsToSuite(ts, getCompilerClasses());
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/RunAllJava13Tests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/RunAllJava13Tests.java
new file mode 100644
index 0000000..50c1dc3
--- /dev/null
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/RunAllJava13Tests.java
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ * Copyright (c) 2019 IBM Corporation and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.core.tests;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import org.eclipse.jdt.core.tests.compiler.parser.ComplianceDiagnoseTest;
+import org.eclipse.jdt.core.tests.dom.ASTConverter13Test;
+import org.eclipse.jdt.core.tests.dom.ConverterTestSetup;
+import org.eclipse.jdt.core.tests.model.JavaSearchBugs13Tests;
+import org.eclipse.jdt.core.tests.rewrite.describing.ASTRewritingTest;
+import org.eclipse.jdt.core.tests.util.AbstractCompilerTest;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+@SuppressWarnings({"rawtypes", "unchecked"})
+public class RunAllJava13Tests extends TestCase {
+	
+	public RunAllJava13Tests(String name) {
+		super(name);
+	}
+	public static Class[] getAllTestClasses() {
+		return new Class[] {
+			JavaSearchBugs13Tests.class,
+			ComplianceDiagnoseTest.class,
+//			SwitchExpressionsYieldTest.class, //JDT bug: duplicate suite
+			org.eclipse.jdt.compiler.apt.tests.AllTests.class,
+		};
+	}
+	
+	public static Class[] getConverterTestClasses() {
+		return new Class[] {
+				ASTConverter13Test.class,
+				ASTRewritingTest.class,
+		};
+	}
+
+	public static Class[] getCompilerClasses() {
+		return new Class[] {
+			org.eclipse.jdt.core.tests.eval.TestAll.class,
+			org.eclipse.jdt.core.tests.compiler.regression.TestAll.class,
+		};
+	}
+
+	public static Test suite() {
+		TestSuite ts = new TestSuite(RunAllJava13Tests.class.getName());
+
+		Class[] testClasses = getAllTestClasses();
+		addTestsToSuite(ts, testClasses);
+		testClasses = getConverterTestClasses();
+		addTestsToSuite(ts, testClasses);
+
+		AbstractCompilerTest.setpossibleComplianceLevels(AbstractCompilerTest.F_13);
+		addTestsToSuite(ts, getCompilerClasses());
+		// ComplianceDiagnoseTest is already added to the test suite through getTestSuite
+		ts.addTest(org.eclipse.jdt.core.tests.compiler.parser.TestAll.getTestSuite(false));
+		return ts;
+	}
+	public static void addTestsToSuite(TestSuite suite, Class[] testClasses) {
+
+		for (int i = 0; i < testClasses.length; i++) {
+			Class testClass = testClasses[i];
+			// call the suite() method and add the resulting suite to the suite
+			try {
+				Method suiteMethod = testClass.getDeclaredMethod("suite", new Class[0]); //$NON-NLS-1$
+				Test test = (Test)suiteMethod.invoke(null, new Object[0]);
+				suite.addTest(test);
+			} catch (IllegalAccessException e) {
+				e.printStackTrace();
+			} catch (InvocationTargetException e) {
+				e.getTargetException().printStackTrace();
+			} catch (NoSuchMethodException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+	protected void tearDown() throws Exception {
+		ConverterTestSetup.PROJECT_SETUP = false;
+		super.tearDown();
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/RunOnlyJava12Tests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/RunOnlyJava12Tests.java
index 11bc2fa..c483773 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/RunOnlyJava12Tests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/RunOnlyJava12Tests.java
@@ -6,6 +6,10 @@
  * which accompanies this distribution, and is available at
  * https://www.eclipse.org/legal/epl-2.0/
  *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ * 
  * SPDX-License-Identifier: EPL-2.0
  *Contributors:
  *     IBM Corporation - initial API and implementation
@@ -14,10 +18,7 @@
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Arrays;
 
-import org.eclipse.jdt.core.tests.dom.ASTConverter12Test;
 import org.eclipse.jdt.core.tests.dom.ConverterTestSetup;
 
 import junit.framework.Test;
@@ -36,19 +37,11 @@
 		};
 	}
 	
-	public static Class[] getConverterTestClasses() {
-		return new Class[] {
-				ASTConverter12Test.class
-		};
-	}
 	public static Test suite() {
 		TestSuite ts = new TestSuite(RunOnlyJava12Tests.class.getName());
 
 		Class[] testClasses = getAllTestClasses();
 		addTestsToSuite(ts, testClasses);
-		testClasses = getConverterTestClasses();
-		ConverterTestSetup.TEST_SUITES = new ArrayList(Arrays.asList(testClasses));
-		addTestsToSuite(ts, testClasses);
 		return ts;
 	}
 	public static void addTestsToSuite(TestSuite suite, Class[] testClasses) {
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/RunOnlyJava13Tests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/RunOnlyJava13Tests.java
new file mode 100644
index 0000000..177d593
--- /dev/null
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/RunOnlyJava13Tests.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2019 IBM Corporation and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.core.tests;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import org.eclipse.jdt.core.tests.compiler.regression.SwitchExpressionsYieldTest;
+import org.eclipse.jdt.core.tests.dom.ASTConverter13Test;
+import org.eclipse.jdt.core.tests.dom.ConverterTestSetup;
+import org.eclipse.jdt.core.tests.model.JavaSearchBugs13Tests;
+import org.eclipse.jdt.core.tests.rewrite.describing.ASTRewritingTest;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+@SuppressWarnings({"rawtypes", "unchecked"})
+public class RunOnlyJava13Tests extends TestCase {
+	
+	public RunOnlyJava13Tests(String name) {
+		super(name);
+	}
+	public static Class[] getAllTestClasses() {
+		return new Class[] {
+			JavaSearchBugs13Tests.class,
+			SwitchExpressionsYieldTest.class,
+		};
+	}
+	
+	public static Class[] getConverterTestClasses() {
+		return new Class[] {
+				ASTConverter13Test.class,
+				ASTRewritingTest.class,
+		};
+	}
+	public static Test suite() {
+		TestSuite ts = new TestSuite(RunOnlyJava13Tests.class.getName());
+
+		Class[] testClasses = getAllTestClasses();
+		addTestsToSuite(ts, testClasses);
+		testClasses = getConverterTestClasses();
+		ConverterTestSetup.TEST_SUITES = new ArrayList(Arrays.asList(testClasses));
+		addTestsToSuite(ts, testClasses);
+		return ts;
+	}
+	public static void addTestsToSuite(TestSuite suite, Class[] testClasses) {
+
+		for (int i = 0; i < testClasses.length; i++) {
+			Class testClass = testClasses[i];
+			// call the suite() method and add the resulting suite to the suite
+			try {
+				Method suiteMethod = testClass.getDeclaredMethod("suite", new Class[0]); //$NON-NLS-1$
+				Test test = (Test)suiteMethod.invoke(null, new Object[0]);
+				suite.addTest(test);
+			} catch (IllegalAccessException e) {
+				e.printStackTrace();
+			} catch (InvocationTargetException e) {
+				e.getTargetException().printStackTrace();
+			} catch (NoSuchMethodException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+	protected void tearDown() throws Exception {
+		ConverterTestSetup.PROJECT_SETUP = false;
+		super.tearDown();
+	}
+}
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter10Test.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter10Test.java
index e3d1479..595c1a5 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter10Test.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter10Test.java
@@ -8,6 +8,10 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -34,9 +38,10 @@
 //	private static final String jcl9lib = "CONVERTER_JCL9_LIB";
 	
 
+	@SuppressWarnings("deprecation")
 	public void setUpSuite() throws Exception {
 		super.setUpSuite();
-		this.ast = AST.newAST(AST_INTERNAL_JLS11, true);
+		this.ast = AST.newAST(AST_INTERNAL_JLS10);
 	}
 
 	public ASTConverter10Test(String name) {
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter11Test.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter11Test.java
index 1da1818..8e5c082 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter11Test.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter11Test.java
@@ -8,6 +8,10 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -24,6 +28,7 @@
 	ICompilationUnit workingCopy;
 	
 
+	@SuppressWarnings("deprecation")
 	public void setUpSuite() throws Exception {
 		super.setUpSuite();
 		this.ast = AST.newAST(AST_INTERNAL_JLS11, true);
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/ASTConverter13Test.java
similarity index 68%
rename from org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter12Test.java
rename to org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter13Test.java
index 9751f23..6dc9327 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/ASTConverter13Test.java
@@ -6,20 +6,27 @@
  * which accompanies this distribution, and is available at
  * https://www.eclipse.org/legal/epl-2.0/
  *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ * 
  * SPDX-License-Identifier: EPL-2.0
- *Contributors:
+ * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.jdt.core.tests.dom;
 
 import java.util.List;
 
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.compiler.IProblem;
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.Block;
 import org.eclipse.jdt.core.dom.BreakStatement;
 import org.eclipse.jdt.core.dom.CompilationUnit;
@@ -31,23 +38,26 @@
 import org.eclipse.jdt.core.dom.SwitchCase;
 import org.eclipse.jdt.core.dom.SwitchExpression;
 import org.eclipse.jdt.core.dom.SwitchStatement;
+import org.eclipse.jdt.core.dom.TextBlock;
 import org.eclipse.jdt.core.dom.Type;
 import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 import org.eclipse.jdt.core.dom.VariableDeclarationStatement;
+import org.eclipse.jdt.core.dom.YieldStatement;
 
 import junit.framework.Test;
 
 @SuppressWarnings("rawtypes")
-public class ASTConverter12Test extends ConverterTestSetup {
+public class ASTConverter13Test extends ConverterTestSetup {
 
 	ICompilationUnit workingCopy;
+	private static final String jclLib = "CONVERTER_JCL9_LIB";
 
 	public void setUpSuite() throws Exception {
 		super.setUpSuite();
-		this.ast = AST.newAST(getAST12(), true);
+		this.ast = AST.newAST(getAST13(), false);
 	}
 
-	public ASTConverter12Test(String name) {
+	public ASTConverter13Test(String name) {
 		super(name);
 	}
 
@@ -57,11 +67,11 @@
 //		TESTS_NAMES = new String[] {"test0001"};
 	}
 	public static Test suite() {
-		return buildModelTestSuite(ASTConverter12Test.class);
+		return buildModelTestSuite(ASTConverter13Test.class);
 	}
 	
-	static int getAST12() {
-		return AST.JLS12;
+	static int getAST13() {
+		return AST.JLS13;
 	}
 	protected void tearDown() throws Exception {
 		super.tearDown();
@@ -87,15 +97,15 @@
 			"    	case MONDAY  -> throw new NullPointerException();\n" + 
 			"    	case TUESDAY -> 1;\n" + 
 			"\n" +     
-			"	 	case WEDNESDAY -> {break 10;}\n" + 
+			"	 	case WEDNESDAY -> {yield 10;}\n" + 
 			"    	default      -> {\n" +
 			"        	int g = day.toString().length();\n" +
-			"        	break g;\n" +
+			"        	yield g;\n" +
 			"   	}};\n" +
 			"   	System.out.println(k);\n" +
 			"	}\n" +
 			"}" ;
-		this.workingCopy = getWorkingCopy("/Converter12/src/X.java", true/*resolve*/);
+		this.workingCopy = getWorkingCopy("/Converter13/src/X.java", true/*resolve*/);
 		IJavaProject javaProject = this.workingCopy.getJavaProject();
 		String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
 		try {
@@ -154,7 +164,7 @@
 			"		return today;\n" + 
 			"	}\n" + 
 			"}" ;
-		this.workingCopy = getWorkingCopy("/Converter12/src/X.java", true/*resolve*/);
+		this.workingCopy = getWorkingCopy("/Converter13/src/X.java", true/*resolve*/);
 		IJavaProject javaProject = this.workingCopy.getJavaProject();
 		String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
 		try {
@@ -199,16 +209,16 @@
 			"		String today = \"\";\n" +
 			"		today = switch (day) {\n" +
 			"			case SATURDAY,SUNDAY:\n" +
-			"				break \"Weekend day\";\n" +
+			"				yield \"Weekend day\";\n" +
 			"			case MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY:\n" +
-			"				break \"Week day\";\n" +
+			"				yield \"Week day\";\n" +
 			"			default:\n" +
-			"				break \"Any day\";\n" +
+			"				yield \"Any day\";\n" +
 			"		};\n" +
 			"		return today;\n" +
 			"	}\n" +
 			"}" ;
-		this.workingCopy = getWorkingCopy("/Converter12/src/X.java", true/*resolve*/);
+		this.workingCopy = getWorkingCopy("/Converter13/src/X.java", true/*resolve*/);
 		IJavaProject javaProject = this.workingCopy.getJavaProject();
 		String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
 		try {
@@ -236,16 +246,16 @@
 				"	String bb(Day day) throws Exception {\n" +
 				"		String today = switch (day) {\n" +
 				"			case SATURDAY,SUNDAY:\n" +
-				"				break \"Weekend day\";\n" +
+				"				yield \"Weekend day\";\n" +
 				"			case MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY:\n" +
-				"				break \"Week day\";\n" +
+				"				yield \"Week day\";\n" +
 				"			default:\n" +
-				"				break \"Any day\";\n" +
+				"				yield \"Any day\";\n" +
 				"		};\n" +
 				"		return today;\n" +
 				"	}\n" +
 				"}" ;
-		this.workingCopy = getWorkingCopy("/Converter12/src/X.java", true/*resolve*/);
+		this.workingCopy = getWorkingCopy("/Converter13/src/X.java", true/*resolve*/);
 		IJavaProject javaProject = this.workingCopy.getJavaProject();
 		String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
 		try {
@@ -271,7 +281,7 @@
 				assertEquals("incorrect name", "day", ((SimpleName) expression).getFullyQualifiedName());
 				List statements = ((SwitchExpression) initializer).statements();
 				assertEquals("incorrect no of statements", 6, statements.size());
-				BreakStatement brStmt = (BreakStatement) statements.get(1);
+				YieldStatement brStmt = (YieldStatement) statements.get(1);
 				Expression expression2 = brStmt.getExpression();
 				assertNotNull("should not null", expression2);
 				assertEquals("incorrect node type", ASTNode.STRING_LITERAL, expression2.getNodeType());
@@ -279,7 +289,7 @@
 				//default case:
 				SwitchCase caseStmt = (SwitchCase) statements.get(4);
 				assertTrue("not default", caseStmt.isDefault());
-				brStmt = (BreakStatement) statements.get(5);
+				brStmt = (YieldStatement) statements.get(5);
 				expression2 = brStmt.getExpression();
 				assertNotNull("should not null", expression2);
 				assertEquals("incorrect node type", ASTNode.STRING_LITERAL, expression2.getNodeType());
@@ -288,7 +298,8 @@
 			javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
 		}
 	}
-	public void test0005() throws JavaModelException {
+	@Deprecated
+	public void _test0005() throws JavaModelException {
 		String contents =
 				"public class X {\n" +
 				"	public String test001() {\n" + 
@@ -301,7 +312,7 @@
 				"		return ret;\n" + 
 				"	}" +
 				"}" ;
-		this.workingCopy = getWorkingCopy("/Converter12/src/X.java", true/*resolve*/);
+		this.workingCopy = getWorkingCopy("/Converter13/src/X.java", true/*resolve*/);
 		IJavaProject javaProject = this.workingCopy.getJavaProject();
 		String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
 		try {
@@ -356,7 +367,7 @@
 						"		return ret;\n" + 
 						"	}" +
 						"}" ;
-		this.workingCopy = getWorkingCopy("/Converter12/src/X.java", true/*resolve*/);
+		this.workingCopy = getWorkingCopy("/Converter13/src/X.java", true/*resolve*/);
 		IJavaProject javaProject = this.workingCopy.getJavaProject();
 		String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
 		try {
@@ -388,4 +399,139 @@
 			javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
 		}
 	}
+	// Moved over from ASTConverter9Test
+	public void testBug531714_015() throws CoreException {
+		// saw NPE in SwitchExpression.resolveType(SwitchExpression.java:423)
+		if (!isJRE13) {
+			System.err.println("Test "+getName()+" requires a JRE 13");
+			return;
+		}
+		IJavaProject p =  createJavaProject("Foo", new String[] {"src"}, new String[] {jclLib}, "bin", "13"); // FIXME jcl12?
+		p.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
+		p.setOption(JavaCore.COMPILER_PB_REPORT_PREVIEW_FEATURES, JavaCore.IGNORE);
+		try {
+			String source =
+				"import java.util.*;\n" +
+				"public class X {\n" +
+				"	void testForeach1(int i, List<String> list) {\n" + 
+				"		for (String s : switch(i) { case 1 -> list; default -> ; }) {\n" + 
+				"			\n" + 
+				"		}\n" +
+				"		Throwable t = switch (i) {\n" +
+				"			case 1 -> new Exception();\n" +
+				"			case 2 -> new RuntimeException();\n" + // trigger !typeUniformAcrossAllArms
+				"			default -> missing;\n" +
+				"		};\n" +
+				"	}\n" + 
+				"	void testForeach0(int i, List<String> list) {\n" + // errors in first arm
+				"		for (String s : switch(i) { case 1 -> ; default -> list; }) {\n" + 
+				"			\n" + 
+				"		}\n" +
+				"		Throwable t = switch (i) {\n" +
+				"			case 0 -> missing;\n" +
+				"			case 1 -> new Exception();\n" +
+				"			default -> new RuntimeException();\n" + // trigger !typeUniformAcrossAllArms
+				"		};\n" +
+				"	}\n" +
+				"	void testForeachAll(int i) {\n" + // only erroneous arms
+				"		Throwable t = switch (i) {\n" +
+				"			case 0 -> missing;\n" +
+				"			default -> absent;\n" +
+				"		};\n" +
+				"	}\n" +
+				"}\n";
+			createFile("Foo/src/X.java", source);
+			ICompilationUnit cuD = getCompilationUnit("/Foo/src/X.java");
+				
+			ASTParser parser = ASTParser.newParser(AST_INTERNAL_JLS13);
+			parser.setProject(p);
+			parser.setSource(cuD);
+			parser.setResolveBindings(true);
+			parser.setStatementsRecovery(true);
+			parser.setBindingsRecovery(true);
+			org.eclipse.jdt.core.dom.CompilationUnit cuAST = (org.eclipse.jdt.core.dom.CompilationUnit) parser.createAST(null);
+			IProblem[] problems = cuAST.getProblems();
+			assertProblems("Unexpected problems",
+					"1. ERROR in /Foo/src/X.java (at line 4)\n" + 
+					"	for (String s : switch(i) { case 1 -> list; default -> ; }) {\n" + 
+					"	                                                    ^^\n" + 
+					"Syntax error on token \"->\", Expression expected after this token\n" + 
+					"----------\n" + 
+					"2. ERROR in /Foo/src/X.java (at line 10)\n" + 
+					"	default -> missing;\n" + 
+					"	           ^^^^^^^\n" + 
+					"missing cannot be resolved to a variable\n" + 
+					"----------\n" + 
+					"3. ERROR in /Foo/src/X.java (at line 14)\n" + 
+					"	for (String s : switch(i) { case 1 -> ; default -> list; }) {\n" + 
+					"	                                   ^^\n" + 
+					"Syntax error on token \"->\", Expression expected after this token\n" + 
+					"----------\n" + 
+					"4. ERROR in /Foo/src/X.java (at line 18)\n" + 
+					"	case 0 -> missing;\n" + 
+					"	          ^^^^^^^\n" + 
+					"missing cannot be resolved to a variable\n" + 
+					"----------\n" + 
+					"5. ERROR in /Foo/src/X.java (at line 25)\n" + 
+					"	case 0 -> missing;\n" + 
+					"	          ^^^^^^^\n" + 
+					"missing cannot be resolved to a variable\n" + 
+					"----------\n" + 
+					"6. ERROR in /Foo/src/X.java (at line 26)\n" + 
+					"	default -> absent;\n" + 
+					"	           ^^^^^^\n" + 
+					"absent cannot be resolved to a variable\n" + 
+					"----------\n",
+					problems, source.toCharArray());
+		} finally {
+			deleteProject(p);
+		}
+	}
+	
+	public void test0007() throws JavaModelException {
+		String contents =
+				"public class X {\n" +
+						"	public String test001() {\n" + 
+						"		String s = \"\"\"\n" + 
+						"      	<html>\n" + 
+						"        <body>\n" + 
+						"            <p>Hello, world</p>\n" + 
+						"        </body>\n" + 
+						"    	</html>\n" + 
+						"    	\"\"\";\n" + 
+						"    	System.out.println(s);" +
+						"		return s;\n" + 
+						"	}" +
+						"}" ;
+		this.workingCopy = getWorkingCopy("/Converter13/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, 0, 0);
+			assertEquals("Text block statement", node.getNodeType(), ASTNode.VARIABLE_DECLARATION_STATEMENT);
+			List fragments = ((VariableDeclarationStatement) node).fragments();
+			assertEquals("Incorrect no of fragments", 1, fragments.size());
+			node = (ASTNode) fragments.get(0);
+			assertEquals("Switch statement", node.getNodeType(), ASTNode.VARIABLE_DECLARATION_FRAGMENT);
+			VariableDeclarationFragment fragment = (VariableDeclarationFragment) node;
+			Expression initializer = fragment.getInitializer();
+			assertTrue("Initializer is not a TextBlock", initializer instanceof TextBlock);
+			String escapedValue = ((TextBlock) initializer).getEscapedValue();
+			System.out.println(escapedValue);
+
+			assertTrue("String should not be empty", escapedValue.length() != 0);
+			assertTrue("String should start with \"\"\"", escapedValue.startsWith("\"\"\""));
+
+		} finally {
+			javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
+		}
+	}
 }
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter9Test.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter9Test.java
index 74a2b6c..212b1c0 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter9Test.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter9Test.java
@@ -8,6 +8,10 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -1417,94 +1421,10 @@
 			deleteProject("Foo");
 		}
 	}
-	// TODO: should probably start a new test class
-	public void testBug531714_015() throws CoreException {
-		// saw NPE in SwitchExpression.resolveType(SwitchExpression.java:423)
-		if (!isJRE12) {
-			System.err.println("Test "+getName()+" requires a JRE 12");
-			return;
-		}
-		IJavaProject p =  createJavaProject("Foo", new String[] {"src"}, new String[] {jcl9lib}, "bin", "12"); // FIXME jcl12?
-		p.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
-		p.setOption(JavaCore.COMPILER_PB_REPORT_PREVIEW_FEATURES, JavaCore.IGNORE);
-		try {
-			String source =
-				"import java.util.*;\n" +
-				"public class X {\n" +
-				"	void testForeach1(int i, List<String> list) {\n" + 
-				"		for (String s : switch(i) { case 1 -> list; default -> ; }) {\n" + 
-				"			\n" + 
-				"		}\n" +
-				"		Throwable t = switch (i) {\n" +
-				"			case 1 -> new Exception();\n" +
-				"			case 2 -> new RuntimeException();\n" + // trigger !typeUniformAcrossAllArms
-				"			default -> missing;\n" +
-				"		};\n" +
-				"	}\n" + 
-				"	void testForeach0(int i, List<String> list) {\n" + // errors in first arm
-				"		for (String s : switch(i) { case 1 -> ; default -> list; }) {\n" + 
-				"			\n" + 
-				"		}\n" +
-				"		Throwable t = switch (i) {\n" +
-				"			case 0 -> missing;\n" +
-				"			case 1 -> new Exception();\n" +
-				"			default -> new RuntimeException();\n" + // trigger !typeUniformAcrossAllArms
-				"		};\n" +
-				"	}\n" +
-				"	void testForeachAll(int i) {\n" + // only erroneous arms
-				"		Throwable t = switch (i) {\n" +
-				"			case 0 -> missing;\n" +
-				"			default -> absent;\n" +
-				"		};\n" +
-				"	}\n" +
-				"}\n";
-			createFile("Foo/src/X.java", source);
-			ICompilationUnit cuD = getCompilationUnit("/Foo/src/X.java");
-				
-			ASTParser parser = ASTParser.newParser(AST_INTERNAL_JLS11);
-			parser.setProject(p);
-			parser.setSource(cuD);
-			parser.setResolveBindings(true);
-			parser.setStatementsRecovery(true);
-			parser.setBindingsRecovery(true);
-			org.eclipse.jdt.core.dom.CompilationUnit cuAST = (org.eclipse.jdt.core.dom.CompilationUnit) parser.createAST(null);
-			IProblem[] problems = cuAST.getProblems();
-			assertProblems("Unexpected problems",
-					"1. ERROR in /Foo/src/X.java (at line 4)\n" + 
-					"	for (String s : switch(i) { case 1 -> list; default -> ; }) {\n" + 
-					"	                                                    ^^\n" + 
-					"Syntax error on token \"->\", Expression expected after this token\n" + 
-					"----------\n" + 
-					"2. ERROR in /Foo/src/X.java (at line 10)\n" + 
-					"	default -> missing;\n" + 
-					"	           ^^^^^^^\n" + 
-					"missing cannot be resolved to a variable\n" + 
-					"----------\n" + 
-					"3. ERROR in /Foo/src/X.java (at line 14)\n" + 
-					"	for (String s : switch(i) { case 1 -> ; default -> list; }) {\n" + 
-					"	                                   ^^\n" + 
-					"Syntax error on token \"->\", Expression expected after this token\n" + 
-					"----------\n" + 
-					"4. ERROR in /Foo/src/X.java (at line 18)\n" + 
-					"	case 0 -> missing;\n" + 
-					"	          ^^^^^^^\n" + 
-					"missing cannot be resolved to a variable\n" + 
-					"----------\n" + 
-					"5. ERROR in /Foo/src/X.java (at line 25)\n" + 
-					"	case 0 -> missing;\n" + 
-					"	          ^^^^^^^\n" + 
-					"missing cannot be resolved to a variable\n" + 
-					"----------\n" + 
-					"6. ERROR in /Foo/src/X.java (at line 26)\n" + 
-					"	default -> absent;\n" + 
-					"	           ^^^^^^\n" + 
-					"absent cannot be resolved to a variable\n" + 
-					"----------\n",
-					problems, source.toCharArray());
-		} finally {
-			deleteProject(p);
-		}
-	}
+	/**
+	 * @deprecated
+	 * @throws Exception
+	 */
 	public void testBug542795() throws Exception {
 		IJavaProject p =  createJavaProject("Foo", new String[] {"src"}, new String[] {jcl9lib}, "bin", "11");
 		try {
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTStructuralPropertyTest.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTStructuralPropertyTest.java
index 92aada9..9405b8c 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTStructuralPropertyTest.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTStructuralPropertyTest.java
@@ -8,6 +8,10 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Technical University Berlin - adapted for Object Teams
@@ -447,9 +451,9 @@
 		}
 // {ObjectTeams: adapted for OT specific ASTNodes		
 /* orig:
-		assertEquals("Wrong last known type", 100, hi); // last known one
+		assertEquals("Wrong last known type", 101, hi); // last known one
   :giro */
-		assertEquals("Wrong last known type", 116, hi); // last known one
+		assertEquals("Wrong last known type", 117, hi); // last known one
 // jwl}		
 		assertEquals("Wrong number of distinct types",  hi, classes.size()); // all classes are distinct
 	}
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTTest.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTTest.java
index 062e772..6f84160 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTTest.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTTest.java
@@ -8,6 +8,10 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Technical University Berlin - adapted for Object Teams
@@ -28,6 +32,7 @@
 import junit.framework.AssertionFailedError;
 import junit.framework.Test;
 
+import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.dom.*;
 
 // testing
@@ -1309,14 +1314,35 @@
 
 	}
 
+	@SuppressWarnings("deprecation")
+	private static int getApiLevel(String s) {
+		if (s == null)
+			return AST.JLS12;
+		switch (s) {
+		case JavaCore.VERSION_1_2 : return AST.JLS2; 
+        case JavaCore.VERSION_1_3: return AST.JLS3;
+        case JavaCore.VERSION_1_4: return AST.JLS4;
+        case JavaCore.VERSION_1_5: return AST.JLS4;
+        case JavaCore.VERSION_1_6: return AST.JLS4;
+        case JavaCore.VERSION_1_7: return AST.JLS4;
+        case JavaCore.VERSION_1_8: return AST.JLS8;
+        case JavaCore.VERSION_9: return AST.JLS9;
+        case JavaCore.VERSION_10: return AST.JLS10;
+        case JavaCore.VERSION_11: return AST.JLS11;
+        case JavaCore.VERSION_12: return AST.JLS12;
+        case JavaCore.VERSION_13: return AST.JLS13;
+        default:  return AST.JLS2;
+		}
+	}
 	/** @deprecated using deprecated code */
 	public void testAST() {
 
 		assertSame(AST.JLS2, 2);
 		assertSame(JLS3_INTERNAL, 3);
 
-		AST a0 = new AST(); // deprecated, but still 2.0
-		assertTrue(a0.apiLevel() == AST.JLS2);
+		AST a0 = new AST(); // deprecated, now 3 from JavaCore.defaultOptions
+		int apiLevelCal = ASTTest.getApiLevel(JavaCore.getDefaultOptions().get(JavaCore.COMPILER_SOURCE));
+		assertTrue(a0.apiLevel() == apiLevelCal);
 		AST a1 = new AST(new HashMap()); // deprecated, but still 2.0
 		assertTrue(a1.apiLevel() == AST.JLS2);
 		AST a2 = AST.newAST(AST.JLS2, false);
@@ -8879,6 +8905,7 @@
 			ASTNode.PROVIDES_DIRECTIVE,
 			ASTNode.MODULE_MODIFIER,
 			ASTNode.SWITCH_EXPRESSION,
+			ASTNode.TEXT_BLOCK,
 //{ObjectTeams:
 			ASTNode.METHOD_SPEC,
 			ASTNode.CALLIN_MAPPING_DECLARATION,
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/AbstractASTTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/AbstractASTTests.java
index 65102b4..8786ac3 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/AbstractASTTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/AbstractASTTests.java
@@ -6,6 +6,10 @@
  * which accompanies this distribution, and is available at
  * https://www.eclipse.org/legal/epl-2.0/
  *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ * 
  * SPDX-License-Identifier: EPL-2.0
  *
  * Contributors:
@@ -493,7 +497,9 @@
 		String option = cu.getJavaProject().getOption(JavaCore.COMPILER_COMPLIANCE, true);
 		long jdkLevel = CompilerOptions.versionToJdkLevel(option);
 		int JLSLevel = AST_INTERNAL_JLS3;
-		if (jdkLevel >= ClassFileConstants.getComplianceLevelForJavaVersion(ClassFileConstants.MAJOR_VERSION_12)) {
+		if (jdkLevel >= ClassFileConstants.getComplianceLevelForJavaVersion(ClassFileConstants.MAJOR_VERSION_13)) {
+			JLSLevel = AST_INTERNAL_JLS13;
+		} else if (jdkLevel >= ClassFileConstants.getComplianceLevelForJavaVersion(ClassFileConstants.MAJOR_VERSION_12)) {
 			JLSLevel = AST_INTERNAL_JLS12;
 		} else if (jdkLevel >= ClassFileConstants.getComplianceLevelForJavaVersion(ClassFileConstants.MAJOR_VERSION_11)) {
 			JLSLevel = AST_INTERNAL_JLS11;			
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ConverterTestSetup.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ConverterTestSetup.java
index 47ab610..ae8e498 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ConverterTestSetup.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ConverterTestSetup.java
@@ -6,6 +6,10 @@
  * which accompanies this distribution, and is available at
  * https://www.eclipse.org/legal/epl-2.0/
  *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ * 
  * SPDX-License-Identifier: EPL-2.0
  *
  * Contributors:
@@ -105,7 +109,7 @@
 			this.deleteProject("Converter9"); //$NON-NLS-1$
 			this.deleteProject("Converter10"); //$NON-NLS-1$
 			this.deleteProject("Converter11"); //$NON-NLS-1$
-			this.deleteProject("Converter12"); //$NON-NLS-1$
+			this.deleteProject("Converter13"); //$NON-NLS-1$
 			PROJECT_SETUP = false;
 		} else {
 			TEST_SUITES.remove(getClass());
@@ -118,7 +122,7 @@
 				this.deleteProject("Converter9"); //$NON-NLS-1$
 				this.deleteProject("Converter10"); //$NON-NLS-1$
 				this.deleteProject("Converter11"); //$NON-NLS-1$
-				this.deleteProject("Converter12"); //$NON-NLS-1$
+				this.deleteProject("Converter13"); //$NON-NLS-1$
 				PROJECT_SETUP = false;
 			}
 		}
@@ -212,7 +216,7 @@
 			setUpJavaProject("Converter9", "9"); //$NON-NLS-1$ //$NON-NLS-2$
 			setUpJavaProject("Converter10", "10"); //$NON-NLS-1$ //$NON-NLS-2$
 			setUpJavaProject("Converter11", "11"); //$NON-NLS-1$ //$NON-NLS-2$
-			setUpJavaProject("Converter12", "12"); //$NON-NLS-1$ //$NON-NLS-2$
+			setUpJavaProject("Converter13", "13"); //$NON-NLS-1$ //$NON-NLS-2$
 			waitUntilIndexesReady(); // needed to find secondary types
 			PROJECT_SETUP = true;
 		}
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/RunConverterTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/RunConverterTests.java
index f12cc67..cdaed01 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/RunConverterTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/RunConverterTests.java
@@ -52,7 +52,7 @@
 		TypeAnnotationsConverterTest.class,
 		ASTConverter18Test.class,
 		ASTConverter9Test.class,
-		ASTConverter12Test.class,
+		ASTConverter13Test.class,
 	};
 }
 public static Test suite() {
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/TypeAnnotationsConverterTest.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/TypeAnnotationsConverterTest.java
index 1da23d2..e9b0d74 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/TypeAnnotationsConverterTest.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/TypeAnnotationsConverterTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2018 IBM Corporation and others.
+ * Copyright (c) 2000, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -8,6 +8,10 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -26,7 +30,7 @@
 
 	public void setUpSuite() throws Exception {
 		super.setUpSuite();
-		this.ast = AST.newAST(AST_INTERNAL_JLS11, false);
+		this.ast = AST.newAST(AST_INTERNAL_LATEST, false);
 	}
 
 	public TypeAnnotationsConverterTest(String name) {
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterRegressionTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterRegressionTests.java
index 71ad555..320fe9a 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterRegressionTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterRegressionTests.java
@@ -14850,7 +14850,7 @@
  * https://bugs.eclipse.org/543818 - [12] Formatter Support for Switch Expressions
  */
 public void testBug543818a() throws JavaModelException {
-	setComplianceLevel(CompilerOptions.VERSION_12);
+	setComplianceLevel(CompilerOptions.VERSION_13);
 	this.formatterPrefs.insert_space_before_comma_in_switch_case_expressions = true;
 	this.formatterPrefs.insert_space_before_colon_in_case = true;
 	this.formatterPrefs.indent_switchstatements_compare_to_switch = true;
@@ -14861,7 +14861,7 @@
  * https://bugs.eclipse.org/543818 - [12] Formatter Support for Switch Expressions
  */
 public void testBug543818b() throws JavaModelException {
-	setComplianceLevel(CompilerOptions.VERSION_12);
+	setComplianceLevel(CompilerOptions.VERSION_13);
 	this.formatterPrefs.insert_space_after_comma_in_switch_case_expressions = false;
 	this.formatterPrefs.insert_space_before_closing_paren_in_switch = true;
 	this.formatterPrefs.indent_switchstatements_compare_to_cases = false;
@@ -14872,7 +14872,7 @@
  * https://bugs.eclipse.org/543818 - [12] Formatter Support for Switch Expressions
  */
 public void testBug543818c() throws JavaModelException {
-	setComplianceLevel(CompilerOptions.VERSION_12);
+	setComplianceLevel(CompilerOptions.VERSION_13);
 	this.formatterPrefs.insert_space_before_arrow_in_switch_case = false;
 	this.formatterPrefs.insert_space_before_opening_paren_in_switch = false;
 	this.formatterPrefs.indent_breaks_compare_to_cases = false;
@@ -14883,7 +14883,7 @@
  * https://bugs.eclipse.org/543818 - [12] Formatter Support for Switch Expressions
  */
 public void testBug543818d() throws JavaModelException {
-	setComplianceLevel(CompilerOptions.VERSION_12);
+	setComplianceLevel(CompilerOptions.VERSION_13);
 	this.formatterPrefs.insert_space_after_arrow_in_switch_case = false;
 	this.formatterPrefs.insert_space_after_opening_paren_in_switch = true;
 	this.formatterPrefs.insert_space_before_opening_brace_in_block = false;
@@ -14895,7 +14895,7 @@
  * https://bugs.eclipse.org/543818 - [12] Formatter Support for Switch Expressions
  */
 public void testBug543818e() throws JavaModelException {
-	setComplianceLevel(CompilerOptions.VERSION_12);
+	setComplianceLevel(CompilerOptions.VERSION_13);
 	this.formatterPrefs.insert_space_before_arrow_in_switch_default = false;
 	this.formatterPrefs.insert_space_before_colon_in_default = true;
 	this.formatterPrefs.parenthesis_positions_in_switch_statement = DefaultCodeFormatterConstants.SEPARATE_LINES;
@@ -14906,7 +14906,7 @@
  * https://bugs.eclipse.org/543818 - [12] Formatter Support for Switch Expressions
  */
 public void testBug543818f() throws JavaModelException {
-	setComplianceLevel(CompilerOptions.VERSION_12);
+	setComplianceLevel(CompilerOptions.VERSION_13);
 	this.formatterPrefs.insert_space_after_arrow_in_switch_default = false;
 	this.formatterPrefs.insert_space_before_opening_brace_in_switch = false;
 	this.formatterPrefs.insert_space_before_opening_brace_in_block = false;
@@ -14917,7 +14917,7 @@
  * https://bugs.eclipse.org/543818 - [12] Formatter Support for Switch Expressions
  */
 public void testBug543818g() throws JavaModelException {
-	setComplianceLevel(CompilerOptions.VERSION_12);
+	setComplianceLevel(CompilerOptions.VERSION_13);
 	String input = getCompilationUnit("Formatter", "", "test543818", "in.java").getSource();
 	formatSource(input, getCompilationUnit("Formatter", "", "test543818", "G_out.java").getSource());
 }
@@ -15230,7 +15230,7 @@
  * https://bugs.eclipse.org/390720 - [formatter] Add setting for blank line between case blocks (after break) for switch statement
  */
 public void testBug390720a() throws JavaModelException {
-	setComplianceLevel(CompilerOptions.VERSION_12);
+	setComplianceLevel(CompilerOptions.VERSION_13);
 	this.formatterPrefs.blank_lines_between_statement_groups_in_switch = 2;
 	formatSourceInWorkspace("test390720", "in.java", "A_out.java");
 }
@@ -15238,7 +15238,7 @@
  * https://bugs.eclipse.org/390720 - [formatter] Add setting for blank line between case blocks (after break) for switch statement
  */
 public void testBug390720b() throws JavaModelException {
-	setComplianceLevel(CompilerOptions.VERSION_12);
+	setComplianceLevel(CompilerOptions.VERSION_13);
 	this.formatterPrefs.blank_lines_between_statement_groups_in_switch = ~0;
 	formatSourceInWorkspace("test390720", "in.java", "B_out.java");
 }
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java
index 3bc7436..07a741c 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java
@@ -6,6 +6,10 @@
  * which accompanies this distribution, and is available at
  * https://www.eclipse.org/legal/epl-2.0/
  *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ * 
  * SPDX-License-Identifier: EPL-2.0
  *
  * Contributors:
@@ -77,6 +81,7 @@
 	protected static boolean isJRE10 = false;
 	protected static boolean isJRE11 = false;
 	protected static boolean isJRE12 = false;
+	protected static boolean isJRE13 = false;
 	protected static String DEFAULT_MODULES = null;
 	static {
 		String javaVersion = System.getProperty("java.version");
@@ -90,7 +95,10 @@
 			}
 		}
 		long jdkLevel = CompilerOptions.versionToJdkLevel(javaVersion.length() > 3 ? javaVersion.substring(0, 3) : javaVersion);
-		if (jdkLevel >= ClassFileConstants.getLatestJDKLevel()) {
+		if (jdkLevel >= ClassFileConstants.JDK13) {
+			isJRE13 = true;
+		}
+		if (jdkLevel >= ClassFileConstants.JDK12) {
 			isJRE12 = true;
 		}
 		if (jdkLevel >= ClassFileConstants.JDK11) {
@@ -143,14 +151,29 @@
 	/**
 	 * Internal synonym for constant AST.JSL12
 	 * to alleviate deprecation warnings once AST.JLS12 is deprecated in future.
+	 * @deprecated
 	 */
 	protected static final int AST_INTERNAL_JLS12 = AST.JLS12;
+	
+	/**
+	 * Internal synonym for constant AST.JSL13
+	 * to alleviate deprecation warnings once AST.JLS13 is deprecated in future.
+	 */
+	protected static final int AST_INTERNAL_JLS13 = AST.JLS13;
 
 	/**
 	 * Internal synonym for constant AST.JSL11
 	 * to alleviate deprecation warnings once AST.JLS11 is deprecated in future.
+	 * @deprecated
 	 */
 	protected static final int AST_INTERNAL_JLS11 = AST.JLS11;
+
+	/**
+	 * Internal synonym for the latest AST level.
+	 * 
+	 */
+	protected static final int AST_INTERNAL_LATEST = AST.JLS13;
+
 	public static class BasicProblemRequestor implements IProblemRequestor {
 		public void acceptProblem(IProblem problem) {}
 		public void beginReporting() {}
@@ -2054,6 +2077,12 @@
 					options.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
 					options.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
 					javaProject.setOptions(options);
+				} else if ("13".equals(compliance)) {
+					Map options = new HashMap();
+					options.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+					options.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
+					options.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
+					javaProject.setOptions(options);
 				}
 				result[0] = javaProject;
 			}
@@ -3147,7 +3176,10 @@
 			newJclLibString = "JCL18_FULL";
 			newJclSrcString = "JCL18_SRC"; // Use the same source
 		} else {
-			if (compliance.equals("12")) {
+			if (compliance.equals("13")) {
+				newJclLibString = "JCL13_LIB";
+				newJclSrcString = "JCL13_SRC";
+			} else if (compliance.equals("12")) {
 				newJclLibString = "JCL12_LIB";
 				newJclSrcString = "JCL12_SRC";
 			} else if (compliance.equals("11")) {
@@ -3208,10 +3240,12 @@
 		IPath jcl10Lib = new Path("JCL10_LIB");
 		IPath jcl11Lib = new Path("JCL11_LIB");
 		IPath jcl12Lib = new Path("JCL12_LIB");
+		IPath jcl13Lib = new Path("JCL13_LIB");
 		IPath jclFull = new Path("JCL18_FULL");
 
 		return path.equals(jclLib) || path.equals(jcl5Lib) || path.equals(jcl8Lib) || path.equals(jcl9Lib)
-				|| path.equals(jcl10Lib) ||  path.equals(jcl11Lib) || path.equals(jcl12Lib) || path.equals(jclFull);
+				|| path.equals(jcl10Lib) ||  path.equals(jcl11Lib) || path.equals(jcl12Lib) || path.equals(jcl13Lib)
+				|| path.equals(jclFull);
 	}
 	public void setUpJCLClasspathVariables(String compliance) throws JavaModelException, IOException {
 		setUpJCLClasspathVariables(compliance, false);
@@ -3282,6 +3316,14 @@
 					new IPath[] {getExternalJCLPath("12"), getExternalJCLSourcePath("12"), getExternalJCLRootSourcePath()},
 					null);
 			}
+		} else if ("13".equals(compliance)) {
+			if (JavaCore.getClasspathVariable("JCL13_LIB") == null) {
+				setupExternalJCL("jclMin13"); // No need for an explicit jclmin13, just use the same old one.
+				JavaCore.setClasspathVariables(
+					new String[] {"JCL13_LIB", "JCL13_SRC", "JCL_SRCROOT"},
+					new IPath[] {getExternalJCLPath("13"), getExternalJCLSourcePath("13"), getExternalJCLRootSourcePath()},
+					null);
+			}
 		} else {
 			if (JavaCore.getClasspathVariable("JCL_LIB") == null) {
 				setupExternalJCL("jclMin");
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AccessRestrictionsTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AccessRestrictionsTests.java
index cd8839b..aadc76d 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AccessRestrictionsTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AccessRestrictionsTests.java
@@ -8,6 +8,10 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -1172,7 +1176,7 @@
 		
 		createFolder("/P2/src/p2");
 		createFile("/P2/src/p2/Z.java", src);
-		ASTParser parser = ASTParser.newParser(AST_INTERNAL_JLS12);
+		ASTParser parser = ASTParser.newParser(AST_INTERNAL_LATEST);
 		parser.setProject(p2);
 		parser.setSource((ITypeRoot)p2.findElement(new Path("p2/Z.java")));
 		parser.setResolveBindings(true);
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompilationUnitTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompilationUnitTests.java
index 827e9f1..7aaed4f 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompilationUnitTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompilationUnitTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2018 IBM Corporation and others.
+ * Copyright (c) 2000, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -8,6 +8,10 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Stephan Herrmann - contribution for bug 337868 - [compiler][model] incomplete support for package-info.java when using SearchableEnvironment
@@ -2656,7 +2660,7 @@
 				"public class X {}\n");
 		ICompilationUnit cuD = getCompilationUnit("/P/src/X.java");
 		
-		ASTParser parser = ASTParser.newParser(AST_INTERNAL_JLS11);
+		ASTParser parser = ASTParser.newParser(AST_INTERNAL_LATEST);
 		parser.setProject(this.testProject);
 		parser.setSource(cuD);
 		parser.setResolveBindings(true);
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests12.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests12.java
deleted file mode 100644
index ea03702..0000000
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests12.java
+++ /dev/null
@@ -1,856 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2019 IBM and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- * 
- *******************************************************************************/
-package org.eclipse.jdt.core.tests.model;
-
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.internal.codeassist.RelevanceConstants;
-
-import junit.framework.Test;
-
-public class CompletionTests12 extends AbstractJavaModelCompletionTests {
-
-	static {
-//		TESTS_NAMES = new String[]{"test018e"};
-	}
-
-	public CompletionTests12(String name) {
-		super(name);
-	}
-	public void setUpSuite() throws Exception {
-		if (COMPLETION_PROJECT == null)  {
-			COMPLETION_PROJECT = setUpJavaProject("Completion", "12");
-		} else {
-			setUpProjectCompliance(COMPLETION_PROJECT, "12");
-		}
-		super.setUpSuite();
-	}
-	public static Test suite() {
-		return buildModelTestSuite(CompletionTests12.class);
-	}
-	public void test001() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/Switch.java",
-				"public class Switch {\n" + 
-						"	public static void bar(MyDay day) {\n" + 
-						"		switch (day) {\n" + 
-						"		case SATURDAY, SUN ->\n" + 
-						"			System.out.println(day.toString());\n" + 
-						"		}\n" + 
-						"	}\n" + 
-						"	public static void main(String[] args) {\n" + 
-						"		bar(MyDay.SUNDAY);\n" + 
-						"	}\n" + 
-						"}\n" + 
-				"enum MyDay { SATURDAY, SUNDAY}");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "SATURDAY, SUN";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"SUNDAY[FIELD_REF]{SUNDAY, LMyDay;, LMyDay;, SUNDAY, null, "+ 
-						(RelevanceConstants.R_DEFAULT + RelevanceConstants.R_RESOLVED + RelevanceConstants.R_INTERESTING+
-								RelevanceConstants.R_CASE + RelevanceConstants.R_EXACT_EXPECTED_TYPE +
-								RelevanceConstants.R_ENUM + RelevanceConstants.R_ENUM_CONSTANT +
-								RelevanceConstants.R_UNQUALIFIED + RelevanceConstants.R_NON_RESTRICTED)+ "}",
-						requestor.getResults());
-	}
-	public void test002() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/Switch.java",
-				"public class Switch {\n" + 
-						"	public static void bar(MyDay day) {\n" + 
-						"		switch (day) {\n" + 
-						"		case SATURDAY, SUN :\n" + 
-						"			System.out.println(day.toString());\n" + 
-						"		}\n" + 
-						"	}\n" + 
-						"	public static void main(String[] args) {\n" + 
-						"		bar(MyDay.SUNDAY);\n" + 
-						"	}\n" + 
-						"}\n" + 
-				"enum MyDay { SATURDAY, SUNDAY}");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "SATURDAY, SUN";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"SUNDAY[FIELD_REF]{SUNDAY, LMyDay;, LMyDay;, SUNDAY, null, "+ 
-						(RelevanceConstants.R_DEFAULT + RelevanceConstants.R_RESOLVED + RelevanceConstants.R_INTERESTING+
-								RelevanceConstants.R_CASE + RelevanceConstants.R_EXACT_EXPECTED_TYPE +
-								RelevanceConstants.R_ENUM + RelevanceConstants.R_ENUM_CONSTANT +
-								RelevanceConstants.R_UNQUALIFIED + RelevanceConstants.R_NON_RESTRICTED)+ "}",
-						requestor.getResults());
-	}
-	public void test003() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/Switch.java",
-				"public class Switch {\n" + 
-						"	public static void bar(MyDay day) {\n" + 
-						"		switch (day) {\n" + 
-						"		case SATU -> \n" + 
-						"			System.out.println(day.toString());\n" + 
-						"		}\n" + 
-						"	}\n" + 
-						"	public static void main(String[] args) {\n" + 
-						"		bar(MyDay.SUNDAY);\n" + 
-						"	}\n" + 
-						"}\n" + 
-				"enum MyDay { SATURDAY, SUNDAY}");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "SATU";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"SATURDAY[FIELD_REF]{SATURDAY, LMyDay;, LMyDay;, SATURDAY, null, "+ 
-						(RelevanceConstants.R_DEFAULT + RelevanceConstants.R_RESOLVED + RelevanceConstants.R_INTERESTING+
-								RelevanceConstants.R_CASE + RelevanceConstants.R_EXACT_EXPECTED_TYPE +
-								RelevanceConstants.R_ENUM + RelevanceConstants.R_ENUM_CONSTANT +
-								RelevanceConstants.R_UNQUALIFIED + RelevanceConstants.R_NON_RESTRICTED)+ "}",
-						requestor.getResults());
-	}
-	public void test004() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/Switch.java",
-				"public class Switch {\n" + 
-						"	public static void bar(MyDay day) {\n" + 
-						"		switch (day) {\n" + 
-						"		case SATURDAY, SUNDAY, MOND -> \n" + 
-						"			System.out.println(day.toString());\n" + 
-						"		}\n" + 
-						"	}\n" + 
-						"	public static void main(String[] args) {\n" + 
-						"		bar(MyDay.SUNDAY);\n" + 
-						"	}\n" + 
-						"}\n" + 
-				"enum MyDay { SATURDAY, SUNDAY, MONDAY}");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "MOND";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"MONDAY[FIELD_REF]{MONDAY, LMyDay;, LMyDay;, MONDAY, null, "+ 
-						(RelevanceConstants.R_DEFAULT + RelevanceConstants.R_RESOLVED + RelevanceConstants.R_INTERESTING+
-								RelevanceConstants.R_CASE + RelevanceConstants.R_EXACT_EXPECTED_TYPE +
-								RelevanceConstants.R_ENUM + RelevanceConstants.R_ENUM_CONSTANT +
-								RelevanceConstants.R_UNQUALIFIED + RelevanceConstants.R_NON_RESTRICTED)+ "}",
-						requestor.getResults());
-	}
-	public void test005() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/Switch.java",
-				"public class Switch {\n" + 
-						"	public static void bar(MyDay day) {\n" + 
-						"		switch (day) {\n" + 
-						"		case SATURDAY, SUND, MONDAY -> \n" + 
-						"			System.out.println(day.toString());\n" + 
-						"		}\n" + 
-						"	}\n" + 
-						"	public static void main(String[] args) {\n" + 
-						"		bar(MyDay.SUNDAY);\n" + 
-						"	}\n" + 
-						"}\n" + 
-				"enum MyDay { SATURDAY, SUNDAY, MONDAY}");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "SUND";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"SUNDAY[FIELD_REF]{SUNDAY, LMyDay;, LMyDay;, SUNDAY, null, "+ 
-						(RelevanceConstants.R_DEFAULT + RelevanceConstants.R_RESOLVED + RelevanceConstants.R_INTERESTING+
-								RelevanceConstants.R_CASE + RelevanceConstants.R_EXACT_EXPECTED_TYPE +
-								RelevanceConstants.R_ENUM + RelevanceConstants.R_ENUM_CONSTANT +
-								RelevanceConstants.R_UNQUALIFIED + RelevanceConstants.R_NON_RESTRICTED)+ "}",
-						requestor.getResults());
-	}
-	public void test005a() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/Switch.java",
-				"public class Switch {\n" + 
-						"	public static void bar(MyDay day) {\n" + 
-						"		switch (day) {\n" + 
-						"		case SATURDAY, SUNDAY -> \n" + 
-						"			System.out.println(day.toString());\n" + 
-						"		case MON -> \n" + 
-						"			System.out.println(day.toString());\n" + 
-						"		}\n" + 
-						"	}\n" + 
-						"	public static void main(String[] args) {\n" + 
-						"		bar(MyDay.SUNDAY);\n" + 
-						"	}\n" + 
-						"}\n" + 
-				"enum MyDay { SATURDAY, SUNDAY, MONDAY}");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "case MON";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"MONDAY[FIELD_REF]{MONDAY, LMyDay;, LMyDay;, MONDAY, null, "+ 
-						(RelevanceConstants.R_DEFAULT + RelevanceConstants.R_RESOLVED + RelevanceConstants.R_INTERESTING+
-								RelevanceConstants.R_CASE + RelevanceConstants.R_EXACT_EXPECTED_TYPE +
-								RelevanceConstants.R_ENUM + RelevanceConstants.R_ENUM_CONSTANT +
-								RelevanceConstants.R_UNQUALIFIED + RelevanceConstants.R_NON_RESTRICTED)+ "}",
-						requestor.getResults());
-	}
-	public void test006() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/Switch.java",
-				"public class Switch {\n" + 
-						"	public static void bar(MyDay day) {\n" + 
-						"		switch (day.toS) {\n" + 
-						"		case \"SATURDAY\" -> \n" + 
-						"			System.out.println(day.toString());\n" + 
-						"		}\n" + 
-						"	}\n" + 
-						"	public static void main(String[] args) {\n" + 
-						"		bar(MyDay.SUNDAY);\n" + 
-						"	}\n" + 
-						"}\n" + 
-						"enum MyDay { SATURDAY, SUNDAY}");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "day.toS";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"toString[METHOD_REF]{toString(), Ljava.lang.Object;, ()Ljava.lang.String;, toString, null, 60}",
-						requestor.getResults());
-	}
-	public void test007() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/Switch.java",
-				"public class Switch {\n" + 
-						"	public static void bar(MyDay day) {\n" + 
-						"		switch (day.o) {\n" + 
-						"		case 0 -> \n" + 
-						"			System.out.println(day.toString());\n" + 
-						"		}\n" + 
-						"	}\n" + 
-						"	public static void main(String[] args) {\n" + 
-						"		bar(MyDay.SUNDAY);\n" + 
-						"	}\n" + 
-						"}\n" + 
-						"enum MyDay { SATURDAY, SUNDAY}");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "day.o";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"ordinal[METHOD_REF]{ordinal(), Ljava.lang.Enum<LMyDay;>;, ()I, ordinal, null, 60}",
-						requestor.getResults());
-	}
-	public void test008() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/Switch.java",
-				"public class Switch {\n" + 
-						"	public static void bar(MyDay day) {\n" + 
-						"		switch (1 + day.o) {\n" + 
-						"		case 0 -> \n" + 
-						"			System.out.println(day.toString());\n" + 
-						"		}\n" + 
-						"	}\n" + 
-						"	public static void main(String[] args) {\n" + 
-						"		bar(MyDay.SUNDAY);\n" + 
-						"	}\n" + 
-						"}\n" + 
-						"enum MyDay { SATURDAY, SUNDAY}");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "day.o";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"ordinal[METHOD_REF]{ordinal(), Ljava.lang.Enum<LMyDay;>;, ()I, ordinal, null, 90}",
-						requestor.getResults());
-	}
-	public void test009() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/Switch.java",
-				"public class Switch {\n" + 
-						"	public static void bar(MyDay day) {\n" + 
-						"		switch (1 + da) {\n" + 
-						"		case 0 -> \n" + 
-						"			System.out.println(day.toString());\n" + 
-						"		}\n" + 
-						"	}\n" + 
-						"	public static void main(String[] args) {\n" + 
-						"		bar(MyDay.SUNDAY);\n" + 
-						"	}\n" + 
-						"}\n" + 
-						"enum MyDay { SATURDAY, SUNDAY}");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "1 + da";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"day[LOCAL_VARIABLE_REF]{day, null, LMyDay;, day, null, 52}",
-						requestor.getResults());
-	}
-	public void test010() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/Switch.java",
-				"public class Switch {\n" + 
-						"	public static void bar(MyDay day) {\n" + 
-						"		switch (1 + da + 1) {\n" + 
-						"		case 0 -> \n" + 
-						"			System.out.println(day.toString());\n" + 
-						"		}\n" + 
-						"	}\n" + 
-						"	public static void main(String[] args) {\n" + 
-						"		bar(MyDay.SUNDAY);\n" + 
-						"	}\n" + 
-						"}\n" + 
-						"enum MyDay { SATURDAY, SUNDAY}");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "1 + da";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"day[LOCAL_VARIABLE_REF]{day, null, LMyDay;, day, null, 52}",
-						requestor.getResults());
-	}
-	public void test011() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/Switch.java",
-				"public class Switch {\n" + 
-						"	public static void bar(int arg0) {\n" + 
-						"		foo(\n" + 
-						"		switch (arg) {\n" + 
-						"		case 1 -> 1;\n" + 
-						"		default -> 0;\n" +
-						"		}\n" + 
-						"	});\n" + 
-						"	public static void foo(int arg0) {\n" + 
-						"		bar(MyDay.SUNDAY);\n" + 
-						"	}\n" + 
-						"}\n");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "switch (arg";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"arg0[LOCAL_VARIABLE_REF]{arg0, null, I, arg0, null, 52}",
-						requestor.getResults());
-	}
-	public void test012() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/Switch.java",
-				"public class Switch {\n" + 
-						"	public static void bar(int arg0) {\n" + 
-						"		foo(\n" + 
-						"		switch (arg0) {\n" + 
-						"		case 1 -> arg;\n" + 
-						"		default -> 0;\n" +
-						"		}\n" + 
-						"	});\n" + 
-						"	public static void foo(int arg0) {\n" + 
-						"		bar(MyDay.SUNDAY);\n" + 
-						"	}\n" + 
-						"}\n");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "-> arg";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"arg0[LOCAL_VARIABLE_REF]{arg0, null, I, arg0, null, 52}",
-						requestor.getResults());
-	}
-	public void test013() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/Switch.java",
-				"public class Switch {\n" + 
-						"	public static void bar(int arg0) {\n" + 
-						"		foo(\n" + 
-						"		switch (0 + arg) {\n" + 
-						"		case 1 -> 1;\n" + 
-						"		default -> 0;\n" +
-						"		}\n" + 
-						"	});\n" + 
-						"	public static void foo(int arg0) {\n" + 
-						"		bar(MyDay.SUNDAY);\n" + 
-						"	}\n" + 
-						"}\n");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "0 + arg";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"arg0[LOCAL_VARIABLE_REF]{arg0, null, I, arg0, null, 82}",
-						requestor.getResults());
-	}
-	public void test014() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/X.java",
-				"public class X {\n" + 
-						"	public static void bar(int arg0) {\n" + 
-						"		foo(\n" + 
-						"		swi);\n" + 
-						"	public static void foo(int arg0) {\n" + 
-						"		bar(MyDay.SUNDAY);\n" + 
-						"	}\n" + 
-						"}\n");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "swi";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"switch[KEYWORD]{switch, null, null, switch, null, 49}",
-						requestor.getResults());
-	}
-	public void _test015() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/X.java",
-				"public class Switch {\n" + 
-						"	public static void bar(int arg0) {\n" + 
-						"		foo(\n" + 
-						"		switch (0 + arg0) {\n" + 
-						"		case 1 -> {break ar;}\n" + 
-						"		default -> 0;\n" +
-						"		}\n" + 
-						"	});\n" + 
-						"	public static void foo(int arg0) {\n" + 
-						"		bar(MyDay.SUNDAY);\n" + 
-						"	}\n" + 
-						"}\n");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "break ar";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"arg0[LOCAL_VARIABLE_REF]{arg0, null, I, arg0, null, 52}",
-						requestor.getResults());
-	}
-	public void test016() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/X.java",
-				"public class Switch {\n" + 
-						"	public static void bar(int arg0) {\n" + 
-						"		foo(\n" + 
-						"		switch (0 + arg0) {\n" + 
-						"		case 1 -> {break 1;}\n" + 
-						"		default -> ar;\n" +
-						"		}\n" + 
-						"	});\n" + 
-						"	public static void foo(int arg0) {\n" + 
-						"		bar(MyDay.SUNDAY);\n" + 
-						"	}\n" + 
-						"}\n");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "-> ar";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"arg0[LOCAL_VARIABLE_REF]{arg0, null, I, arg0, null, 52}",
-						requestor.getResults());
-	}
-	public void _test017() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/X.java",
-				"public class Switch {\n" + 
-						"	public static void bar(int arg0) {\n" + 
-						"		int arg1 = 0;\n" + 
-						"		foo(\n" + 
-						"		switch (0 + arg0) {\n" + 
-						"		case 1 -> 1;\n" + 
-						"		default -> {break ar;}\n" +
-						"		}\n" + 
-						"	});\n" + 
-						"	public static void foo(int arg0) {\n" + 
-						"		bar(MyDay.SUNDAY);\n" + 
-						"	}\n" + 
-						"}\n");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "break ar";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"arg0[LOCAL_VARIABLE_REF]{arg0, null, I, arg0, null, 52}",
-						requestor.getResults());
-	}
-	public void _test017a() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/X.java",
-				"public class Switch {\n" + 
-						"	public static void bar(int arg0) {\n" + 
-						"		foo(\n" + 
-						"		argLabel: switch (0 + arg0) {\n" + 
-						"		case 1 -> 1;\n" + 
-						"		default -> {break ar;}\n" +
-						"		}\n" + 
-						"	});\n" + 
-						"	public static void foo(int arg0) {\n" + 
-						"		bar(MyDay.SUNDAY);\n" + 
-						"	}\n" + 
-						"}\n");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "break ar";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"arg0[LOCAL_VARIABLE_REF]{arg0, null, I, arg0, null, 52}\n" +
-				"argLabel[LABEL_REF]{argLabel, null, null, argLabel, null, 49}",
-						requestor.getResults());
-	}
-	public void test018a() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/X.java",
-				"import org.eclipse.jdt.annotation.*;\n" + 
-				"import java.util.function.*;\n" + 
-				"interface IN0 {} \n" + 
-				"interface IN1 extends IN0 {} \n" + 
-				"interface IN2 extends IN0 {}\n" + 
-				"public class X {\n" + 
-				"	@NonNull IN1 n_1() { return new IN1() {}; } \n" + 
-				"	IN2 n_2() { return null; } \n" + 
-				"	<M> void m(@NonNull Supplier<@NonNull M> m2) { } \n" + 
-				"	void testSw(int i) { \n" + 
-				"		m(switch(i) { \n" + 
-				"			case 1 -> this::n_; \n" + 
-				"			case 2 -> () -> n1(); \n" + 
-				"			case 3 -> null; \n" + 
-				"			case 4 -> () -> n2(); \n" + 
-				"			default -> this::n2; }); \n" + 
-				"	}\n" + 
-				"}");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "this::n_";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"n_1[METHOD_NAME_REFERENCE]{n_1, LX;, ()LIN1;, n_1, null, 60}\n" + 
-				"n_2[METHOD_NAME_REFERENCE]{n_2, LX;, ()LIN2;, n_2, null, 60}",
-						requestor.getResults());
-	}
-	public void test018b() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/X.java",
-				"import org.eclipse.jdt.annotation.*;\n" + 
-				"interface IN0 {} \n" + 
-				"interface IN1 extends IN0 {} \n" + 
-				"interface IN2 extends IN0 {}\n" + 
-				"public class X {\n" + 
-				"	@NonNull IN1 n_1() { return new IN1() {}; } \n" + 
-				"	IN2 n_2() { return null; } \n" + 
-				"	<M> void m(@NonNull Supplier<@NonNull M> m2) { } \n" + 
-				"	void testSw(int i) { \n" + 
-				"		m(switch(i) { \n" + 
-				"			case 2 -> () -> n_; \n" + 
-				"	}\n" + 
-				"}\n" +
-				"interface Supplier<T> {\n" + 
-				"    T get();\n" + 
-				"}");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "-> n_";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"n_1[METHOD_REF]{n_1(), LX;, ()LIN1;, n_1, null, 52}\n" + 
-				"n_2[METHOD_REF]{n_2(), LX;, ()LIN2;, n_2, null, 52}",
-						requestor.getResults());
-	}
-	public void test018c() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/X.java",
-				"import org.eclipse.jdt.annotation.*;\n" + 
-				"interface IN0 {} \n" + 
-				"interface IN1 extends IN0 {} \n" + 
-				"interface IN2 extends IN0 {}\n" + 
-				"public class X {\n" + 
-				"	@NonNull IN1 n_1() { return new IN1() {}; } \n" + 
-				"	IN2 n_2() { return null; } \n" + 
-				"	<M> void m(@NonNull Supplier<@NonNull M> m2) { } \n" + 
-				"	void testSw(int i) { \n" + 
-				"		m(switch(i) { \n" + 
-				"			default -> this::n_; }); \n" + 
-				"	}\n" + 
-				"}\n" +
-				"interface Supplier<T> {\n" + 
-				"    T get();\n" + 
-				"}");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "this::n_";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"n_1[METHOD_NAME_REFERENCE]{n_1, LX;, ()LIN1;, n_1, null, 60}\n" + 
-				"n_2[METHOD_NAME_REFERENCE]{n_2, LX;, ()LIN2;, n_2, null, 60}",
-						requestor.getResults());
-	}
-	public void test018d() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/X.java",
-				"import org.eclipse.jdt.annotation.*;\n" + 
-				"interface IN0 {} \n" + 
-				"interface IN1 extends IN0 {} \n" + 
-				"interface IN2 extends IN0 {}\n" + 
-				"public class X {\n" + 
-				"	@NonNull IN1 n_1() { return new IN1() {}; } \n" + 
-				"	IN2 n_2() { return null; } \n" + 
-				"	<M> void m(@NonNull Supplier<@NonNull M> m2) { } \n" + 
-				"	void testSw(int i) { \n" + 
-				"		m(switch(i) { \n" + 
-				"			default -> () -> n_; }); \n" + 
-				"	}\n" + 
-				"}\n" +
-				"interface Supplier<T> {\n" + 
-				"    T get();\n" + 
-				"}");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "() -> n_";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"n_1[METHOD_REF]{n_1(), LX;, ()LIN1;, n_1, null, 52}\n" + 
-				"n_2[METHOD_REF]{n_2(), LX;, ()LIN2;, n_2, null, 52}",
-						requestor.getResults());
-	}
-	public void test018e() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/X.java",
-				"import org.eclipse.jdt.annotation.*;\n" + 
-				"interface IN0 {} \n" + 
-				"interface IN1 extends IN0 {} \n" + 
-				"interface IN2 extends IN0 {}\n" + 
-				"public class X {\n" + 
-				"	@NonNull IN1 n_1() { return new IN1() {}; } \n" + 
-				"	IN2 n_2() { return null; } \n" + 
-				"	<M> void m(@NonNull Supplier<@NonNull M> m2) { } \n" + 
-				"	void testSw(int i) { \n" + 
-				"		m(switch(i) { \n" + 
-				"			case 1 -> this::n_1; \n" + 
-				"			case 2 -> () -> n_; \n" + 
-				"	}\n" + 
-				"}\n" +
-				"interface Supplier<T> {\n" + 
-				"    T get();\n" + 
-				"}");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "() -> n_";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"n_1[LOCAL_VARIABLE_REF]{n_1, null, Ljava.lang.Object;, n_1, null, 51}\n" + 
-				"n_1[METHOD_REF]{n_1(), LX;, ()LIN1;, n_1, null, 52}\n" + 
-				"n_2[METHOD_REF]{n_2(), LX;, ()LIN2;, n_2, null, 52}",
-						requestor.getResults());
-	}
-	public void test018f() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/X.java",
-				"import org.eclipse.jdt.annotation.*;\n" + 
-				"interface IN0 {} \n" + 
-				"interface IN1 extends IN0 {} \n" + 
-				"interface IN2 extends IN0 {}\n" + 
-				"public class X {\n" + 
-				"	@NonNull IN1 n_1() { return new IN1() {}; } \n" + 
-				"	IN2 n_2() { return null; } \n" + 
-				"	<M> void m(@NonNull Supplier<@NonNull M> m2) { } \n" + 
-				"	void testSw(int i) { \n" + 
-				"		m(switch(i) { \n" + 
-				"			case 1 -> () -> n_1; \n" + 
-				"			case 2 -> this::n_; \n" + 
-				"	}\n" + 
-				"}\n" +
-				"interface Supplier<T> {\n" + 
-				"    T get();\n" + 
-				"}");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "this::n_";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"n_1[METHOD_NAME_REFERENCE]{n_1, LX;, ()LIN1;, n_1, null, 60}\n" + 
-				"n_2[METHOD_NAME_REFERENCE]{n_2, LX;, ()LIN2;, n_2, null, 60}",
-						requestor.getResults());
-	}
-	public void test019() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/X.java",
-				"import org.eclipse.jdt.annotation.*;\n" + 
-				"	<M> void m(@NonNull Supplier<@NonNull M> m2) { } \n" + 
-				"public class X {\n" + 
-				"	void testSw(int i) { \n" + 
-				"		m(swi);\n" + 
-				"}\n" +
-				"interface Supplier<T> {\n" + 
-				"    T get();\n" + 
-				"}");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "swi";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"switch[KEYWORD]{switch, null, null, switch, null, 49}",
-						requestor.getResults());
-	}
-	public void test020() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/X.java",
-				"public class X {\n" + 
-				"	static final String MONDAY = \"MONDAY\";\n" + 
-				"	static final String TUESDAY = \"TUESDAY\";\n" + 
-				"	static final String WEDNESDAY = \"WEDNESDAY\";\n" + 
-				"	static final String THURSDAY = \"THURSDAY\";\n" + 
-				"	static final String FRIDAY = \"FRIDAY\";\n" + 
-				"	static final String SATURDAY = \"SATURDAY\";\n" + 
-				"	static final String SUNDAY = \"SUNDAY\"; \n" + 
-				"	@SuppressWarnings(\"preview\")\n" + 
-				"	public static void main(String[] args) {\n" + 
-				"		String day = \"MONDAY\";\n" + 
-				"		switch (day) {\n" + 
-				"		    case MONDAY, FRIDAY, SUNDAY  -> System.out.println(6);\n" + 
-				"		    case TUESDAY           		 -> System.out.println(7);\n" + 
-				"		    case THURSDAY, SATURDAY     -> System.out.println(8);\n" + 
-				"		    case WEDNESDAY              -> System.out.println(9);\n" + 
-				"		}\n" + 
-				"		int k = switch (day) {\n" + 
-				"	    case MONDAY  -> throw new NullPointerException();\n" + 
-				"	    case TUESDAY -> 1;\n" + 
-				"	    case WEDNESDAY -> {break 10;}\n" + 
-				"	    default      -> {\n" + 
-				"	        int g = day.h();\n" + 
-				"	        int result = f(g);\n" + 
-				"	        break result;\n" + 
-				"	    }};\n" + 
-				"	}\n" + 
-				"	static int f(int k) {\n" + 
-				"		return k*k;\n" + 
-				"	}\n" + 
-				"}");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "day.h";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"hashCode[METHOD_REF]{hashCode, Ljava.lang.Object;, ()I, hashCode, null, 90}",
-						requestor.getResults());
-	}
-	public void test021() throws JavaModelException {
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/Completion/src/X.java",
-				"public class X {\n" + 
-				"	static final String MONDAY = \"MONDAY\";\n" + 
-				"	static final String TUESDAY = \"TUESDAY\";\n" + 
-				"	static final String WEDNESDAY = \"WEDNESDAY\";\n" + 
-				"	static final String THURSDAY = \"THURSDAY\";\n" + 
-				"	static final String FRIDAY = \"FRIDAY\";\n" + 
-				"	static final String SATURDAY = \"SATURDAY\";\n" + 
-				"	static final String SUNDAY = \"SUNDAY\"; \n" + 
-				"	@SuppressWarnings(\"preview\")\n" + 
-				"	public static void main(String[] args) {\n" + 
-				"		String day = \"MONDAY\";\n" + 
-				"		int k = switch (day) {\n" + 
-				"	    case MONDAY  -> throw new NullPointerException();\n" + 
-				"	    case TUESDAY -> 1;\n" + 
-				"	    case WEDNESDAY -> {break 10;}\n" + 
-				"	    default      -> {\n" + 
-				"	        int g = day.h();\n" + 
-				"	        int result = f(g);\n" + 
-				"	        break result;\n" + 
-				"	    }};\n" + 
-				"	}\n" + 
-				"	static int f(int k) {\n" + 
-				"		return k*k;\n" + 
-				"	}\n" + 
-				"}");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.allowAllRequiredProposals();
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "day.h";
-		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"hashCode[METHOD_REF]{hashCode, Ljava.lang.Object;, ()I, hashCode, null, 90}",
-						requestor.getResults());
-	}
-}
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests3.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests3.java
index bdae724..77022c6 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests3.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CompletionTests3.java
@@ -39,7 +39,7 @@
 //https://bugs.eclipse.org/bugs/show_bug.cgi?id=338398
 public void testBug338398a() throws CoreException {
 	try {
-		createJavaProject("P", new String[] {"src"}, new String[]{"JCL17_LIB"}, "bin", "1.7");
+		createJavaProject("P", new String[] {"src"}, new String[]{"JCL_LIB"}, "bin", "1.7");
 		this.workingCopies = new ICompilationUnit[2];
 		this.workingCopies[0] = getWorkingCopy(
 			"/P/src/a/A.java",
@@ -74,7 +74,7 @@
 }
 public void _testBug338398b() throws CoreException {
 	try {
-		createJavaProject("P", new String[] {"src"}, new String[]{"JCL17_LIB"}, "bin", "1.7");
+		createJavaProject("P", new String[] {"src"}, new String[]{"JCL_LIB"}, "bin", "1.7");
 		this.workingCopies = new ICompilationUnit[2];
 		this.workingCopies[0] = getWorkingCopy(
 			"/P/src/a/A_CLASS.java",
@@ -100,7 +100,7 @@
 }
 public void _testBug338398c() throws CoreException {
 	try {
-		createJavaProject("P", new String[] {"src"}, new String[]{"JCL17_LIB"}, "bin", "1.7");
+		createJavaProject("P", new String[] {"src"}, new String[]{"JCL_LIB"}, "bin", "1.7");
 		this.workingCopies = new ICompilationUnit[2];
 		this.workingCopies[0] = getWorkingCopy(
 			"/P/src/a/A_CLASS.java",
@@ -126,7 +126,7 @@
 }
 public void testBug504095() throws CoreException {
 	try {
-		createJavaProject("P", new String[] {"src"}, new String[]{"JCL17_LIB"}, "bin", "1.7");
+		createJavaProject("P", new String[] {"src"}, new String[]{"JCL_LIB"}, "bin", "1.7");
 		this.workingCopies = new ICompilationUnit[2];
 		this.workingCopies[0] = getWorkingCopy(
 			"/P/src/a/Bug504095.java",
@@ -155,7 +155,7 @@
 }
 public void testBug425035a() throws CoreException {
 	try {
-		createJavaProject("P", new String[] {"src"}, new String[]{"JCL17_LIB"}, "bin", "1.7");
+		createJavaProject("P", new String[] {"src"}, new String[]{"JCL_LIB"}, "bin", "1.7");
 		this.workingCopies = new ICompilationUnit[3];
 		this.workingCopies[0] = getWorkingCopy(
 				"/P/src/a/Values.java",
@@ -196,7 +196,7 @@
 }
 public void testBug425035b() throws CoreException {
 	try {
-		createJavaProject("P", new String[] {"src"}, new String[]{"JCL17_LIB"}, "bin", "1.7");
+		createJavaProject("P", new String[] {"src"}, new String[]{"JCL_LIB"}, "bin", "1.7");
 		this.workingCopies = new ICompilationUnit[3];
 		this.workingCopies[0] = getWorkingCopy(
 				"/P/src/a/Values.java",
@@ -236,7 +236,7 @@
 }
 public void testBug425035c() throws CoreException {
 	try {
-		createJavaProject("P", new String[] {"src"}, new String[]{"JCL17_LIB"}, "bin", "1.7");
+		createJavaProject("P", new String[] {"src"}, new String[]{"JCL_LIB"}, "bin", "1.7");
 		this.workingCopies = new ICompilationUnit[3];
 		this.workingCopies[0] = getWorkingCopy(
 				"/P/src/a/Values.java",
@@ -277,7 +277,7 @@
 }
 public void testBug425035d() throws CoreException {
 	try {
-		createJavaProject("P", new String[] {"src"}, new String[]{"JCL17_LIB"}, "bin", "1.7");
+		createJavaProject("P", new String[] {"src"}, new String[]{"JCL_LIB"}, "bin", "1.7");
 		this.workingCopies = new ICompilationUnit[3];
 		this.workingCopies[0] = getWorkingCopy(
 				"/P/src/a/Values.java",
@@ -317,7 +317,7 @@
 }
 public void testBug425035e() throws CoreException {
 	try {
-		createJavaProject("P", new String[] {"src"}, new String[]{"JCL17_LIB"}, "bin", "1.7");
+		createJavaProject("P", new String[] {"src"}, new String[]{"JCL_LIB"}, "bin", "1.7");
 		this.workingCopies = new ICompilationUnit[3];
 		this.workingCopies[0] = getWorkingCopy(
 				"/P/src/a/Values.java",
@@ -357,7 +357,7 @@
 }
 public void testBug425035f() throws CoreException {
 	try {
-		createJavaProject("P", new String[] {"src"}, new String[]{"JCL17_LIB"}, "bin", "1.7");
+		createJavaProject("P", new String[] {"src"}, new String[]{"JCL_LIB"}, "bin", "1.7");
 		this.workingCopies = new ICompilationUnit[3];
 		this.workingCopies[0] = getWorkingCopy(
 				"/P/src/a/Values.java",
@@ -398,7 +398,7 @@
 }
 public void testBug425035_method_a() throws CoreException {
 	try {
-		createJavaProject("P", new String[] {"src"}, new String[]{"JCL17_LIB"}, "bin", "1.7");
+		createJavaProject("P", new String[] {"src"}, new String[]{"JCL_LIB"}, "bin", "1.7");
 		this.workingCopies = new ICompilationUnit[3];
 		this.workingCopies[0] = getWorkingCopy(
 				"/P/src/a/Values.java",
@@ -442,7 +442,7 @@
 }
 public void testBug425035_method_b() throws CoreException {
 	try {
-		createJavaProject("P", new String[] {"src"}, new String[]{"JCL17_LIB"}, "bin", "1.7");
+		createJavaProject("P", new String[] {"src"}, new String[]{"JCL_LIB"}, "bin", "1.7");
 		this.workingCopies = new ICompilationUnit[3];
 		this.workingCopies[0] = getWorkingCopy(
 				"/P/src/a/Values.java",
@@ -485,7 +485,7 @@
 }
 public void testBug425035_method_c() throws CoreException {
 	try {
-		createJavaProject("P", new String[] {"src"}, new String[]{"JCL17_LIB"}, "bin", "1.7");
+		createJavaProject("P", new String[] {"src"}, new String[]{"JCL_LIB"}, "bin", "1.7");
 		this.workingCopies = new ICompilationUnit[3];
 		this.workingCopies[0] = getWorkingCopy(
 				"/P/src/a/Values.java",
@@ -529,7 +529,7 @@
 }
 public void testBug425035_method_d() throws CoreException {
 	try {
-		createJavaProject("P", new String[] {"src"}, new String[]{"JCL17_LIB"}, "bin", "1.7");
+		createJavaProject("P", new String[] {"src"}, new String[]{"JCL_LIB"}, "bin", "1.7");
 		this.workingCopies = new ICompilationUnit[3];
 		this.workingCopies[0] = getWorkingCopy(
 				"/P/src/a/Values.java",
@@ -572,7 +572,7 @@
 }
 public void testBug425035_method_e() throws CoreException {
 	try {
-		createJavaProject("P", new String[] {"src"}, new String[]{"JCL17_LIB"}, "bin", "1.7");
+		createJavaProject("P", new String[] {"src"}, new String[]{"JCL_LIB"}, "bin", "1.7");
 		this.workingCopies = new ICompilationUnit[3];
 		this.workingCopies[0] = getWorkingCopy(
 				"/P/src/a/Values.java",
@@ -615,7 +615,7 @@
 }
 public void testBug425035_method_f() throws CoreException {
 	try {
-		createJavaProject("P", new String[] {"src"}, new String[]{"JCL17_LIB"}, "bin", "1.7");
+		createJavaProject("P", new String[] {"src"}, new String[]{"JCL_LIB"}, "bin", "1.7");
 		this.workingCopies = new ICompilationUnit[3];
 		this.workingCopies[0] = getWorkingCopy(
 				"/P/src/a/Values.java",
@@ -657,37 +657,4 @@
 		deleteProject("P");
 	}
 }
-public void testBug547256() throws CoreException {
-	try {
-		createJavaProject("P", new String[] {"src"}, new String[]{"JCL17_LIB"}, "bin", "1.7");
-		this.workingCopies = new ICompilationUnit[1];
-		this.workingCopies[0] = getWorkingCopy(
-				"/P/src/jdt/Something.java",
-				"package jdt;\n" + 
-				"public class Something {\n" + 
-				"	public static void main(String[] args) {\n" + 
-				"		done: for (int i = 0; i < 5; ++i) {\n" + 
-				"			if (i == 3) {\n" + 
-				"				break done;\n" + 
-				"			}\n" + 
-				"			System.out.println(i);\n" + 
-				"		}\n" +
-				"		arg\n" + 
-				"		System.out.println(\"done\");\n" + 
-				"	}\n" + 
-				"}\n");
-		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
-		requestor.setAllowsRequiredProposals(CompletionProposal.FIELD_REF, CompletionProposal.TYPE_REF, true);
-		String str = this.workingCopies[0].getSource();
-		String completeBehind = "arg";
-		int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
-		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
-		assertResults(
-				"args[LOCAL_VARIABLE_REF]{args, null, [Ljava.lang.String;, args, null, 52}",
-				requestor.getResults());
-
-	} finally {
-		deleteProject("P");
-	}
-}
 }
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaModelManagerTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaModelManagerTests.java
index 0567191..65b052d 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaModelManagerTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaModelManagerTests.java
@@ -23,17 +23,11 @@
 import org.eclipse.jdt.internal.core.JavaElement;
 import org.eclipse.jdt.internal.core.nd.indexer.Indexer;
 
-import junit.framework.Test;
-
 public class JavaModelManagerTests extends AbstractJavaModelTests {
 
 	private static final IProgressMonitor NULL_MONITOR = new NullProgressMonitor();
 	private static final String PROJECT_NAME = JavaModelManagerTests.class.getSimpleName();
 
-	public static Test suite() {
-		return buildModelTestSuite(JavaModelManagerTests.class);
-	}
-
 	public JavaModelManagerTests(String name) {
 		super(name);
 	}
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaProjectTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaProjectTests.java
index 03ba5f5..765a045 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaProjectTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaProjectTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2018 IBM Corporation and others.
+ * Copyright (c) 2000, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -8,6 +8,10 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ * 
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Stephan Herrmann <stephan@cs.tu-berlin.de> - inconsistent initialization of classpath container backed by external class folder, see https://bugs.eclipse.org/320618
@@ -2684,7 +2688,7 @@
 		proj.getProject().build(IncrementalProjectBuilder.FULL_BUILD, null);
 
 		try {
-			ASTParser parser= ASTParser.newParser(AST_INTERNAL_JLS11);
+			ASTParser parser= ASTParser.newParser(AST_INTERNAL_LATEST);
 			parser.setSource(unit);
 			parser.setResolveBindings(true);
 			ASTNode node = parser.createAST(null);
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaSearchBugs12Tests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaSearchBugs12Tests.java
deleted file mode 100644
index c1fced3..0000000
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaSearchBugs12Tests.java
+++ /dev/null
@@ -1,626 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2019 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jdt.core.tests.model;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.WorkingCopyOwner;
-import org.eclipse.jdt.core.search.IJavaSearchScope;
-import org.eclipse.jdt.core.search.ReferenceMatch;
-import org.eclipse.jdt.core.search.SearchEngine;
-import org.eclipse.jdt.core.search.SearchMatch;
-import org.eclipse.jdt.core.search.TypeReferenceMatch;
-
-import junit.framework.Test;
-
-public class JavaSearchBugs12Tests extends AbstractJavaSearchTests {
-
-	static {
-//	 org.eclipse.jdt.internal.core.search.BasicSearchEngine.VERBOSE = true;
-//		TESTS_NUMBERS = new int[] { 19 };
-//		TESTS_RANGE = new int[] { 1, -1 };
-//		TESTS_NAMES = new String[] {"testBug542559_001"};
-}
-
-public JavaSearchBugs12Tests(String name) {
-	super(name);
-	this.endChar = "";
-}
-public static Test suite() {
-	return buildModelTestSuite(JavaSearchBugs12Tests.class, BYTECODE_DECLARATION_ORDER);
-}
-class TestCollector extends JavaSearchResultCollector {
-	public void acceptSearchMatch(SearchMatch searchMatch) throws CoreException {
-		super.acceptSearchMatch(searchMatch);
-	}
-}
-class ReferenceCollector extends JavaSearchResultCollector {
-	protected void writeLine() throws CoreException {
-		super.writeLine();
-		ReferenceMatch refMatch = (ReferenceMatch) this.match;
-		IJavaElement localElement = refMatch.getLocalElement();
-		if (localElement != null) {
-			this.line.append("+[");
-			if (localElement.getElementType() == IJavaElement.ANNOTATION) {
-				this.line.append('@');
-				this.line.append(localElement.getElementName());
-				this.line.append(" on ");
-				this.line.append(localElement.getParent().getElementName());
-			} else {
-				this.line.append(localElement.getElementName());
-			}
-			this.line.append(']');
-		}
-	}
-
-}
-class TypeReferenceCollector extends ReferenceCollector {
-	protected void writeLine() throws CoreException {
-		super.writeLine();
-		TypeReferenceMatch typeRefMatch = (TypeReferenceMatch) this.match;
-		IJavaElement[] others = typeRefMatch.getOtherElements();
-		int length = others==null ? 0 : others.length;
-		if (length > 0) {
-			this.line.append("+[");
-			for (int i=0; i<length; i++) {
-				IJavaElement other = others[i];
-				if (i>0) this.line.append(',');
-				if (other.getElementType() == IJavaElement.ANNOTATION) {
-					this.line.append('@');
-					this.line.append(other.getElementName());
-					this.line.append(" on ");
-					this.line.append(other.getParent().getElementName());
-				} else {
-					this.line.append(other.getElementName());
-				}
-			}
-			this.line.append(']');
-		}
-	}
-}
-
-IJavaSearchScope getJavaSearchScope() {
-	return SearchEngine.createJavaSearchScope(new IJavaProject[] {getJavaProject("JavaSearchBugs")});
-}
-IJavaSearchScope getJavaSearchScopeBugs(String packageName, boolean addSubpackages) throws JavaModelException {
-	if (packageName == null) return getJavaSearchScope();
-	return getJavaSearchPackageScope("JavaSearchBugs", packageName, addSubpackages);
-}
-public ICompilationUnit getWorkingCopy(String path, String source) throws JavaModelException {
-	if (this.wcOwner == null) {
-		this.wcOwner = new WorkingCopyOwner() {};
-	}
-	return getWorkingCopy(path, source, this.wcOwner);
-}
-@Override
-public void setUpSuite() throws Exception {
-	super.setUpSuite();
-	JAVA_PROJECT = setUpJavaProject("JavaSearchBugs", "12");
-}
-public void tearDownSuite() throws Exception {
-	deleteProject("JavaSearchBugs");
-	super.tearDownSuite();
-}
-protected void setUp () throws Exception {
-	super.setUp();
-	this.resultCollector = new TestCollector();
-	this.resultCollector.showAccuracy(true);
-}
-
-public void testBug542559_001() throws CoreException {
-	this.workingCopies = new ICompilationUnit[1];
-	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
-			"public class X {\n" +
-			"	int switch_expr_field = 10;\n" +
-			"	int twice(int i) {\n" +
-			"		int tw = switch (i) {\n" +
-			"			case 0 -> switch_expr_field * 0;\n" +
-			"			case 1 -> 2;\n" +
-			"			default -> 3;\n" +
-			"		};\n" +
-			"		return tw;\n" +
-			"	}\n" +
-			"	public static void main(String... args) {\n" +
-			"		System.out.print(new X().twice(3));\n" +
-			"	}\n" +
-			"}\n"
-			);
-	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
-	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
-	try {
-		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
-		search("switch_expr_field", FIELD, REFERENCES);
-		assertSearchResults("src/X.java int X.twice(int) [switch_expr_field] EXACT_MATCH");
-	} finally {
-		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
-	}
-}
-public void testBug542559_002() throws CoreException {
-	this.workingCopies = new ICompilationUnit[1];
-	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
-			"public class X {\n" +
-			"	int switch_expr_field = 10;\n" +
-			"	int twice(int i) {\n" +
-			"		int tw = switch (i) {\n" +
-			"			case 0 -> switch_expr_field * 0;\n" +
-			"			case 1 -> { break switch_expr_field; }\n" +
-			"			default -> 3;\n" +
-			"		};\n" +
-			"		return tw;\n" +
-			"	}\n" +
-			"	public static void main(String... args) {\n" +
-			"		System.out.print(new X().twice(3));\n" +
-			"	}\n" +
-			"}\n"
-			);
-	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
-	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
-	try {
-		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
-		search("switch_expr_field", FIELD, REFERENCES);
-		assertSearchResults(
-				"src/X.java int X.twice(int) [switch_expr_field] EXACT_MATCH\n" +
-				"src/X.java int X.twice(int) [switch_expr_field] EXACT_MATCH"
-		);
-	} finally {
-		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
-	}
-}
-public void testBug542559_003() throws CoreException {
-	this.workingCopies = new ICompilationUnit[1];
-	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
-			"public class X {\n" +
-			"        int switch_expr_field = 10; \n" +
-			"        int twice(int i) throws Exception {      \n" +
-			"                int tw = switch (i) {   \n" +
-			"                        case 0 -> { break switch_expr_field; }  \n" +
-			"                        case 4 -> throw new MyException();  \n" +
-			"                        default -> 3;           \n" +
-			"                };      \n" +
-			"                return tw;              \n" +
-			"        }               \n" +
-			"        public static void main(String[] args) {\n" +
-			"                try {\n" +
-			"                                       System.out.print(new X().twice(3));\n" +
-			"                               } catch (Exception e) {\n" +
-			"                                       // TODO Auto-generated catch block\n" +
-			"                                       e.printStackTrace();\n" +
-			"                               }\n" +
-			"        }               \n" +
-			"}\n" +
-			"class MyException extends Exception {\n" +
-			"       private static final long serialVersionUID = 3461899582505930474L;\n" +
-			"       \n" +
-			"}\n"
-			);
-	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
-	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
-	try {
-		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
-		IType type = this.workingCopies[0].getType("MyException");
-		search(type, REFERENCES);
-		assertSearchResults(
-				"src/X.java int X.twice(int) [MyException] EXACT_MATCH"
-		);
-	} finally {
-		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
-	}
-}
-/*
- * java search reference for an integer in default block of switch expression
- */
-public void testBug542559_004() throws CoreException {
-	this.workingCopies = new ICompilationUnit[1];
-	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
-			"public class X {\n" +
-			"	int switch_expr_field = 10;\n" +
-			"	int twice(int i) {\n" +
-			"		int tw = switch (i) {\n" +
-			"			case 0 -> switch_expr_field * 0;\n" +
-			"			case 1 -> 2;\n" +
-			"			default ->{ \n" +
-			"			switch_expr_field*9; \n" +
-			"		}};\n" +
-			"		return tw;\n" +
-			"	}\n" +
-			"	public static void main(String... args) {\n" +
-			"		System.out.print(new X().twice(3));\n" +
-			"	}\n" +
-			"}\n"
-			);
-	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
-	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
-	try {
-		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
-		search("switch_expr_field", FIELD, REFERENCES);
-		assertSearchResults(
-				"src/X.java int X.twice(int) [switch_expr_field] EXACT_MATCH\n" +
-				"src/X.java int X.twice(int) [switch_expr_field] EXACT_MATCH"
-		);
-	} finally {
-		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
-	}
-}
-
-/*
- * java search reference for an integer in default of switch expression
- */
-public void testBug542559_005() throws CoreException {
-	this.workingCopies = new ICompilationUnit[1];
-	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
-			"public class X {\n" +
-			"	int switch_expr_field = 10;\n" +
-			"	int twice(int i) {\n" +
-			"		int tw = switch (i) {\n" +
-			"			case 0 -> switch_expr_field * 0;\n" +
-			"			case 1 -> 2;\n" +
-			"			default -> switch_expr_field*9;\n" +
-			"		};\n" +
-			"		return tw;\n" +
-			"	}\n" +
-			"	public static void main(String... args) {\n" +
-			"		System.out.print(new X().twice(3));\n" +
-			"	}\n" +
-			"}\n"
-			);
-	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
-	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
-	try {
-		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
-		search("switch_expr_field", FIELD, REFERENCES);
-		assertSearchResults(
-				"src/X.java int X.twice(int) [switch_expr_field] EXACT_MATCH\n" +
-				"src/X.java int X.twice(int) [switch_expr_field] EXACT_MATCH"
-		);
-	} finally {
-		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
-	}
-}
-
-/*
- * java search reference for simple multi constant case statement for enum
- */
-public void testBug542559_006() throws CoreException {
-	this.workingCopies = new ICompilationUnit[1];
-	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
-			"public class X {\n" +
-					"enum Day { SATURDAY, SUNDAY, MONDAY;}\n" +
-					"public static void bar(Day day) {\n" +
-					"		switch (day) {\n" +
-					"		case SATURDAY, SUNDAY: \n" +
-					"			System.out.println(Day.SUNDAY);\n" +
-					"			break;\n" +
-					"		case MONDAY : System.out.println(Day.MONDAY);\n" +
-					"					break;\n" +
-					"		}\n" +
-					"	}" +
-					"	public static void main(String[] args) {\n" +
-					"		bar(Day.SATURDAY);\n" +
-					"	}\n"
-					+
-					"}\n"
-			);
-	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
-	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
-	try {
-		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
-		search("SATURDAY", FIELD, REFERENCES);
-		assertSearchResults(
-				"src/X.java void X.bar(Day) [SATURDAY] EXACT_MATCH\n"+
-				"src/X.java void X.main(String[]) [SATURDAY] EXACT_MATCH"
-		);
-	} finally {
-		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
-	}
-}
-/*
- * java search reference for simple multi constant case statement for enum, 2nd case
- */
-public void testBug542559_007() throws CoreException {
-	this.workingCopies = new ICompilationUnit[1];
-	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
-			"public class X {\n" +
-					"enum Day { SATURDAY, SUNDAY, MONDAY;}\n" +
-					"public static void bar(Day day) {\n" +
-					"		switch (day) {\n" +
-					"		case SATURDAY, SUNDAY: \n" +
-					"			System.out.println(Day.SUNDAY);\n" +
-					"			break;\n" +
-					"		case MONDAY : System.out.println(Day.MONDAY);\n" +
-					"					break;\n" +
-					"		}\n" +
-					"	}" +
-					"	public static void main(String[] args) {\n" +
-					"		bar(Day.SATURDAY);\n" +
-					"	}\n"
-					+
-					"}\n"
-			);
-	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
-	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
-	try {
-		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
-		search("SUNDAY", FIELD, REFERENCES);
-		assertSearchResults(
-				"src/X.java void X.bar(Day) [SUNDAY] EXACT_MATCH\n"+
-				"src/X.java void X.bar(Day) [SUNDAY] EXACT_MATCH"
-		);
-	} finally {
-		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
-	}
-}
-
-/*
- * java search reference for class file reference in switch expression
- */
-public void testBug542559_008() throws CoreException {
-	this.workingCopies = new ICompilationUnit[1];
-	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X2.java",
-			"public class X2 {\n" +
-			"   String s = new String();        \n" +
-			"	int switch_expr_field = 10;\n" +
-			"	int twice(int i) {\n" +
-			"		int tw = switch (i) {\n" +
-			"			case 0 -> switch_expr_field * 0;\n" +
-			"			case 1 -> 2;\n" +
-			"			default -> new X2().toString().length();\n" +
-			"		};\n" +
-			"		return tw;\n" +
-			"	}\n" +
-			"	public static void main(String... args) {\n" +
-			"		System.out.print(new X2().twice(3));\n" +
-			"	}\n" +
-			"}\n"
-			);
-	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
-	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
-	try {
-		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
-		search("X2", CLASS, REFERENCES);
-		assertSearchResults(
-		"src/X2.java int X2.twice(int) [X2] EXACT_MATCH\n"+
-		"src/X2.java void X2.main(String ...) [X2] EXACT_MATCH");
-	} finally {
-		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
-	}
-}
-
-/*
- * java search reference for class file reference in case and default blocks
- */
-public void testBug542559_009() throws CoreException {
-	this.workingCopies = new ICompilationUnit[1];
-	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
-			"public class X {\n" +
-					"	Integer abcd\n" +
-					"	public static int foo(int i) {\n" +
-					"		final int k;\n" +
-					"\n" +
-					"		int it = switch (i) { \n" +
-					"		case 1  ->   {\n" +
-					"			k = 1;\n" +
-					"			abcd.toString();\n" +
-					"			break k ;\n" +
-					"		}\n" +
-					"		case 2  ->   {\n" +
-					"			abcd.toString();\n" +
-					"			break k ;\n" +
-					"		}\n" +
-					"		default -> {\n" +
-					"			k = 3;\n" +
-					"			abcd.toString();\n" +
-					"			break k;\n" +
-					"		}\n" +
-					"		};\n" +
-					"		return k;\n" +
-					"	}\n" +
-					"\n" +
-					"	public boolean bar() {\n" +
-					"		return true;\n" +
-					"	}\n" +
-					"	public static void main(String[] args) {\n" +
-					"		System.out.println(foo(3));\n" +
-					"	}\n" +
-					"}\n"
-			);
-	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
-	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
-	try {
-		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
-		search("abcd", FIELD, REFERENCES);
-		assertSearchResults(
-				"src/X.java int X.foo(int) [abcd] EXACT_MATCH\n" +
-				"src/X.java int X.foo(int) [abcd] EXACT_MATCH\n" +
-				"src/X.java int X.foo(int) [abcd] EXACT_MATCH"
-		);
-	} finally {
-		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
-	}
-}
-
-/*
- * java search reference for string constant in switch expression and switch statement
- */
-public void testBug542559_0010() throws CoreException {
-	this.workingCopies = new ICompilationUnit[1];
-	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
-			"public class X {\n" +
-					"	static final String MONDAY = \"MONDAY\";\n" +
-					"	static final String TUESDAY = \"TUESDAY\";\n" +
-					"	static final String WEDNESDAY = \"WEDNESDAY\";\n" +
-					"	static final String THURSDAY = \"THURSDAY\";\n" +
-					"	static final String FRIDAY = \"FRIDAY\";\n" +
-					"	static final String SATURDAY = \"SATURDAY\";\n" +
-					"	static final String SUNDAY = \"SUNDAY\"; \n" +
-					"	@SuppressWarnings(\"preview\")\n" +
-					"	public static void main(String[] args) {\n" +
-					"		String day = \"MONDAY\";\n" +
-					"		switch (day) {\n" +
-					"		    case MONDAY, FRIDAY, SUNDAY  -> System.out.println(6);\n" +
-					"		    case TUESDAY           		 -> System.out.println(7);\n" +
-					"		    case THURSDAY, SATURDAY     -> System.out.println(8);\n" +
-					"		    case WEDNESDAY              -> System.out.println(9);\n" +
-					"		}\n" +
-					"		int k = switch (day) {\n" +
-					"	    case SATURDAY  -> throw new NullPointerException();\n" +
-					"	    case TUESDAY -> 1;\n" +
-					"	    case WEDNESDAY -> {break 10;}\n" +
-					"	    default      -> {\n" +
-					"	        int g = day.h();\n" +
-					"	        int result = f(g);\n" +
-					"	        break result;\n" +
-					"	    }};\n" +
-					"	}\n" +
-					"	static int f(int k) {\n" +
-					"		return k*k;\n" +
-					"	}\n" +
-					"}\n"
-			);
-	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
-	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
-	try {
-		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
-		search("SATURDAY", FIELD, REFERENCES);
-		assertSearchResults(
-				"src/X.java void X.main(String[]) [SATURDAY] EXACT_MATCH\n" +
-				"src/X.java void X.main(String[]) [SATURDAY] EXACT_MATCH"
-		);
-	} finally {
-		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
-	}
-}
-/*
- * java search a javatype reference from another java project if that is in switch expression
- */
-public void testBug542559_0011() throws CoreException {
-	try {
-
-		IJavaProject project1 = createJavaProject("JavaSearchBugs12", new String[] {"src"}, new String[] {"JCL12_LIB"}, "bin", "12");
-		project1.open(null);
-		createFolder("/JavaSearchBugs12/src/pack1");
-		createFile("/JavaSearchBugs12/src/pack1/X11.java",
-				"package pack1;\n" +
-				"public class X11 { \n" +
-				"	static final String MONDAY = \"MONDAY\";\n" +
-				"	static final String TUESDAY = \"TUESDAY\";\n" +
-				"	static final String WEDNESDAY = \"WEDNESDAY\";\n" +
-				"	static final String THURSDAY = \"THURSDAY\";\n" +
-				"	static final String FRIDAY = \"FRIDAY\";\n" +
-				"	static final String SATURDAY = \"SATURDAY\";\n" +
-				"	static final String SUNDAY = \"SUNDAY\"; \n" +
-				"	@SuppressWarnings(\"preview\")\n" +
-				"	public static void main(String[] args) {\n" +
-				"		String day = \"MONDAY\";\n" +
-				"		switch (day) {\n" +
-				"		    case MONDAY, FRIDAY, SUNDAY  -> System.out.println(6);\n" +
-				"		    case TUESDAY           		 -> System.out.println(7);\n" +
-				"		    case THURSDAY, SATURDAY     -> System.out.println(8);\n" +
-				"		    case WEDNESDAY              -> System.out.println(9);\n" +
-				"		}\n" +
-				"		int k = switch (day) {\n" +
-				"	    case SATURDAY  -> throw new NullPointerException();\n" +
-				"	    case TUESDAY -> 1;\n" +
-				"	    case WEDNESDAY -> {break 10;}\n" +
-				"	    default      -> {\n" +
-				"	        pack2.X22.a2=99;\n" +
-				"	        int result = f(g);\n" +
-				"	        break result;\n" +
-				"	    }};\n" +
-				"	}\n" +
-				"	static int f(int k) {\n" +
-				"		return k*k;\n" +
-				"	}\n" +
-				 "}\n");
-
-		IJavaProject project2 = createJavaProject("second", new String[] {"src"},new String[] {"JCL12_LIB"}, "bin", "12");
-		project2.open(null);
-		createFolder("/second/src/pack2");
-		createFile("/second/src/pack2/X22.java",
-				"package pack2;\n" +
-				"public class X22 {public static int a2=9;}\n");
-		addClasspathEntry(project1, JavaCore.newProjectEntry(project2.getPath()));
-		project1.close(); // sync
-		project2.close();
-		project2.open(null);
-		project1.open(null);
-		IPackageFragment pkg = getPackageFragment("second", "src", "pack2");
-
-		IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaProject[]
-				{getJavaProject("JavaSearchBugs12")});
-
-		search(
-			pkg,
-			ALL_OCCURRENCES,
-			scope,
-			this.resultCollector);
-		String exp = "src/pack1/X11.java void pack1.X11.main(String[]) [pack2] EXACT_MATCH\n"
-		+"src/pack2 pack2 EXACT_MATCH";
-		assertSearchResults(
-			exp,
-			this.resultCollector);
-
-	}
-	finally {
-		deleteProject("JavaSearchBugs12");
-		deleteProject("second");
-	}
-
-}
-/*
- * java search a method reference in switch expression
- */
-public void testBug542559_0012() throws CoreException {
-	this.workingCopies = new ICompilationUnit[1];
-	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
-			"import java.util.function.Supplier;\n" +
-			"interface I0 { void i(); }\n" +
-			"interface I1 extends I0 {}\n" +
-			"interface I2 extends I0 {}\n" +
-			"public class X {\n" +
-			"	I1 n1() { return null; }\n" +
-			"	<I extends I2> I n2() { return null; }\n" +
-			"	<M> M m(Supplier<M> m) { return m.get(); }\n" +
-			"	void test(int i, boolean b) {\n" +
-			"		m(switch (i) {\n" +
-			"			case 1 -> this::n1;\n" +
-			"			default -> this::n2;\n" +
-			"		}).i(); \n" +
-			"	}\n" +
-			"	public static void main(String[] args) {\n" +
-			"		try {\n" +
-			"			new X().test(1, true);\n" +
-			"		} catch (NullPointerException e) {\n" +
-			"			System.out.println(\"NPE as expected\");\n" +
-			"		}\n" +
-			"	}\n" +
-			"}\n"
-			);
-	IJavaProject javaProject = this.workingCopies[0].getJavaProject();//assuming single project for all working copies
-	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
-	try {
-		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
-		search("n1", METHOD, REFERENCES);
-		assertSearchResults("src/X.java void X.test(int, boolean) [n1] EXACT_MATCH");
-	} finally {
-		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
-	}
-}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaSearchBugs13Tests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaSearchBugs13Tests.java
new file mode 100644
index 0000000..c0f0e30
--- /dev/null
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaSearchBugs13Tests.java
@@ -0,0 +1,1051 @@
+/*******************************************************************************
+ * Copyright (c) 2019 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * This is an implementation of an early-draft specification developed under the Java
+ * Community Process (JCP) and is made available for testing and evaluation purposes
+ * only. The code is not compatible with any specification of the JCP.
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.core.tests.model;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.ILocalVariable;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.WorkingCopyOwner;
+import org.eclipse.jdt.core.search.IJavaSearchScope;
+import org.eclipse.jdt.core.search.ReferenceMatch;
+import org.eclipse.jdt.core.search.SearchEngine;
+import org.eclipse.jdt.core.search.SearchMatch;
+import org.eclipse.jdt.core.search.TypeReferenceMatch;
+
+import junit.framework.Test;
+
+public class JavaSearchBugs13Tests extends AbstractJavaSearchTests {
+
+	static {
+//	 org.eclipse.jdt.internal.core.search.BasicSearchEngine.VERBOSE = true;
+//		TESTS_NUMBERS = new int[] { 19 };
+//		TESTS_RANGE = new int[] { 1, -1 };
+//		TESTS_NAMES = new String[] {"testBug542559_001"};
+}
+
+public JavaSearchBugs13Tests(String name) {
+	super(name);
+	this.endChar = "";
+}
+public static Test suite() {
+	return buildModelTestSuite(JavaSearchBugs13Tests.class, BYTECODE_DECLARATION_ORDER);
+}
+class TestCollector extends JavaSearchResultCollector {
+	public void acceptSearchMatch(SearchMatch searchMatch) throws CoreException {
+		super.acceptSearchMatch(searchMatch);
+	}
+}
+class ReferenceCollector extends JavaSearchResultCollector {
+	protected void writeLine() throws CoreException {
+		super.writeLine();
+		ReferenceMatch refMatch = (ReferenceMatch) this.match;
+		IJavaElement localElement = refMatch.getLocalElement();
+		if (localElement != null) {
+			this.line.append("+[");
+			if (localElement.getElementType() == IJavaElement.ANNOTATION) {
+				this.line.append('@');
+				this.line.append(localElement.getElementName());
+				this.line.append(" on ");
+				this.line.append(localElement.getParent().getElementName());
+			} else {
+				this.line.append(localElement.getElementName());
+			}
+			this.line.append(']');
+		}
+	}
+
+}
+class TypeReferenceCollector extends ReferenceCollector {
+	protected void writeLine() throws CoreException {
+		super.writeLine();
+		TypeReferenceMatch typeRefMatch = (TypeReferenceMatch) this.match;
+		IJavaElement[] others = typeRefMatch.getOtherElements();
+		int length = others==null ? 0 : others.length;
+		if (length > 0) {
+			this.line.append("+[");
+			for (int i=0; i<length; i++) {
+				IJavaElement other = others[i];
+				if (i>0) this.line.append(',');
+				if (other.getElementType() == IJavaElement.ANNOTATION) {
+					this.line.append('@');
+					this.line.append(other.getElementName());
+					this.line.append(" on ");
+					this.line.append(other.getParent().getElementName());
+				} else {
+					this.line.append(other.getElementName());
+				}
+			}
+			this.line.append(']');
+		}
+	}
+}
+
+IJavaSearchScope getJavaSearchScope() {
+	return SearchEngine.createJavaSearchScope(new IJavaProject[] {getJavaProject("JavaSearchBugs")});
+}
+IJavaSearchScope getJavaSearchScopeBugs(String packageName, boolean addSubpackages) throws JavaModelException {
+	if (packageName == null) return getJavaSearchScope();
+	return getJavaSearchPackageScope("JavaSearchBugs", packageName, addSubpackages);
+}
+public ICompilationUnit getWorkingCopy(String path, String source) throws JavaModelException {
+	if (this.wcOwner == null) {
+		this.wcOwner = new WorkingCopyOwner() {};
+	}
+	return getWorkingCopy(path, source, this.wcOwner);
+}
+@Override
+public void setUpSuite() throws Exception {
+	super.setUpSuite();
+	JAVA_PROJECT = setUpJavaProject("JavaSearchBugs", "13");
+}
+public void tearDownSuite() throws Exception {
+	deleteProject("JavaSearchBugs");
+	super.tearDownSuite();
+}
+protected void setUp () throws Exception {
+	super.setUp();
+	this.resultCollector = new TestCollector();
+	this.resultCollector.showAccuracy(true);
+}
+
+//copy from JavaSearchBugs12Tests starts ( after deleting break with value tests since that is discarded)
+
+public void testBug542559_001() throws CoreException {
+	this.workingCopies = new ICompilationUnit[1];
+	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
+			"public class X {\n" +
+			"	int switch_expr_field = 10;\n" +
+			"	int twice(int i) {\n" +
+			"		int tw = switch (i) {\n" +
+			"			case 0 -> switch_expr_field * 0;\n" +
+			"			case 1 -> 2;\n" +
+			"			default -> 3;\n" +
+			"		};\n" +
+			"		return tw;\n" +
+			"	}\n" +
+			"	public static void main(String... args) {\n" +
+			"		System.out.print(new X().twice(3));\n" +
+			"	}\n" +
+			"}\n"
+			);
+	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
+	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
+	try {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
+		search("switch_expr_field", FIELD, REFERENCES);
+		assertSearchResults("src/X.java int X.twice(int) [switch_expr_field] EXACT_MATCH");
+	} finally {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
+	}
+}
+
+
+/*
+ * java search reference for an integer in default block of switch expression
+ */
+public void testBug542559_004() throws CoreException {
+	this.workingCopies = new ICompilationUnit[1];
+	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
+			"public class X {\n" +
+			"	int switch_expr_field = 10;\n" +
+			"	int twice(int i) {\n" +
+			"		int tw = switch (i) {\n" +
+			"			case 0 -> switch_expr_field * 0;\n" +
+			"			case 1 -> 2;\n" +
+			"			default ->{ \n" +
+			"			switch_expr_field*9; \n" +
+			"		}};\n" +
+			"		return tw;\n" +
+			"	}\n" +
+			"	public static void main(String... args) {\n" +
+			"		System.out.print(new X().twice(3));\n" +
+			"	}\n" +
+			"}\n"
+			);
+	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
+	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
+	try {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
+		search("switch_expr_field", FIELD, REFERENCES);
+		assertSearchResults(
+				"src/X.java int X.twice(int) [switch_expr_field] EXACT_MATCH\n" +
+				"src/X.java int X.twice(int) [switch_expr_field] EXACT_MATCH"
+		);
+	} finally {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
+	}
+}
+
+/*
+ * java search reference for an integer in default of switch expression
+ */
+public void testBug542559_005() throws CoreException {
+	this.workingCopies = new ICompilationUnit[1];
+	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
+			"public class X {\n" +
+			"	int switch_expr_field = 10;\n" +
+			"	int twice(int i) {\n" +
+			"		int tw = switch (i) {\n" +
+			"			case 0 -> switch_expr_field * 0;\n" +
+			"			case 1 -> 2;\n" +
+			"			default -> switch_expr_field*9;\n" +
+			"		};\n" +
+			"		return tw;\n" +
+			"	}\n" +
+			"	public static void main(String... args) {\n" +
+			"		System.out.print(new X().twice(3));\n" +
+			"	}\n" +
+			"}\n"
+			);
+	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
+	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
+	try {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
+		search("switch_expr_field", FIELD, REFERENCES);
+		assertSearchResults(
+				"src/X.java int X.twice(int) [switch_expr_field] EXACT_MATCH\n" +
+				"src/X.java int X.twice(int) [switch_expr_field] EXACT_MATCH"
+		);
+	} finally {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
+	}
+}
+
+/*
+ * java search reference for simple multi constant case statement for enum
+ */
+public void testBug542559_006() throws CoreException {
+	this.workingCopies = new ICompilationUnit[1];
+	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
+			"public class X {\n" +
+					"enum Day { SATURDAY, SUNDAY, MONDAY;}\n" +
+					"public static void bar(Day day) {\n" +
+					"		switch (day) {\n" +
+					"		case SATURDAY, SUNDAY: \n" +
+					"			System.out.println(Day.SUNDAY);\n" +
+					"			break;\n" +
+					"		case MONDAY : System.out.println(Day.MONDAY);\n" +
+					"					break;\n" +
+					"		}\n" +
+					"	}" +
+					"	public static void main(String[] args) {\n" +
+					"		bar(Day.SATURDAY);\n" +
+					"	}\n"
+					+
+					"}\n"
+			);
+	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
+	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
+	try {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
+		search("SATURDAY", FIELD, REFERENCES);
+		assertSearchResults(
+				"src/X.java void X.bar(Day) [SATURDAY] EXACT_MATCH\n"+
+				"src/X.java void X.main(String[]) [SATURDAY] EXACT_MATCH"
+		);
+	} finally {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
+	}
+}
+/*
+ * java search reference for simple multi constant case statement for enum, 2nd case
+ */
+public void testBug542559_007() throws CoreException {
+	this.workingCopies = new ICompilationUnit[1];
+	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
+			"public class X {\n" +
+					"enum Day { SATURDAY, SUNDAY, MONDAY;}\n" +
+					"public static void bar(Day day) {\n" +
+					"		switch (day) {\n" +
+					"		case SATURDAY, SUNDAY: \n" +
+					"			System.out.println(Day.SUNDAY);\n" +
+					"			break;\n" +
+					"		case MONDAY : System.out.println(Day.MONDAY);\n" +
+					"					break;\n" +
+					"		}\n" +
+					"	}" +
+					"	public static void main(String[] args) {\n" +
+					"		bar(Day.SATURDAY);\n" +
+					"	}\n"
+					+
+					"}\n"
+			);
+	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
+	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
+	try {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
+		search("SUNDAY", FIELD, REFERENCES);
+		assertSearchResults(
+				"src/X.java void X.bar(Day) [SUNDAY] EXACT_MATCH\n"+
+				"src/X.java void X.bar(Day) [SUNDAY] EXACT_MATCH"
+		);
+	} finally {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
+	}
+}
+
+/*
+ * java search reference for class file reference in switch expression
+ */
+public void testBug542559_008() throws CoreException {
+	this.workingCopies = new ICompilationUnit[1];
+	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X2.java",
+			"public class X2 {\n" +
+			"   String s = new String();        \n" +
+			"	int switch_expr_field = 10;\n" +
+			"	int twice(int i) {\n" +
+			"		int tw = switch (i) {\n" +
+			"			case 0 -> switch_expr_field * 0;\n" +
+			"			case 1 -> 2;\n" +
+			"			default -> new X2().toString().length();\n" +
+			"		};\n" +
+			"		return tw;\n" +
+			"	}\n" +
+			"	public static void main(String... args) {\n" +
+			"		System.out.print(new X2().twice(3));\n" +
+			"	}\n" +
+			"}\n"
+			);
+	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
+	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
+	try {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
+		search("X2", CLASS, REFERENCES);
+		assertSearchResults(
+		"src/X2.java int X2.twice(int) [X2] EXACT_MATCH\n"+
+		"src/X2.java void X2.main(String ...) [X2] EXACT_MATCH");
+	} finally {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
+	}
+}
+
+
+
+/*
+ * java search a method reference in switch expression
+ */
+public void testBug542559_0012() throws CoreException {
+	this.workingCopies = new ICompilationUnit[1];
+	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
+			"import java.util.function.Supplier;\n" +
+			"interface I0 { void i(); }\n" +
+			"interface I1 extends I0 {}\n" +
+			"interface I2 extends I0 {}\n" +
+			"public class X {\n" +
+			"	I1 n1() { return null; }\n" +
+			"	<I extends I2> I n2() { return null; }\n" +
+			"	<M> M m(Supplier<M> m) { return m.get(); }\n" +
+			"	void test(int i, boolean b) {\n" +
+			"		m(switch (i) {\n" +
+			"			case 1 -> this::n1;\n" +
+			"			default -> this::n2;\n" +
+			"		}).i(); \n" +
+			"	}\n" +
+			"	public static void main(String[] args) {\n" +
+			"		try {\n" +
+			"			new X().test(1, true);\n" +
+			"		} catch (NullPointerException e) {\n" +
+			"			System.out.println(\"NPE as expected\");\n" +
+			"		}\n" +
+			"	}\n" +
+			"}\n"
+			);
+	IJavaProject javaProject = this.workingCopies[0].getJavaProject();//assuming single project for all working copies
+	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
+	try {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
+		search("n1", METHOD, REFERENCES);
+		assertSearchResults("src/X.java void X.test(int, boolean) [n1] EXACT_MATCH");
+	} finally {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
+	}
+}
+
+// copy from JavaSearchBugs12Tests ends
+
+public void testBug549413_001() throws CoreException {
+	// field reference in yield
+	this.workingCopies = new ICompilationUnit[1];
+	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
+			"public class X {\n" +
+			"int switch_expr_field = 10; \n" +
+			"public static int foo(int val) {\n" +
+			"int k = switch (val) {\n" +
+			"case 1 -> { yield switch_expr_field; }\n" +
+			"default -> { yield 2; }\n" +
+			"};\n" +
+			"return k;\n" +
+			"}\n" +
+			"	public static void main(String... args) {\n" +
+			"		System.out.println(X.foo(2));\n" +
+			"	}\n" +
+			"}\n"
+			);
+	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
+	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
+	try {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
+		search("switch_expr_field", FIELD, REFERENCES);
+		assertSearchResults("src/X.java int X.foo(int) [switch_expr_field] EXACT_MATCH");
+	} finally {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
+	}
+}
+
+public void testBug549413_002() throws CoreException {
+	//field all occurrences in yield
+	this.workingCopies = new ICompilationUnit[1];
+	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
+			"public class X {\n" +
+			"int switch_expr_field = 10; \n" +
+			"public static int foo(int val) {\n" +
+			"int k = switch (val) {\n" +
+			"case 1 -> { yield switch_expr_field; }\n" +
+			"default -> { yield 2; }\n" +
+			"};\n" +
+			"return k;\n" +
+			"}\n" +
+			"	public static void main(String... args) {\n" +
+			"		System.out.println(X.foo(2));\n" +
+			"	}\n" +
+			"}\n"
+			);
+	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
+	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
+	try {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
+		search("switch_expr_field", FIELD, ALL_OCCURRENCES);
+		assertSearchResults("src/X.java X.switch_expr_field [switch_expr_field] EXACT_MATCH\n" +
+				"src/X.java int X.foo(int) [switch_expr_field] EXACT_MATCH");
+	} finally {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
+	}
+}
+
+
+public void testBug549413_003() throws CoreException {
+	//METHOD named yield -  all occurrences in yield
+	this.workingCopies = new ICompilationUnit[1];
+	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
+			"public class X {\n"+
+					"\n"+
+					"	public static int yield() {\n"+
+					"		return 1;\n"+
+					"	}\n"+
+					"	@SuppressWarnings(\"preview\")\n"+
+					"	public static int foo(int val) {\n"+
+					"		int k = switch (val) {\n"+
+					"		case 1 -> { yield 1; }\n"+
+					"		default -> { yield 2; }\n"+
+					"		};\n"+
+					"		return k;\n"+
+					"	}\n"+
+					"	public static void main(String[] args) {\n"+
+					"		System.out.println(X.foo(1));\n"+
+					"	}\n"+
+					"}\n"
+			);
+	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
+	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
+	try {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
+		search("yield", METHOD, ALL_OCCURRENCES);
+		assertSearchResults("src/X.java int X.yield() [yield] EXACT_MATCH");
+	} finally {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
+	}
+}
+
+public void testBug549413_004() throws CoreException {
+	//METHOD yield - references in yield
+	this.workingCopies = new ICompilationUnit[1];
+	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
+			"public class X {\n"+
+					"\n"+
+					"	public static int yield() {\n"+
+					"		return 1;\n"+
+					"	}\n"+
+					"	@SuppressWarnings(\"preview\")\n"+
+					"	public static int foo(int val) {\n"+
+					"		int k = switch (val) {\n"+
+					"		case 1 -> { yield X.yield(); }\n"+
+					"		default -> { yield 2; }\n"+
+					"		};\n"+
+					"		return k;\n"+
+					"	}\n"+
+					"	public static void main(String[] args) {\n"+
+					"		System.out.println(X.foo(1));\n"+
+					"	}\n"+
+					"}\n"
+			);
+	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
+	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
+	try {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
+		search("yield", METHOD, REFERENCES);
+		assertSearchResults("src/X.java int X.foo(int) [yield()] EXACT_MATCH");
+	} finally {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
+	}
+}
+
+
+public void testBug549413_005() throws CoreException {
+	//field yield - references in yield
+	this.workingCopies = new ICompilationUnit[1];
+	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
+			"public class X {\n"+
+					"	public static int yield;\n"+
+					"	@SuppressWarnings(\"preview\")\n"+
+					"	public static int foo(int val) {\n"+
+					"		int k = switch (val) {\n"+
+					"		case 1 -> { yield yield; }\n"+
+					"		default -> { yield 2; }\n"+
+					"		};\n"+
+					"		return k;\n"+
+					"	}\n"+
+					"	public static void main(String[] args) {\n"+
+					"		System.out.println(X.foo(1));\n"+
+					"	}\n"+
+					"}\n"
+			);
+	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
+	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
+	try {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
+		search("yield", FIELD, REFERENCES);
+		assertSearchResults("src/X.java int X.foo(int) [yield] EXACT_MATCH");
+	} finally {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
+	}
+}
+
+public void testBug549413_006() throws CoreException {
+	//field yield - all occurrence in yield
+	this.workingCopies = new ICompilationUnit[1];
+	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
+			"public class X {\n"+
+					"	public static int yield;\n"+
+					"	@SuppressWarnings(\"preview\")\n"+
+					"	public static int foo(int val) {\n"+
+					"		int k = switch (val) {\n"+
+					"		case 1 -> { yield yield; }\n"+
+					"		default -> { yield 2; }\n"+
+					"		};\n"+
+					"		return k;\n"+
+					"	}\n"+
+					"	public static void main(String[] args) {\n"+
+					"		System.out.println(X.foo(1));\n"+
+					"	}\n"+
+					"}\n"
+			);
+	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
+	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
+	try {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
+		search("yield", FIELD, ALL_OCCURRENCES);
+		assertSearchResults("src/X.java X.yield [yield] EXACT_MATCH\n" +
+				"src/X.java int X.foo(int) [yield] EXACT_MATCH");
+	} finally {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
+	}
+}
+
+public void testBug549413_007() throws CoreException {
+	//field yield - all reference of identifier in yield statement
+	this.workingCopies = new ICompilationUnit[1];
+	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
+			"public class X {\n"+
+					"	public static int yield;\n"+
+					"	public static int abc;\n"+
+					"	@SuppressWarnings(\"preview\")\n"+
+					"	public static int foo(int val) {\n"+
+					"		int k = switch (val) {\n"+
+					"		case 1 -> { abc=0;yield yield; }\n"+
+					"		default -> { yield 2; }\n"+
+					"		};\n"+
+					"		return k;\n"+
+					"	}\n"+
+					"	public static void main(String[] args) {\n"+
+					"		System.out.println(X.foo(1));\n"+
+					"	}\n"+
+					"}\n"
+			);
+	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
+	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
+	try {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
+		search("abc", FIELD, ALL_OCCURRENCES);
+		assertSearchResults("src/X.java X.abc [abc] EXACT_MATCH\n" +
+				"src/X.java int X.foo(int) [abc] EXACT_MATCH");
+	} finally {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
+	}
+}
+
+public void testBug549413_008() throws CoreException {
+	//field yield - all reference of identifier in yield statement ( yield -1 without braces)
+	this.workingCopies = new ICompilationUnit[1];
+	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
+			"public class X {\n"+
+					"	static int yield = 100;\n"+
+					"	@SuppressWarnings(\"preview\")\n"+
+					"	public  static int foo(int i) {\n"+
+					"		int r = switch(i) {\n"+
+					"			default -> yield - 1;\n"+
+					"		};\n"+
+					"		return r;\n"+
+					"	}\n"+
+					"	public  int yield() {\n"+
+					"		return 0;\n"+
+					"	}\n"+
+					"	public static void main(String[] args) {\n"+
+					"		System.out.println(X.foo(0));\n"+
+					"	}\n"+
+					"}\n"
+			);
+	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
+	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
+	try {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
+		search("yield", FIELD, REFERENCES);
+		assertSearchResults("src/X.java int X.foo(int) [yield] EXACT_MATCH");
+	} finally {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
+	}
+}
+
+
+public void testBug549413_009() throws CoreException {
+	//field yield - all reference of identifier in yield statement ( yield -1 with braces)
+	this.workingCopies = new ICompilationUnit[1];
+	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
+			"public class X {\n"+
+					"	int yield = 100;\n"+
+					"	@SuppressWarnings(\"preview\")\n"+
+					"	public  static int foo(int i) {\n"+
+					"		int r = switch(i) {\n"+
+					"			default ->{ yield - 1;}\n"+
+					"		};\n"+
+					"		return r;\n"+
+					"	}\n"+
+					"	public  int yield() {\n"+
+					"		return 0;\n"+
+					"	}\n"+
+					"	public static void main(String[] args) {\n"+
+					"		System.out.println(X.foo(0));\n"+
+					"	}\n"+
+					"}\n"
+			);
+	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
+	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
+	try {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
+		search("yield", FIELD, REFERENCES);
+		assertSearchResults("");
+	} finally {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
+	}
+}
+
+
+public void testBug549413_010() throws CoreException {
+	//method - break label
+	this.workingCopies = new ICompilationUnit[1];
+	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
+			"public class X {\n"+
+					"\n"+
+					"	static int yield = 100;\n"+
+					"	@SuppressWarnings(\"preview\")\n"+
+					"	public  static int foo(int i) {\n"+
+					"	int r = switch(i) {\n"+
+					"			default -> X.yield();\n"+
+					"		};\n"+
+					"		return r;\n"+
+					"	}\n"+
+					"	public static  int yield() {\n"+
+					"		yield: while (X.yield == 100) {\n"+
+					"			yield = 256;\n"+
+					"			break yield;\n"+
+					"		}\n"+
+					"		return yield;\n"+
+					"	}\n"+
+					"	public static void main(String[] args) {\n"+
+					"		System.out.println(X.foo(0));\n"+
+					"	}\n"+
+					"}\n"
+			);
+	IJavaProject javaProject = this.workingCopies[0].getJavaProject(); //assuming single project for all working copies
+	String old = javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true);
+	try {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
+		search("yield", METHOD, REFERENCES);
+		assertSearchResults("src/X.java int X.foo(int) [yield()] EXACT_MATCH");
+	} finally {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
+	}
+}
+
+public void testBug549413_011() throws CoreException {
+	//break label in combination with yield field
+	this.workingCopies = new ICompilationUnit[1];
+	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
+			"public class X {\n"+
+					"\n"+
+					"	static int yield = 100;\n"+
+					"	@SuppressWarnings(\"preview\")\n"+
+					"	public  static int foo(int i) {\n"+
+					"	int r = switch(i) {\n"+
+					"			default -> X.yield();\n"+<