Merge remote-tracking branch 'origin/master' into BETA_JAVA13

# Conflicts:
#	org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchExpressionTest.java
#	org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Scanner.java
#	org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java

Change-Id: I5149c4cc6bd8bb4c5e8d43031cb723b02d117069
diff --git a/org.eclipse.jdt.apt.core/META-INF/MANIFEST.MF b/org.eclipse.jdt.apt.core/META-INF/MANIFEST.MF
index f1ea17f..9ca7812 100644
--- a/org.eclipse.jdt.apt.core/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.apt.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.apt.core; singleton:=true
-Bundle-Version: 3.6.500.qualifier
+Bundle-Version: 3.6.550.qualifier
 Bundle-Localization: plugin
 Export-Package: com.sun.mirror.apt,
  com.sun.mirror.declaration,
diff --git a/org.eclipse.jdt.apt.core/pom.xml b/org.eclipse.jdt.apt.core/pom.xml
index 99f141c..e9cbbe9 100644
--- a/org.eclipse.jdt.apt.core/pom.xml
+++ b/org.eclipse.jdt.apt.core/pom.xml
@@ -18,6 +18,6 @@
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.apt.core</artifactId>
-  <version>3.6.500-SNAPSHOT</version>
+  <version>3.6.550-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/env/BaseProcessorEnv.java b/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/env/BaseProcessorEnv.java
index a772cef..3a6c1b2 100644
--- a/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/env/BaseProcessorEnv.java
+++ b/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/env/BaseProcessorEnv.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:
  *    tyeung@bea.com - initial API and implementation
  *******************************************************************************/
@@ -86,7 +90,7 @@
 public class BaseProcessorEnv implements AnnotationProcessorEnvironment 
 {
 	static{
-		final AST ast = AST.newAST(AST.JLS11, false);
+		final AST ast = AST.newAST(AST.JLS13, true);
 		EMPTY_AST_UNIT = ast.newCompilationUnit();
 	}
 	public static final CompilationUnit EMPTY_AST_UNIT;
@@ -508,7 +512,7 @@
 		}
 
 		final BindingRequestor requestor = new BindingRequestor();
-		final ASTParser parser = ASTParser.newParser(AST.JLS11);
+		final ASTParser parser = ASTParser.newParser(AST.JLS13);
 		parser.setResolveBindings(true);
 		parser.setBindingsRecovery(true);
 		parser.setProject(_javaProject);
@@ -719,7 +723,7 @@
             if( astUnit != null ) return astUnit;
             else{
                 // Note: very expensive operation. we are re-compiling a file with binding information.
-                final ASTParser parser =  ASTParser.newParser(AST.JLS11);
+                final ASTParser parser =  ASTParser.newParser(AST.JLS13);
                 parser.setResolveBindings(true);
         		parser.setBindingsRecovery(true);
                 parser.setSource(unit);
@@ -868,7 +872,7 @@
 		String bogusKey = BindingKey.createTypeBindingKey("java.lang.Object"); //$NON-NLS-1$
 		String[] keys = new String[] {bogusKey};
 
-		ASTParser p = ASTParser.newParser( AST.JLS11 );
+		ASTParser p = ASTParser.newParser( AST.JLS13 );
 		p.setResolveBindings(true);
 		p.setBindingsRecovery(true);
 		p.setProject( javaProject );
@@ -898,7 +902,7 @@
 		}
 		
 		CompilationUnitRequestor requestor = new CompilationUnitRequestor();
-		ASTParser p = ASTParser.newParser( AST.JLS11 );
+		ASTParser p = ASTParser.newParser( AST.JLS13 );
 		p.setResolveBindings(true);
 		p.setBindingsRecovery(true);
 		p.setProject( javaProject );
diff --git a/org.eclipse.jdt.apt.tests/META-INF/MANIFEST.MF b/org.eclipse.jdt.apt.tests/META-INF/MANIFEST.MF
index b36858f..056e70f 100644
--- a/org.eclipse.jdt.apt.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.apt.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.apt.tests; singleton:=true
-Bundle-Version: 3.4.500.qualifier
+Bundle-Version: 3.4.550.qualifier
 Bundle-ClassPath: apt.jar,
  aptext.jar,
  .
diff --git a/org.eclipse.jdt.apt.tests/pom.xml b/org.eclipse.jdt.apt.tests/pom.xml
index 91d3fad..66a9330 100644
--- a/org.eclipse.jdt.apt.tests/pom.xml
+++ b/org.eclipse.jdt.apt.tests/pom.xml
@@ -20,7 +20,7 @@
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.apt.tests</artifactId>
-  <version>3.4.500-SNAPSHOT</version>
+  <version>3.4.550-SNAPSHOT</version>
   <packaging>eclipse-test-plugin</packaging>
   <properties>
   	<testSuite>${project.artifactId}</testSuite>
diff --git a/org.eclipse.jdt.apt.tests/src/org/eclipse/jdt/apt/tests/ReadAnnotationTests2.java b/org.eclipse.jdt.apt.tests/src/org/eclipse/jdt/apt/tests/ReadAnnotationTests2.java
index 338f6a6..c3020b0 100644
--- a/org.eclipse.jdt.apt.tests/src/org/eclipse/jdt/apt/tests/ReadAnnotationTests2.java
+++ b/org.eclipse.jdt.apt.tests/src/org/eclipse/jdt/apt/tests/ReadAnnotationTests2.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2013 BEA Systems, Inc.
+ * Copyright (c) 2005, 2019 BEA Systems, Inc.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -7,6 +7,10 @@
  * 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:
  *     tyeung@bea.com - initial API and implementation
@@ -187,7 +191,7 @@
 		}
 
 		final BindingRequestor requestor = new BindingRequestor();
-		final ASTParser parser = ASTParser.newParser(AST.JLS11);
+		final ASTParser parser = ASTParser.newParser(AST.JLS13);
 		parser.setResolveBindings(true);
 		parser.setProject(javaProj);
 		parser.setIgnoreMethodBodies(true);
diff --git a/org.eclipse.jdt.compiler.apt.tests/.classpath b/org.eclipse.jdt.compiler.apt.tests/.classpath
index 8102373..6d7726d 100644
--- a/org.eclipse.jdt.compiler.apt.tests/.classpath
+++ b/org.eclipse.jdt.compiler.apt.tests/.classpath
@@ -16,7 +16,7 @@
 		</attributes>
 	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="lib" path="lib/java10api.jar"/>
+	<classpathentry kind="lib" path="lib/java13api.jar"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/org.eclipse.jdt.compiler.apt.tests/META-INF/MANIFEST.MF b/org.eclipse.jdt.compiler.apt.tests/META-INF/MANIFEST.MF
index 1a73c03..6c7e345 100644
--- a/org.eclipse.jdt.compiler.apt.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.compiler.apt.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.compiler.apt.tests;singleton:=true
-Bundle-Version: 1.1.900.qualifier
+Bundle-Version: 1.1.850.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
@@ -19,6 +19,6 @@
  org.eclipse.jdt.compiler.apt.tests.processors.visitors
 Import-Package: org.eclipse.jdt.internal.compiler.tool;resolution:=optional
 Eclipse-BundleShape: dir
-Bundle-ClassPath: lib/java10api.jar,
+Bundle-ClassPath: lib/java13api.jar,
  .
 Automatic-Module-Name: org.eclipse.jdt.compiler.apt.tests
diff --git a/org.eclipse.jdt.compiler.apt.tests/build.properties b/org.eclipse.jdt.compiler.apt.tests/build.properties
index e9a85cc..a436b5c 100644
--- a/org.eclipse.jdt.compiler.apt.tests/build.properties
+++ b/org.eclipse.jdt.compiler.apt.tests/build.properties
@@ -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:
 #     wharley@bea.com - initial API and implementation
 #     Red Hat Inc. (mistria) - Avoid nested jars
@@ -27,4 +31,4 @@
                .
 src.includes = about.html
 compilerArg=-proc:none
-jars.extra.classpath = lib/java10api.jar
+jars.extra.classpath = lib/java13api.jar
diff --git a/org.eclipse.jdt.compiler.apt.tests/lib/apttestprocessors8.jar b/org.eclipse.jdt.compiler.apt.tests/lib/apttestprocessors8.jar
index e51a6bc..c0e4619 100644
--- a/org.eclipse.jdt.compiler.apt.tests/lib/apttestprocessors8.jar
+++ b/org.eclipse.jdt.compiler.apt.tests/lib/apttestprocessors8.jar
Binary files differ
diff --git a/org.eclipse.jdt.compiler.apt.tests/lib/java10api.jar b/org.eclipse.jdt.compiler.apt.tests/lib/java10api.jar
deleted file mode 100644
index 464b691..0000000
--- a/org.eclipse.jdt.compiler.apt.tests/lib/java10api.jar
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.compiler.apt.tests/lib/java13api.jar b/org.eclipse.jdt.compiler.apt.tests/lib/java13api.jar
new file mode 100644
index 0000000..d8bbb8b
--- /dev/null
+++ b/org.eclipse.jdt.compiler.apt.tests/lib/java13api.jar
Binary files differ
diff --git a/org.eclipse.jdt.compiler.apt.tests/pom.xml b/org.eclipse.jdt.compiler.apt.tests/pom.xml
index 95f759d..4b6db24 100644
--- a/org.eclipse.jdt.compiler.apt.tests/pom.xml
+++ b/org.eclipse.jdt.compiler.apt.tests/pom.xml
@@ -20,7 +20,7 @@
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.compiler.apt.tests</artifactId>
-  <version>1.1.900-SNAPSHOT</version>
+  <version>1.1.850-SNAPSHOT</version>
   <packaging>eclipse-test-plugin</packaging>
 
   <properties>
diff --git a/org.eclipse.jdt.compiler.apt.tests/processors8/META-INF/services/javax.annotation.processing.Processor b/org.eclipse.jdt.compiler.apt.tests/processors8/META-INF/services/javax.annotation.processing.Processor
index 22707a2..f706af8 100644
--- a/org.eclipse.jdt.compiler.apt.tests/processors8/META-INF/services/javax.annotation.processing.Processor
+++ b/org.eclipse.jdt.compiler.apt.tests/processors8/META-INF/services/javax.annotation.processing.Processor
@@ -2,3 +2,4 @@
 org.eclipse.jdt.compiler.apt.tests.processors.elements.Java9ElementProcessor

 org.eclipse.jdt.compiler.apt.tests.processors.elements.Java11ElementProcessor

 org.eclipse.jdt.compiler.apt.tests.processors.elements.Java12ElementProcessor

+org.eclipse.jdt.compiler.apt.tests.processors.elements.Java13ElementProcessor

diff --git a/org.eclipse.jdt.compiler.apt.tests/processors8/org/eclipse/jdt/compiler/apt/tests/processors/elements/Java11ElementProcessor.java b/org.eclipse.jdt.compiler.apt.tests/processors8/org/eclipse/jdt/compiler/apt/tests/processors/elements/Java11ElementProcessor.java
index 590205e..06dc7c3 100644
--- a/org.eclipse.jdt.compiler.apt.tests/processors8/org/eclipse/jdt/compiler/apt/tests/processors/elements/Java11ElementProcessor.java
+++ b/org.eclipse.jdt.compiler.apt.tests/processors8/org/eclipse/jdt/compiler/apt/tests/processors/elements/Java11ElementProcessor.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
  *******************************************************************************/
@@ -33,7 +37,7 @@
 import org.eclipse.jdt.compiler.apt.tests.processors.base.BaseProcessor;
 
 /**
- * A processor that explores the java 9 specific elements and validates the lambda and 
+ * A processor that explores the java 11 specific elements and validates the lambda and 
  * type annotated elements. To enable this processor, add 
  * -Aorg.eclipse.jdt.compiler.apt.tests.processors.elements.Java11ElementProcessor to the command line.
  * @since 3.14
diff --git a/org.eclipse.jdt.compiler.apt.tests/processors8/org/eclipse/jdt/compiler/apt/tests/processors/elements/Java12ElementProcessor.java b/org.eclipse.jdt.compiler.apt.tests/processors8/org/eclipse/jdt/compiler/apt/tests/processors/elements/Java12ElementProcessor.java
index f8699c6..c87b88f 100644
--- a/org.eclipse.jdt.compiler.apt.tests/processors8/org/eclipse/jdt/compiler/apt/tests/processors/elements/Java12ElementProcessor.java
+++ b/org.eclipse.jdt.compiler.apt.tests/processors8/org/eclipse/jdt/compiler/apt/tests/processors/elements/Java12ElementProcessor.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
  *******************************************************************************/
@@ -40,7 +44,7 @@
 import org.eclipse.jdt.compiler.apt.tests.processors.base.BaseProcessor;
 
 /**
- * A processor that explores the java 9 specific elements and validates the lambda and 
+ * A processor that explores the java 12 specific elements and validates the lambda and 
  * type annotated elements. To enable this processor, add 
  * -Aorg.eclipse.jdt.compiler.apt.tests.processors.elements.Java11ElementProcessor to the command line.
  * @since 3.14
diff --git a/org.eclipse.jdt.compiler.apt.tests/processors8/org/eclipse/jdt/compiler/apt/tests/processors/elements/Java13ElementProcessor.java b/org.eclipse.jdt.compiler.apt.tests/processors8/org/eclipse/jdt/compiler/apt/tests/processors/elements/Java13ElementProcessor.java
new file mode 100644
index 0000000..8019681
--- /dev/null
+++ b/org.eclipse.jdt.compiler.apt.tests/processors8/org/eclipse/jdt/compiler/apt/tests/processors/elements/Java13ElementProcessor.java
@@ -0,0 +1,255 @@
+/*******************************************************************************
+ * Copyright (c) 2019 IBM Corporation.
+ *
+ * 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.compiler.apt.tests.processors.elements;
+
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.processing.Filer;
+import javax.annotation.processing.Messager;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.annotation.processing.RoundEnvironment;
+import javax.annotation.processing.SupportedAnnotationTypes;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.element.ModuleElement;
+import javax.lang.model.element.PackageElement;
+import javax.lang.model.element.TypeElement;
+
+import org.eclipse.jdt.internal.compiler.apt.dispatch.BaseProcessingEnvImpl;
+import org.eclipse.jdt.compiler.apt.tests.processors.base.BaseProcessor;
+
+/**
+ * A processor that explores the java 13 specific elements and validates the lambda and 
+ * type annotated elements. To enable this processor, add 
+ * -Aorg.eclipse.jdt.compiler.apt.tests.processors.elements.Java11ElementProcessor to the command line.
+ * @since 3.14
+ */
+@SupportedAnnotationTypes("*")
+public class Java13ElementProcessor extends BaseProcessor {
+	boolean reportSuccessAlready = true;
+	RoundEnvironment roundEnv = null;
+	Messager _messager = null;
+	Filer _filer = null;
+	boolean isBinaryMode = false;
+	String mode;
+	@Override
+	public synchronized void init(ProcessingEnvironment processingEnv) {
+		super.init(processingEnv);
+		_elementUtils = processingEnv.getElementUtils();
+		_messager = processingEnv.getMessager();
+		_filer = processingEnv.getFiler();
+	}
+	// Always return false from this processor, because it supports "*".
+	// The return value does not signify success or failure!
+	@Override
+	public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
+		if (roundEnv.processingOver()) {
+			return false;
+		}
+		
+		this.roundEnv = roundEnv;
+		Map<String, String> options = processingEnv.getOptions();
+		if (!options.containsKey(this.getClass().getName())) {
+			// Disable this processor unless we are intentionally performing the test.
+			return false;
+		} else {
+			try {
+				if (options.containsKey("binary")) {
+					this.isBinaryMode = true;
+					this.mode = "binary";
+				} else {
+					this.mode = "source";
+				}
+				if (!invokeTestMethods(options)) {
+					testAll();
+				}
+				if (this.reportSuccessAlready) {
+					super.reportSuccess();
+				}
+			} catch (AssertionFailedError e) {
+				super.reportError(getExceptionStackTrace(e));
+			} catch (Throwable e) {
+				e.printStackTrace();
+			}
+		}
+		return false;
+	}
+
+	private boolean invokeTestMethods(Map<String, String> options) throws Throwable {
+		Method testMethod = null;
+		Set<String> keys = options.keySet();
+		boolean testsFound = false;
+		for (String option : keys) {
+			if (option.startsWith("test")) {
+				try {
+					testMethod = this.getClass().getDeclaredMethod(option, new Class[0]);
+					if (testMethod != null) {
+						testsFound = true;
+						testMethod.invoke(this,  new Object[0]);
+					}
+				} catch (InvocationTargetException e) {
+					throw e.getCause();
+				} catch (Exception e) {
+					super.reportError(getExceptionStackTrace(e));
+				}
+			}
+		}
+		return testsFound;
+	}
+
+	public void testAll() throws AssertionFailedError, IOException {
+		testPreviewFlagTrue();
+		testPreviewFlagFalse();
+	}
+
+	public void testPreviewFlagTrue() throws IOException {
+		if (this.processingEnv instanceof BaseProcessingEnvImpl) {
+			boolean preview = ((BaseProcessingEnvImpl) this.processingEnv).isPreviewEnabled();
+			assertTrue("Preview flag not seen as enabled", preview);
+		}
+	}
+	public void testPreviewFlagFalse() throws IOException {
+		if (this.processingEnv instanceof BaseProcessingEnvImpl) {
+			boolean preview = ((BaseProcessingEnvImpl) this.processingEnv).isPreviewEnabled();
+			assertFalse("Preview flag not seen as enabled", preview);
+		}
+	}
+
+	@Override
+	public void reportError(String msg) {
+		throw new AssertionFailedError(msg);
+	}
+	private String getExceptionStackTrace(Throwable t) {
+		StringBuffer buf = new StringBuffer(t.getMessage());
+		StackTraceElement[] traces = t.getStackTrace();
+		for (int i = 0; i < traces.length; i++) {
+			StackTraceElement trace = traces[i];
+			buf.append("\n\tat " + trace);
+			if (i == 12)
+				break; // Don't dump all stacks
+		}
+		return buf.toString();
+	}
+	protected String getElementsAsString(List<? extends Element> list) {
+		StringBuilder builder = new StringBuilder("[");
+		for (Element element : list) {
+			if (element instanceof PackageElement) {
+				builder.append(((PackageElement) element).getQualifiedName());
+			} else if (element instanceof ModuleElement) {
+				builder.append(((ModuleElement) element).getQualifiedName());
+			} else if (element instanceof TypeElement) {
+				builder.append(((TypeElement) element).getQualifiedName());
+			}  else {
+				builder.append(element.getSimpleName());
+			}
+			builder.append(", ");
+		}
+		builder.append("]");
+		return builder.toString();
+	}
+	public void assertModifiers(Set<Modifier> modifiers, String[] expected) {
+		assertEquals("Incorrect no of modifiers", modifiers.size(), expected.length);
+		Set<String> actual = new HashSet<String>(expected.length);
+		for (Modifier modifier : modifiers) {
+			actual.add(modifier.toString());
+		}
+		for(int i = 0, length = expected.length; i < length; i++) {
+			boolean result = actual.remove(expected[i]);
+			if (!result) reportError("Modifier not present :" + expected[i]);
+		}
+		if (!actual.isEmpty()) {
+			reportError("Unexpected modifiers present:" + actual.toString());
+		}
+	}
+	public void assertTrue(String msg, boolean value) {
+		if (!value) reportError(msg);
+	}
+	public void assertFalse(String msg, boolean value) {
+		if (value) reportError(msg);
+	}
+	public void assertSame(String msg, Object obj1, Object obj2) {
+		if (obj1 != obj2) {
+			reportError(msg + ", should be " + obj1.toString() + " but " + obj2.toString());
+		}
+	}
+	public void assertNotSame(String msg, Object obj1, Object obj2) {
+		if (obj1 == obj2) {
+			reportError(msg + ", " + obj1.toString() + " should not be same as " + obj2.toString());
+		}
+	}
+	public void assertNotNull(String msg, Object obj) {
+		if (obj == null) {
+			reportError(msg);
+		}
+	}
+	public void assertNull(String msg, Object obj) {
+		if (obj != null) {
+			reportError(msg);
+		}
+	}
+    public void assertEquals(String message, Object expected, Object actual) {
+        if (equalsRegardingNull(expected, actual)) {
+            return;
+        } else {
+        	reportError(message + ", expected " + expected.toString() + " but was " + actual.toString());
+        }
+    }
+
+    public void assertEquals(String message, Object expected, Object alternateExpected, Object actual) {
+        if (equalsRegardingNull(expected, actual) || equalsRegardingNull(alternateExpected, actual)) {
+            return;
+        } else {
+        	reportError(message + ", expected " + expected.toString() + " but was " + actual.toString());
+        }
+    }
+    
+    static boolean equalsRegardingNull(Object expected, Object actual) {
+        if (expected == null) {
+            return actual == null;
+        }
+        return expected.equals(actual);
+    }
+    
+	public void assertEquals(String msg, int expected, int actual) {
+		if (expected != actual) {
+			StringBuffer buf = new StringBuffer();
+			buf.append(msg);
+			buf.append(", expected " + expected + " but was " + actual);
+			reportError(buf.toString());
+		}
+	}
+	public void assertEquals(Object expected, Object actual) {
+		if (expected != actual) {
+			
+		}
+	}
+	private class AssertionFailedError extends Error {
+		private static final long serialVersionUID = 1L;
+
+		public AssertionFailedError(String msg) {
+			super(msg);
+		}
+	}
+}
diff --git a/org.eclipse.jdt.compiler.apt.tests/src/org/eclipse/jdt/compiler/apt/tests/Java13ElementsTests.java b/org.eclipse.jdt.compiler.apt.tests/src/org/eclipse/jdt/compiler/apt/tests/Java13ElementsTests.java
new file mode 100644
index 0000000..e746b89
--- /dev/null
+++ b/org.eclipse.jdt.compiler.apt.tests/src/org/eclipse/jdt/compiler/apt/tests/Java13ElementsTests.java
@@ -0,0 +1,102 @@
+/*******************************************************************************
+ * Copyright (c) 2019 IBM Corporation.
+ *
+ * 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.compiler.apt.tests;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.lang.model.SourceVersion;
+import javax.tools.JavaCompiler;
+
+import org.eclipse.jdt.internal.compiler.tool.EclipseCompiler;
+
+import junit.framework.TestCase;
+
+public class Java13ElementsTests extends TestCase {
+	private static final String MODULE_PROC = "org.eclipse.jdt.compiler.apt.tests.processors.elements.Java13ElementProcessor";
+
+	public void testPreviewFlagTrue() throws IOException {
+		JavaCompiler compiler = BatchTestUtils.getEclipseCompiler();
+		internalTestWithPreview(compiler, MODULE_PROC, "13", "testPreviewFlagTrue", null, "modules2", true);
+	}
+	public void testPreviewFlagFalse() throws IOException {
+		JavaCompiler compiler = BatchTestUtils.getEclipseCompiler();
+		internalTestWithPreview(compiler, MODULE_PROC, "13", "testPreviewFlagFalse", null, "modules2", false);
+	}
+
+	protected void internalTestWithPreview(JavaCompiler compiler, String processor, String compliance,
+			String testMethod, String testClass, String resourceArea, boolean preview) throws IOException {
+		if (!canRunJava13()) {
+			return;
+		}
+		System.clearProperty(processor);
+		File targetFolder = TestUtils.concatPath(BatchTestUtils.getSrcFolderName(), "mod_locations", resourceArea);
+		if (testClass == null || testClass.equals("")) {
+			BatchTestUtils.copyResources("mod_locations/" + resourceArea, targetFolder);
+		} else {
+			BatchTestUtils.copyResource("mod_locations/" + resourceArea + "/" + testClass, targetFolder);
+		}
+
+		List<String> options = new ArrayList<String>();
+		options.add("-A" + processor);
+		options.add("-A" + testMethod);
+		options.add("-processor");
+		options.add(processor);
+		// Javac 1.8 doesn't (yet?) support the -1.8 option
+		if (compiler instanceof EclipseCompiler) {
+			options.add("-" + compliance);
+		} else {
+			options.add("-source");
+			options.add(compliance);
+		}
+		if (preview) 
+			options.add("--enable-preview");
+		BatchTestUtils.compileInModuleMode(compiler, options, processor, targetFolder, null, true);
+		// If it succeeded, the processor will have set this property to "succeeded";
+		// if not, it will set it to an error value.
+		assertEquals("succeeded", System.getProperty(processor));
+	}
+	public boolean canRunJava13() {
+		try {
+			SourceVersion.valueOf("RELEASE_13");
+		} catch(IllegalArgumentException iae) {
+			return false;
+		}
+		return true;
+	}
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		BatchTestUtils.init();
+	}
+
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+
+}
\ No newline at end of file
diff --git a/org.eclipse.jdt.compiler.apt/META-INF/MANIFEST.MF b/org.eclipse.jdt.compiler.apt/META-INF/MANIFEST.MF
index 78e9d32..dac4564 100644
--- a/org.eclipse.jdt.compiler.apt/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.compiler.apt/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %fragmentName
 Bundle-SymbolicName: org.eclipse.jdt.compiler.apt;singleton:=true
-Bundle-Version: 1.3.700.qualifier
+Bundle-Version: 1.3.750.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-Vendor: %providerName
 Fragment-Host: org.eclipse.jdt.core;bundle-version="[3.5.0,4.0.0)"
diff --git a/org.eclipse.jdt.compiler.apt/build.properties b/org.eclipse.jdt.compiler.apt/build.properties
index 7e1102b..847f3a7 100644
--- a/org.eclipse.jdt.compiler.apt/build.properties
+++ b/org.eclipse.jdt.compiler.apt/build.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2005, 2017 IBM Corporation and others.
+# Copyright (c) 2005, 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
 ###############################################################################
@@ -22,4 +26,4 @@
 output.. = bin/
 source.. = src/
 
-jars.extra.classpath = lib/java10api.jar
+jars.extra.classpath = lib/java13api.jar
diff --git a/org.eclipse.jdt.compiler.apt/lib/java10api.jar b/org.eclipse.jdt.compiler.apt/lib/java10api.jar
deleted file mode 100644
index 464b691..0000000
--- a/org.eclipse.jdt.compiler.apt/lib/java10api.jar
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.compiler.apt/lib/java13api.jar b/org.eclipse.jdt.compiler.apt/lib/java13api.jar
new file mode 100644
index 0000000..d8bbb8b
--- /dev/null
+++ b/org.eclipse.jdt.compiler.apt/lib/java13api.jar
Binary files differ
diff --git a/org.eclipse.jdt.compiler.apt/pom.xml b/org.eclipse.jdt.compiler.apt/pom.xml
index d4e4560..dec6840 100644
--- a/org.eclipse.jdt.compiler.apt/pom.xml
+++ b/org.eclipse.jdt.compiler.apt/pom.xml
@@ -18,7 +18,7 @@
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.compiler.apt</artifactId>
-  <version>1.3.700-SNAPSHOT</version>
+  <version>1.3.750-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 
   <build>
diff --git a/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseProcessingEnvImpl.java b/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseProcessingEnvImpl.java
index f288a44..167ef1a 100644
--- a/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseProcessingEnvImpl.java
+++ b/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/dispatch/BaseProcessingEnvImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2015 BEA Systems, Inc. 
+ * Copyright (c) 2007, 2019 BEA Systems, Inc. 
  *
  * 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:
  *    wharley@bea.com - initial API and implementation
  *    IBM Corporation - fix for 342598
@@ -129,11 +133,33 @@
 			return SourceVersion.RELEASE_6;
 		}
 		try {
-			return SourceVersion.valueOf("RELEASE_7"); //$NON-NLS-1$
+			if (this._compiler.options.sourceLevel == ClassFileConstants.JDK1_7) {
+				return SourceVersion.valueOf("RELEASE_7"); //$NON-NLS-1$
+			}
+			if (this._compiler.options.sourceLevel == ClassFileConstants.JDK1_8) {
+				return SourceVersion.valueOf("RELEASE_8"); //$NON-NLS-1$
+			}
+			if (this._compiler.options.sourceLevel == ClassFileConstants.JDK9) {
+				return SourceVersion.valueOf("RELEASE_9"); //$NON-NLS-1$
+			}
+			if (this._compiler.options.sourceLevel == ClassFileConstants.JDK10) {
+				return SourceVersion.valueOf("RELEASE_10"); //$NON-NLS-1$
+			}
+			if (this._compiler.options.sourceLevel == ClassFileConstants.JDK11) {
+				return SourceVersion.valueOf("RELEASE_11"); //$NON-NLS-1$
+			}
+			if (this._compiler.options.sourceLevel == ClassFileConstants.JDK12) {
+				return SourceVersion.valueOf("RELEASE_12"); //$NON-NLS-1$
+			}
+			if (this._compiler.options.sourceLevel == ClassFileConstants.JDK13) {
+				return SourceVersion.valueOf("RELEASE_13"); //$NON-NLS-1$
+			}
 		} catch(IllegalArgumentException e) {
 			// handle call on a JDK 6
 			return SourceVersion.RELEASE_6;
 		}
+		// handle call on a JDK 6 by default
+		return SourceVersion.RELEASE_6;
 	}
 
 	/**
@@ -174,5 +200,12 @@
 		_addedClassFiles.toArray(result);
 		return result;
 	}
+	/*
+	 * This overrides ProcessingEnvironment, but can't declare so since
+	 * we are still compiling against JDK 8.
+	 */
+    public boolean isPreviewEnabled() {
+        return this._compiler.options.enablePreviewFeatures;
+    }
 
 }
diff --git a/org.eclipse.jdt.compiler.tool.tests/.classpath b/org.eclipse.jdt.compiler.tool.tests/.classpath
index fc20dc5..1aaf229 100644
--- a/org.eclipse.jdt.compiler.tool.tests/.classpath
+++ b/org.eclipse.jdt.compiler.tool.tests/.classpath
@@ -6,7 +6,7 @@
 		</attributes>
 	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="lib" path="lib/java10api.jar"/>
+	<classpathentry kind="lib" path="lib/java13api.jar"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/org.eclipse.jdt.compiler.tool.tests/META-INF/MANIFEST.MF b/org.eclipse.jdt.compiler.tool.tests/META-INF/MANIFEST.MF
index eb56b0d..54d07eb 100644
--- a/org.eclipse.jdt.compiler.tool.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.compiler.tool.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.compiler.tool.tests
-Bundle-Version: 1.2.500.qualifier
+Bundle-Version: 1.2.550.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/org.eclipse.jdt.compiler.tool.tests/build.properties b/org.eclipse.jdt.compiler.tool.tests/build.properties
index c7599cf..af94d0e 100644
--- a/org.eclipse.jdt.compiler.tool.tests/build.properties
+++ b/org.eclipse.jdt.compiler.tool.tests/build.properties
@@ -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
 #     Red Hat Inc. (mistria) - Avoid nested jars
@@ -16,9 +20,9 @@
                about.html,\
                plugin.properties,\
                test.xml,\
-               lib/java10api.jar,\
+               lib/java13api.jar,\
                resources/
 src.includes = about.html
 source.. = src/
 output.. = bin/
-jars.extra.classpath = lib/java10api.jar
+jars.extra.classpath = lib/java13api.jar
diff --git a/org.eclipse.jdt.compiler.tool.tests/lib/java10api.jar b/org.eclipse.jdt.compiler.tool.tests/lib/java10api.jar
deleted file mode 100644
index 464b691..0000000
--- a/org.eclipse.jdt.compiler.tool.tests/lib/java10api.jar
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.compiler.tool.tests/lib/java13api.jar b/org.eclipse.jdt.compiler.tool.tests/lib/java13api.jar
new file mode 100644
index 0000000..d8bbb8b
--- /dev/null
+++ b/org.eclipse.jdt.compiler.tool.tests/lib/java13api.jar
Binary files differ
diff --git a/org.eclipse.jdt.compiler.tool.tests/pom.xml b/org.eclipse.jdt.compiler.tool.tests/pom.xml
index e3b2d63..bd8c059 100644
--- a/org.eclipse.jdt.compiler.tool.tests/pom.xml
+++ b/org.eclipse.jdt.compiler.tool.tests/pom.xml
@@ -20,7 +20,7 @@
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.compiler.tool.tests</artifactId>
-  <version>1.2.500-SNAPSHOT</version>
+  <version>1.2.550-SNAPSHOT</version>
   <packaging>eclipse-test-plugin</packaging>
   <properties>
   	<testSuite>${project.artifactId}</testSuite>
diff --git a/org.eclipse.jdt.compiler.tool/.classpath b/org.eclipse.jdt.compiler.tool/.classpath
index a3b97ca..59c1bb0 100644
--- a/org.eclipse.jdt.compiler.tool/.classpath
+++ b/org.eclipse.jdt.compiler.tool/.classpath
@@ -2,7 +2,7 @@
 <classpath>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="lib" path="lib/java10api.jar"/>
+	<classpathentry kind="lib" path="lib/java13api.jar"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/org.eclipse.jdt.compiler.tool/META-INF/MANIFEST.MF b/org.eclipse.jdt.compiler.tool/META-INF/MANIFEST.MF
index 0a2c732..aff73d2 100644
--- a/org.eclipse.jdt.compiler.tool/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.compiler.tool/META-INF/MANIFEST.MF
@@ -2,13 +2,13 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %fragmentName
 Bundle-SymbolicName: org.eclipse.jdt.compiler.tool;singleton:=true
-Bundle-Version: 1.2.600.qualifier
+Bundle-Version: 1.2.550.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: compiler_tool_fragment
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: META-INF.services,
  org.eclipse.jdt.internal.compiler.tool;x-internal:=true
 Fragment-Host: org.eclipse.jdt.core;bundle-version="[3.3.0,4.0.0)"
-Bundle-ClassPath: lib/java10api.jar,
+Bundle-ClassPath: lib/java13api.jar,
  .
 Automatic-Module-Name: org.eclipse.jdt.compiler.tool
diff --git a/org.eclipse.jdt.compiler.tool/build.properties b/org.eclipse.jdt.compiler.tool/build.properties
index fd418f7..edf77e6 100644
--- a/org.eclipse.jdt.compiler.tool/build.properties
+++ b/org.eclipse.jdt.compiler.tool/build.properties
@@ -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
 ###############################################################################
@@ -18,6 +22,6 @@
                .,\
                about.html,\
                compiler_tool_fragment.properties,\
-               lib/java10api.jar
+               lib/java13api.jar
 src.includes = about.html
-jars.extra.classpath = lib/java10api.jar
\ No newline at end of file
+jars.extra.classpath = lib/java13api.jar
\ No newline at end of file
diff --git a/org.eclipse.jdt.compiler.tool/lib/java10api.jar b/org.eclipse.jdt.compiler.tool/lib/java10api.jar
deleted file mode 100644
index 464b691..0000000
--- a/org.eclipse.jdt.compiler.tool/lib/java10api.jar
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.jdt.compiler.tool/lib/java13api.jar b/org.eclipse.jdt.compiler.tool/lib/java13api.jar
new file mode 100644
index 0000000..d8bbb8b
--- /dev/null
+++ b/org.eclipse.jdt.compiler.tool/lib/java13api.jar
Binary files differ
diff --git a/org.eclipse.jdt.compiler.tool/pom.xml b/org.eclipse.jdt.compiler.tool/pom.xml
index 4dedf82..975b748 100644
--- a/org.eclipse.jdt.compiler.tool/pom.xml
+++ b/org.eclipse.jdt.compiler.tool/pom.xml
@@ -18,7 +18,7 @@
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.compiler.tool</artifactId>
-  <version>1.2.600-SNAPSHOT</version>
+  <version>1.2.550-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 
   <build>
diff --git a/org.eclipse.jdt.core.tests.builder/META-INF/MANIFEST.MF b/org.eclipse.jdt.core.tests.builder/META-INF/MANIFEST.MF
index 92bb29b..ccf9aba 100644
--- a/org.eclipse.jdt.core.tests.builder/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.core.tests.builder/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.core.tests.builder; singleton:=true
-Bundle-Version: 3.10.700.qualifier
+Bundle-Version: 3.10.750.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Export-Package: org.eclipse.jdt.core.tests.builder
diff --git a/org.eclipse.jdt.core.tests.builder/pom.xml b/org.eclipse.jdt.core.tests.builder/pom.xml
index e612ab0..6034b0b 100644
--- a/org.eclipse.jdt.core.tests.builder/pom.xml
+++ b/org.eclipse.jdt.core.tests.builder/pom.xml
@@ -19,7 +19,7 @@
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.core.tests.builder</artifactId>
-  <version>3.10.700-SNAPSHOT</version>
+  <version>3.10.750-SNAPSHOT</version>
   <packaging>eclipse-test-plugin</packaging>
 
   <properties>
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 04a0637..96f8ec7 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 28d1790..2423bcf 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
@@ -3549,22 +3549,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(
@@ -3601,17 +3601,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 9b78ee7..4717880 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
  *******************************************************************************/
@@ -57,6 +61,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 31f5fb6..55553d1 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
@@ -302,6 +302,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);
 		}
@@ -423,6 +425,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
@@ -565,6 +581,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);
@@ -947,7 +977,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
@@ -1759,7 +1789,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 */,
@@ -1781,10 +1811,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 */,
@@ -1865,7 +1895,7 @@
 		String[] classLibraries,
 		boolean shouldFlushOutputDirectory,
 		String[] vmArguments,
-		Map customOptions,
+		Map<String, String> customOptions,
 		ICompilerRequestor customRequestor) {
 		runTest(
 	 		// test directory preparation
@@ -2951,7 +2981,7 @@
 			String[] testFiles,
 			// compiler options
 			String[] classLibraries,
-			Map customOptions,
+			Map<String, String> customOptions,
 			boolean performStatementsRecovery,
 			ICompilerRequestor customRequestor,
 			// compiler results
@@ -3091,7 +3121,7 @@
 			// compiler options
 			String[] classLibraries,
 			boolean libsOnModulePath,
-			Map customOptions,
+			Map<String, String> customOptions,
 			boolean performStatementsRecovery,
 			ICompilerRequestor customRequestor,
 			// compiler results
@@ -3126,7 +3156,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 29c8fd6..1b0c644 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
@@ -299,7 +303,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[] {}));
 	}
 
@@ -806,6 +810,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));
@@ -1179,7 +1184,27 @@
 	    expectedProblemAttributes.put("PreviewFeatureDisabled", new ProblemAttributes(CategorizedProblem.CAT_COMPLIANCE));
 	    expectedProblemAttributes.put("PreviewFeatureUsed", new ProblemAttributes(CategorizedProblem.CAT_COMPLIANCE));
 	    expectedProblemAttributes.put("PreviewFeatureNotSupported", new ProblemAttributes(CategorizedProblem.CAT_COMPLIANCE));
-		StringBuffer failures = new StringBuffer();
+	    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();
 		Arrays.sort(fields, new Comparator() {
@@ -1755,6 +1780,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);
@@ -2128,7 +2154,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 571e5f4..004c2ce 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
@@ -10404,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"
 	);
 }
@@ -10450,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"
 	);
 }
@@ -10479,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();
 }
@@ -10544,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();
 }
@@ -10575,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);
@@ -10607,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[] {
@@ -10639,8 +10859,7 @@
 			"",
 		}, 
 		getCompilerOptions(),
-		""
-	);
+		"");
 }
 public void testBug481931_source() {
 	runNegativeTestWithLibs(
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 76b77b3..d79f1ee 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
@@ -5497,7 +5497,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);
@@ -5517,7 +5517,7 @@
 			"			x = new X();\n"+
 			"			x  = switch (i) { \n"+
 			"			  case 1  ->   {\n"+
-			"				 break x;\n"+
+			"				 yield x;\n"+
 			"			  }\n"+
 			"			  default -> x;\n"+
 			"			};\n"+
@@ -5549,7 +5549,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);
@@ -5570,7 +5570,7 @@
 			"			x  = switch (i) { \n"+
 			"			  case 1  ->   {\n"+
 			"				 x = new X();\n"+
-			"				 break x;\n"+
+			"				 yield x;\n"+
 			"			  }\n"+
 			"			  default -> x;\n"+
 			"			};\n"+
@@ -5607,7 +5607,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);
@@ -5627,7 +5627,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"+
@@ -5654,7 +5654,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/SwitchExpressionTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchExpressionTest.java
index fc14e13..1fef2d0 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;
 
@@ -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..8ecf027
--- /dev/null
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/SwitchExpressionsYieldTest.java
@@ -0,0 +1,3439 @@
+/*******************************************************************************
+ * 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[] { "testBug550861_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_000() {
+		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");
+	}
+	public void testBug548418_01() {
+		runConformTest(
+			new String[] {
+				"X.java",
+				"public class X {\n"+
+				"  @SuppressWarnings({ \"preview\", \"unused\" })\n"+
+				"  public static void main(String[] args) {\n"+
+				"	int day =10;\n"+
+				"    int i = switch (day) {\n"+
+				"      default -> {\n"+
+				"        for(int j = 0; j < 3; j++) {\n"+
+				"        	yield 99;\n"+
+				"        }\n"+
+				"        yield 0;\n"+
+				"      }\n"+
+				"    };\n"+
+				"    System.out.println(i);\n"+
+				"  }\n"+
+				"}\n"
+			},
+			"99");
+	}
+	public void testBug550853_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 : {yield switch (i) {\n"+
+				"        		default -> { yield 0; } \n"+
+				"        		};\n"+
+				"        	}\n"+
+				"    };\n"+
+				"    return v;\n"+
+				"  }\n"+
+				"  public static void main(String argv[]) throws Exception {\n"+
+				"    System.out.println(X.foo(1));\n"+
+				"  }\n"+
+				"}\n"
+			},
+			"0");
+	}
+	public void testBug550861_01() {
+		runConformTest(
+			new String[] {
+				"X.java",
+				"public class X {\n"+
+				"  @SuppressWarnings({ \"preview\" })\n"+
+				"  public static void foo(int i) throws Exception {\n"+
+				"	  System.out.println(switch(0) {\n"+
+				"	  default -> {\n"+
+				"	    do yield 1; while(false);\n"+
+				"	  }\n"+
+				"	  });\n"+
+				"  }\n"+
+				"  public static void main(String argv[]) throws Exception {\n"+
+				"	  X.foo(1);\n"+
+				"  }\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 0fd2a6b..bfa9129 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
@@ -184,6 +184,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));
@@ -295,6 +300,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 03bb6ed..6f76d98 100644
--- a/org.eclipse.jdt.core.tests.model/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.core.tests.model/META-INF/MANIFEST.MF
@@ -2,7 +2,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,
diff --git a/org.eclipse.jdt.core.tests.model/pom.xml b/org.eclipse.jdt.core.tests.model/pom.xml
index f8c7d3a..72e1855 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..31e505a
--- /dev/null
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/RunAllJava13Tests.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * 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 junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.eclipse.jdt.core.tests.compiler.parser.ComplianceDiagnoseTest;
+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 org.eclipse.jdt.core.tests.util.AbstractCompilerTest;
+
+@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,
+			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..8e5c0828 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 3ed0c55..32ffb13 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
  *******************************************************************************/
@@ -372,7 +376,7 @@
 				// oops - guess that's not valid
 			}
 		}
-		assertEquals("Wrong last known type", 100, hi); // last known one
+		assertEquals("Wrong last known type", 101, hi); // last known one
 		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 79d7bdd..499c91b 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
  *******************************************************************************/
@@ -27,6 +31,7 @@
 import junit.framework.AssertionFailedError;
 import junit.framework.Test;
 
+import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.dom.*;
 
 // testing
@@ -1308,14 +1313,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);
@@ -8869,6 +8895,7 @@
 			ASTNode.PROVIDES_DIRECTIVE,
 			ASTNode.MODULE_MODIFIER,
 			ASTNode.SWITCH_EXPRESSION,
+			ASTNode.TEXT_BLOCK
 
 		};
 
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/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"+
+					"		};\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", FIELD, REFERENCES);
+		assertSearchResults("src/X.java int X.yield() [yield] EXACT_MATCH\n" +
+				"src/X.java int X.yield() [yield] EXACT_MATCH\n" +
+				"src/X.java int X.yield() [yield] EXACT_MATCH");
+	} finally {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
+	}
+}
+
+
+public void testBug549413_012() throws CoreException {
+	//field yield - multiple yield references
+	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 -> {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"+
+					"}\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\n" +
+				"src/X.java int X.foo(int) [yield] EXACT_MATCH\n" +
+				"src/X.java int X.foo(int) [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_013() throws CoreException {
+	//field yield -another yield field test
+	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 ->0 + yield + 10;\n"+
+					"		};\n"+
+					"		return r;\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_014() throws CoreException {
+	//field yield - ternary operator
+	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   int foo(int i) {\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"+
+					"	}\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\n" +
+				"src/X.java int X.foo(int) [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_015() throws CoreException {
+	//field yield - another test case
+	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   int foo(int i) {\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"+
+					"	}\n"+
+					"	public static int yield() {\n"+
+					"		return 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\n" +
+				"src/X.java int X.foo(int) [yield] EXACT_MATCH");
+	} finally {
+		javaProject.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, old);
+	}
+}
+
+
+public void testBug549413_016() throws CoreException {
+	//method yield -method references
+	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   int foo(int i) {\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"+
+					"	}\n"+
+					"	public static int yield() {\n"+
+					"		return 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_017() throws CoreException {
+	//select local variable and find the declaration
+	this.workingCopies = new ICompilationUnit[1];
+	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/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 /* here*/ 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"+
+					"}\n"
+	);
+
+	String str = this.workingCopies[0].getSource();
+	String selection = "/* here*/ yield";
+	int start = str.indexOf(selection);
+	int length = selection.length();
+
+	IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
+	ILocalVariable local = (ILocalVariable) elements[0];
+	search(local, DECLARATIONS, EXACT_RULE);
+	assertSearchResults(
+			"src/X.java int X.foo(int).yield [yield] EXACT_MATCH");
+}
+
+
+public void testBug549413_018() throws CoreException {
+	//select local variable and find the declaration
+	this.workingCopies = new ICompilationUnit[1];
+	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
+					"public class X {\n"+
+					"	@SuppressWarnings(\"preview\")\n"+
+					"	public  static int foo(int i) {\n"+
+					"		int localVar = 100;\n"+
+					"		int r = switch(i) {\n"+
+					"			default -> {yield /* here*/ localVar + localVar + localVar * localVar;}\n"+
+					"		};\n"+
+					"		return r;\n"+
+					"	}\n"+
+					"	public static void main(String[] args) {\n"+
+					"		System.out.println(X.foo(0));\n"+
+					"	}\n"+
+					"}\n"
+	);
+
+	String str = this.workingCopies[0].getSource();
+	String selection = "/* here*/ localVar";
+	int start = str.indexOf(selection);
+	int length = selection.length();
+
+	IJavaElement[] elements = this.workingCopies[0].codeSelect(start, length);
+	ILocalVariable local = (ILocalVariable) elements[0];
+	search(local, DECLARATIONS, EXACT_RULE);
+	assertSearchResults(
+			"src/X.java int X.foo(int).localVar [localVar] EXACT_MATCH");
+}
+// add non-preview stuff involving yield field and method
+
+public void testBug549413_019() throws CoreException {
+	//old style switch case without preview search for yield field.
+	this.workingCopies = new ICompilationUnit[1];
+	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
+		"public class X {\n"+
+		 " static int  yield;\n"+
+		 " public static int   yield() { \n"+
+		 "	  return 7; \n"+
+		 " } \n"+
+		 "  public static void main(String[] args) { \n"+
+		 "     int week = 1;	\n"+
+		 "    switch (week) { \n"+
+		 "      case 1:       \n"+
+		 "     	 yield = 88; \n"+
+		 "    	 break; \n"+
+		 "     case 2:  \n"+
+		 "   	 yield = yield();\n"+
+		 "   	 break; \n"+
+		 "    default:  \n"+
+		 "  	 yield = 88; \n"+
+		 "     break; \n" +
+		 " } \n" +
+		 " System.out.println(yield); \n"+
+		 "	}\n"+
+		 "}\n"
+);
+
+
+	try {
+		search("yield", FIELD, REFERENCES);
+		assertSearchResults("src/X.java void X.main(String[]) [yield] EXACT_MATCH\n" + 
+				"src/X.java void X.main(String[]) [yield] EXACT_MATCH\n" +
+				"src/X.java void X.main(String[]) [yield] EXACT_MATCH\n" +
+				"src/X.java void X.main(String[]) [yield] EXACT_MATCH");
+	} finally {
+	}
+}
+
+public void testBug549413_020() throws CoreException {
+	//old style switch case without preview search for yield method.
+	this.workingCopies = new ICompilationUnit[1];
+	this.workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/X.java",
+		"public class X {\n"+
+		 " static int  yield;\n"+
+		 " public static int   yield() { \n"+
+		 "	  return 7; \n"+
+		 " } \n"+
+		 "  public static void main(String[] args) { \n"+
+		 "     int week = 1;	\n"+
+		 "    switch (week) { \n"+
+		 "      case 1:       \n"+
+		 "     	 yield = 88; \n"+
+		 "    	 break; \n"+
+		 "     case 2:  \n"+
+		 "   	 yield = yield();\n"+
+		 "   	 break; \n"+
+		 "    default:  \n"+
+		 "  	 yield = 88; \n"+
+		 "     break; \n" +
+		 " } \n" +
+		 " System.out.println(yield); \n"+
+		 "	}\n"+
+		 "}\n"
+);
+
+
+	try {
+		search("yield", METHOD, REFERENCES);
+		assertSearchResults("src/X.java void X.main(String[]) [yield()] EXACT_MATCH");
+	} finally {
+	}
+}
+
+}
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/NullAnnotationModelTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/NullAnnotationModelTests.java
index 54d85a1..7a9a19d 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/NullAnnotationModelTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/NullAnnotationModelTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011, 2016 GK Software AG and others.
+ * Copyright (c) 2011, 2019 GK Software AG 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:
  *     Stephan Herrmann - initial API and implementation
  *******************************************************************************/
@@ -298,7 +302,7 @@
 					"Buildpath problem: the type invalid, which is configured as a null annotation type, cannot be resolved\n" +
 					"----------\n");
 
-			ASTParser parser = ASTParser.newParser(AST_INTERNAL_JLS11);
+			ASTParser parser = ASTParser.newParser(AST_INTERNAL_LATEST);
 			parser.setProject(p);
 			parser.setResolveBindings(true);
 			parser.setSource(unit);
@@ -361,7 +365,7 @@
 			assertEquals("Should have no markers", 0, markers.length);
 
 			// Challenge CompilationUnitResolver:
-			ASTParser parser = ASTParser.newParser(AST_INTERNAL_JLS11);
+			ASTParser parser = ASTParser.newParser(AST_INTERNAL_LATEST);
 			parser.setProject(p);
 			parser.setResolveBindings(true);
 			parser.setSource(unit);
@@ -432,7 +436,7 @@
 			assertEquals("Unexpected marker path", "/P/p1/C1.java", markers[0].getResource().getFullPath().toString());
 
 			// Challenge CompilationUnitResolver:
-			ASTParser parser = ASTParser.newParser(AST_INTERNAL_JLS11);
+			ASTParser parser = ASTParser.newParser(AST_INTERNAL_LATEST);
 			parser.setProject(p);
 			parser.setResolveBindings(true);
 			parser.setSource(unit);
@@ -485,7 +489,7 @@
 			final ICompilationUnit unit = getCompilationUnit("/P/p1/C1.java").getWorkingCopy(this.wcOwner, null);
 			assertNoProblem(c1SourceString.toCharArray(), unit);
 
-			ASTParser parser = ASTParser.newParser(AST_INTERNAL_JLS11);
+			ASTParser parser = ASTParser.newParser(AST_INTERNAL_LATEST);
 			parser.setProject(p);
 			parser.setResolveBindings(true);
 			parser.setSource(unit);
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ReconcilerTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ReconcilerTests.java
index 91ebdb5..eeafaf0 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ReconcilerTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ReconcilerTests.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
@@ -79,7 +83,7 @@
 		}
 	}
 	
-	/*package*/ static final int JLS_LATEST = AST.JLS11;
+	/*package*/ static final int JLS_LATEST = AST.JLS13;
 
 	static class ReconcileParticipant extends CompilationParticipant {
 		IJavaElementDelta delta;
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ReconcilerTests9.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ReconcilerTests9.java
index 4f85147..b49ffdc 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ReconcilerTests9.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ReconcilerTests9.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 - Copy-adjusted structure from ReconcilerTests, filled with new content
@@ -43,7 +47,7 @@
 	protected ICompilationUnit workingCopy;
 	protected ProblemRequestor problemRequestor;
 	
-	/*package*/ static final int JLS_LATEST = AST.JLS11;
+	/*package*/ static final int JLS_LATEST = AST.JLS13;
 
 /**
  */
@@ -436,7 +440,7 @@
 					"}\n");
 		this.workingCopy = getCompilationUnit("client/src/p/X.java").getWorkingCopy(this.wcOwner, null);
 		this.problemRequestor.initialize(this.workingCopy.getSource().toCharArray());
-		this.workingCopy.reconcile(AST_INTERNAL_JLS11, true, this.wcOwner, null);
+		this.workingCopy.reconcile(JLS_LATEST, true, this.wcOwner, null);
 		assertProblems("Expecting no problems",
 						"----------\n" + 
 						"----------\n",
@@ -501,7 +505,7 @@
 
 		this.workingCopy = getCompilationUnit("p/src/test/Test.java").getWorkingCopy(this.wcOwner, null);
 		this.problemRequestor.initialize(this.workingCopy.getSource().toCharArray());
-		this.workingCopy.reconcile(AST_INTERNAL_JLS11, true, this.wcOwner, null);
+		this.workingCopy.reconcile(JLS_LATEST, true, this.wcOwner, null);
 		assertProblems("Expecting no problems",
 						"----------\n" + 
 						"----------\n",
@@ -560,7 +564,7 @@
 
 		this.workingCopy = getCompilationUnit("p/src/test/Test.java").getWorkingCopy(this.wcOwner, null);
 		this.problemRequestor.initialize(this.workingCopy.getSource().toCharArray());
-		this.workingCopy.reconcile(AST_INTERNAL_JLS11, true, this.wcOwner, null);
+		this.workingCopy.reconcile(JLS_LATEST, true, this.wcOwner, null);
 		assertProblems("Expecting no problems",
 						"----------\n" + 
 						"1. ERROR in /p/src/test/Test.java (at line 3)\n" + 
@@ -641,7 +645,7 @@
 		ICompilationUnit wc = getCompilationUnit(pathExample).getWorkingCopy(this.wcOwner, null);
 		wc.getBuffer().append(" ");
 		this.problemRequestor.initialize((sourceExample+" ").toCharArray());
-		wc.reconcile(AST_INTERNAL_JLS11, true, this.wcOwner, null);
+		wc.reconcile(JLS_LATEST, true, this.wcOwner, null);
 		assertProblems("Expecting no problems",
 						"----------\n" + 
 						"----------\n",
@@ -676,7 +680,7 @@
 		this.problemRequestor.initialize(testSrc.toCharArray());
 		this.workingCopy = getCompilationUnit("testproj/src/test/Test.java").getWorkingCopy(this.wcOwner, null);
 		this.problemRequestor.initialize(this.workingCopy.getSource().toCharArray());
-		this.workingCopy.reconcile(AST_INTERNAL_JLS11, true, this.wcOwner, null);
+		this.workingCopy.reconcile(JLS_LATEST, true, this.wcOwner, null);
 		assertProblems("Expecting no problems", "----------\n" + "----------\n", this.problemRequestor);
 
 		IMarker[] markers = p.getProject().findMarkers(null, true, IResource.DEPTH_INFINITE);
@@ -792,7 +796,7 @@
 		this.problemRequestor.initialize(testSource.toCharArray());
 		this.workingCopy = getCompilationUnit("p/src-test/test/Test.java").getWorkingCopy(this.wcOwner, null);
 		this.problemRequestor.initialize(this.workingCopy.getSource().toCharArray());
-		this.workingCopy.reconcile(AST_INTERNAL_JLS11, true, this.wcOwner, null);
+		this.workingCopy.reconcile(JLS_LATEST, true, this.wcOwner, null);
 		assertProblems("Expecting no problems", "----------\n" + "----------\n", this.problemRequestor);
 
 		markers = p.getProject().findMarkers(null, true, IResource.DEPTH_INFINITE);
@@ -843,7 +847,7 @@
 		this.workingCopy.discardWorkingCopy();
 		this.workingCopy = getCompilationUnit("p2/src-test/p2/Test.java").getWorkingCopy(this.wcOwner, null);
 		this.problemRequestor.initialize(testSource.toCharArray());
-		this.workingCopy.reconcile(AST_INTERNAL_JLS11, true, this.wcOwner, null);
+		this.workingCopy.reconcile(JLS_LATEST, true, this.wcOwner, null);
 		assertProblems("Expecting no problems", "----------\n" + "----------\n", this.problemRequestor);
 		this.workingCopy.discardWorkingCopy();
 	} finally {
@@ -934,7 +938,7 @@
 		this.problemRequestor.initialize(cSource.toCharArray());
 		this.workingCopy = getCompilationUnit("c/src/com/example/c/C.java").getWorkingCopy(this.wcOwner, null);
 		this.problemRequestor.initialize(this.workingCopy.getSource().toCharArray());
-		this.workingCopy.reconcile(AST_INTERNAL_JLS11, true, this.wcOwner, null);
+		this.workingCopy.reconcile(AST_INTERNAL_JLS13, true, this.wcOwner, null);
 		assertProblems("Expecting no problems",
 				"----------\n" +
 				"----------\n",
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/RunCompletionModelTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/RunCompletionModelTests.java
index 348ad9c..992ad6f 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/RunCompletionModelTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/RunCompletionModelTests.java
@@ -41,7 +41,6 @@
 			COMPLETION_SUITES.add(CompletionTests9.class);
 			COMPLETION_SUITES.add(CompletionTests10.class);
 			COMPLETION_SUITES.add(CompletionTests11.class);
-			COMPLETION_SUITES.add(CompletionTests12.class);
 			COMPLETION_SUITES.add(CompletionContextTests.class);
 			COMPLETION_SUITES.add(CompletionContextTests_1_5.class);
 			COMPLETION_SUITES.add(CompletionWithMissingTypesTests.class);
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingStatementsTest.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingStatementsTest.java
index ae8f5e5..2406a51 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingStatementsTest.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingStatementsTest.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:
@@ -104,10 +108,10 @@
 		return createSuite(ASTRewritingStatementsTest.class);
 	}
 
- 	@Override
+	@Override
 	protected void setUp() throws Exception {
 		super.setUp();
-		if (this.apiLevel == AST.JLS12 ) {
+		if (this.apiLevel == AST.JLS13 ) {
 			this.project1.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
 			this.project1.setOption(JavaCore.COMPILER_PB_REPORT_PREVIEW_FEATURES, JavaCore.IGNORE);
 		}
@@ -3615,7 +3619,7 @@
 			assertTrue("Number of statements not 0", statements.size() == 0);
 
 			SwitchCase caseStatement1= ast.newSwitchCase();
-			if (this.apiLevel < AST.JLS12) {
+			if (this.apiLevel < AST.JLS13) {
 				caseStatement1.setExpression(ast.newNumberLiteral("1"));
 			}
 			else {
@@ -3625,7 +3629,7 @@
 			Statement statement1= ast.newReturnStatement();
 
 			SwitchCase caseStatement2= ast.newSwitchCase(); // default
-			if (this.apiLevel < AST.JLS12) {
+			if (this.apiLevel < AST.JLS13) {
 				caseStatement2.setExpression(null);
 			}
 
@@ -3650,7 +3654,7 @@
 			// change case statement
 			SwitchCase caseStatement= (SwitchCase) statements.get(3);
 			Expression newCaseExpression= ast.newNumberLiteral("10");
-			if (this.apiLevel != AST.JLS12) {
+			if (this.apiLevel < AST.JLS13) {
 				rewrite.replace(caseStatement.getExpression(), newCaseExpression, null);
 			} else {
 				List expressions = caseStatement.expressions();
@@ -3663,7 +3667,7 @@
 			{
 				// insert case statement
 				SwitchCase caseStatement2= ast.newSwitchCase();
-				if (this.apiLevel < AST.JLS12) {
+				if (this.apiLevel < AST.JLS13) {
 					caseStatement2.setExpression(ast.newNumberLiteral("11"));
 				}
 				else {
@@ -3679,7 +3683,7 @@
 			{
 				// insert case statement
 				SwitchCase caseStatement2= ast.newSwitchCase();
-				if (this.apiLevel < AST.JLS12) {
+				if (this.apiLevel < AST.JLS13) {
 					caseStatement2.setExpression(ast.newNumberLiteral("12"));
 				}
 				else {
@@ -3774,7 +3778,7 @@
 				assertTrue("Number of statements not 0", statements.size() == 0);
 	
 				SwitchCase caseStatement1= ast.newSwitchCase();
-				if (this.apiLevel < AST.JLS12) {
+				if (this.apiLevel < AST.JLS13) {
 					caseStatement1.setExpression(ast.newNumberLiteral("1"));
 				}
 				else {
@@ -3784,7 +3788,7 @@
 				Statement statement1= ast.newReturnStatement();
 	
 				SwitchCase caseStatement2= ast.newSwitchCase(); // default
-				if (this.apiLevel < AST.JLS12) {
+				if (this.apiLevel < AST.JLS13) {
 					caseStatement2.setExpression(null);
 				}
 	
@@ -3809,7 +3813,7 @@
 				// change case statement
 				SwitchCase caseStatement= (SwitchCase) statements.get(3);
 				Expression newCaseExpression= ast.newNumberLiteral("10");
-				if (this.apiLevel < AST.JLS12) {
+				if (this.apiLevel < AST.JLS13) {
 					rewrite.replace(caseStatement.getExpression(), newCaseExpression, null);
 				} else {
 					List expressions = caseStatement.expressions();
@@ -3822,7 +3826,7 @@
 				{
 					// insert case statement
 					SwitchCase caseStatement2= ast.newSwitchCase();
-					if (this.apiLevel < AST.JLS12) {
+					if (this.apiLevel < AST.JLS13) {
 						caseStatement2.setExpression(ast.newNumberLiteral("11"));
 					}
 					else {
@@ -3839,7 +3843,7 @@
 				{
 					// insert case statement
 					SwitchCase caseStatement2= ast.newSwitchCase();
-					if (this.apiLevel < AST.JLS12) {
+					if (this.apiLevel < AST.JLS13) {
 						caseStatement2.setExpression(ast.newNumberLiteral("12"));
 					}
 					else {
@@ -4150,7 +4154,7 @@
 				ExpressionStatement assignment = (ExpressionStatement)statements.get(1); // i= 1;:
 				
 				SwitchCase switchCase = ast.newSwitchCase();
-				if (this.apiLevel < AST.JLS12) {
+				if (this.apiLevel < AST.JLS13) {
 					switchCase.setExpression(ast.newNumberLiteral("2"));
 				}
 				else {
@@ -4298,7 +4302,7 @@
 				ExpressionStatement assignment = (ExpressionStatement)statements.get(1); // i= 1;
 				
 				SwitchCase switchCase = ast.newSwitchCase();
-				if (this.apiLevel < AST.JLS12) {
+				if (this.apiLevel < AST.JLS13) {
 					switchCase.setExpression(ast.newNumberLiteral("2"));
 				}
 				else {
@@ -4622,7 +4626,7 @@
 			SwitchStatement switchStmt = (SwitchStatement) blockStatements.get(1);
 
 			SwitchCase caseStatement1= ast.newSwitchCase();
-			if (this.apiLevel < AST.JLS12) {
+			if (this.apiLevel < AST.JLS13) {
 				caseStatement1.setExpression(ast.newNumberLiteral("100"));
 			} else {
 				caseStatement1.expressions().add(ast.newNumberLiteral("100"));
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingSwitchExpressionsTest.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingSwitchExpressionsTest.java
index 1775481..f7f9092 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingSwitchExpressionsTest.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingSwitchExpressionsTest.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
  *******************************************************************************/
@@ -54,15 +58,15 @@
 		return createSuite(ASTRewritingSwitchExpressionsTest.class);
 	}
 
- 	@Override
+	@Override
 	protected void setUp() throws Exception {
 		super.setUp();
-		if (this.apiLevel == AST.JLS12 ) {
+		if (this.apiLevel == AST.JLS13 ) {
 			this.project1.setOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
 			this.project1.setOption(JavaCore.COMPILER_PB_REPORT_PREVIEW_FEATURES, JavaCore.IGNORE);
-			this.project1.setOption(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_12);
-			this.project1.setOption(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_12);
-			this.project1.setOption(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_12);
+			this.project1.setOption(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_13);
+			this.project1.setOption(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_13);
+			this.project1.setOption(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_13);
 		}
 	}
 	 	
@@ -169,8 +173,9 @@
 		buf.append("}\n");
 		assertEqualString(preview, buf.toString());
 	}
+	@Deprecated
 	@SuppressWarnings("rawtypes")
-	public void testSwitchExpressions_02_since_12() throws Exception {
+	public void _testSwitchExpressions_02_since_12() throws Exception {
 		IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null);
 		StringBuffer buf= new StringBuffer();
 		buf.append("package test1;\n");
@@ -228,8 +233,9 @@
 		assertEqualString(preview, buf.toString());
 	}
 
+	@Deprecated
 	@SuppressWarnings("rawtypes")
-	public void testSwitchExpressions_03_since_12() throws Exception {
+	public void _testSwitchExpressions_03_since_12() throws Exception {
 		IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null);
 		String s	=
 				"package test1;\n"+
@@ -315,7 +321,7 @@
 	}
 
 	@SuppressWarnings("rawtypes")
-	public void testSwitchStatement_Bug543720_since_12() throws Exception {
+	public void _testSwitchStatement_Bug543720_since_12() throws Exception {
 		IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null);
 		String s	=
 				"package test1;\n"+
@@ -396,7 +402,7 @@
 		assertEqualString(preview, buf.toString());
 	}
 	@SuppressWarnings("rawtypes")
-	public void testSwitchExpressions_04_since_12() throws Exception {
+	public void _testSwitchExpressions_04_since_12() throws Exception {
 		IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null);
 		String s	= "package test1;\n"+
 				"public class X {\n"+
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingTest.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingTest.java
index 5437dbb..1b2a7a7 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingTest.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingTest.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:
@@ -83,9 +87,9 @@
 	/** @deprecated using deprecated code */
 	private final static int JLS10_INTERNAL = AST.JLS10;
 	
-	private final static int JLS12_INTERNAL = AST.JLS12;
+	private final static int JLS13_INTERNAL = AST.JLS13;
 
-	private final static int[] JLS_LEVELS = { JLS2_INTERNAL, JLS3_INTERNAL, JLS4_INTERNAL, JLS8_INTERNAL, JLS9_INTERNAL, JLS10_INTERNAL, JLS12_INTERNAL };
+	private final static int[] JLS_LEVELS = { JLS2_INTERNAL, JLS3_INTERNAL, JLS4_INTERNAL, JLS8_INTERNAL, JLS9_INTERNAL, JLS10_INTERNAL, JLS13_INTERNAL };
 
 	private static final String ONLY_AST_STRING = "_only";
 	private static final String SINCE_AST_STRING = "_since";
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ImportRewriteTest.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ImportRewriteTest.java
index ecf0daa..dd32ff1 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ImportRewriteTest.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ImportRewriteTest.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 Bug 378024 - Ordering of comments between imports not preserved
@@ -4959,7 +4963,7 @@
 				"}\n";
 		ICompilationUnit cu = pack1.createCompilationUnit("X.java", contents, false, null);
 
-		ASTParser parser = ASTParser.newParser(AST_INTERNAL_JLS11);
+		ASTParser parser = ASTParser.newParser(AST_INTERNAL_LATEST);
 		parser.setSource(cu);
 		parser.setResolveBindings(true);
 		parser.setStatementsRecovery(true);
@@ -4984,7 +4988,7 @@
 				"}\n";
 		ICompilationUnit cu = pack1.createCompilationUnit("X.java", contents, false, null);
 
-		ASTParser parser = ASTParser.newParser(AST_INTERNAL_JLS11);
+		ASTParser parser = ASTParser.newParser(AST_INTERNAL_LATEST);
 		parser.setSource(cu);
 		parser.setResolveBindings(true);
 		parser.setStatementsRecovery(true);
diff --git a/org.eclipse.jdt.core.tests.model/workspace/Converter12/.classpath b/org.eclipse.jdt.core.tests.model/workspace/Converter13/.classpath
similarity index 100%
rename from org.eclipse.jdt.core.tests.model/workspace/Converter12/.classpath
rename to org.eclipse.jdt.core.tests.model/workspace/Converter13/.classpath
diff --git a/org.eclipse.jdt.core.tests.model/workspace/Converter12/.project b/org.eclipse.jdt.core.tests.model/workspace/Converter13/.project
similarity index 100%
rename from org.eclipse.jdt.core.tests.model/workspace/Converter12/.project
rename to org.eclipse.jdt.core.tests.model/workspace/Converter13/.project
diff --git a/org.eclipse.jdt.core.tests.model/workspace/Converter12/src/X.java b/org.eclipse.jdt.core.tests.model/workspace/Converter13/src/X.java
similarity index 100%
rename from org.eclipse.jdt.core.tests.model/workspace/Converter12/src/X.java
rename to org.eclipse.jdt.core.tests.model/workspace/Converter13/src/X.java
diff --git a/org.eclipse.jdt.core.tests.model/workspace/Formatter/test390720/A_out.java b/org.eclipse.jdt.core.tests.model/workspace/Formatter/test390720/A_out.java
index 683eafb..f1db906 100644
--- a/org.eclipse.jdt.core.tests.model/workspace/Formatter/test390720/A_out.java
+++ b/org.eclipse.jdt.core.tests.model/workspace/Formatter/test390720/A_out.java
@@ -16,7 +16,7 @@
 
 
 		case 4: {
-			// break missing, oh well...
+			// yield missing, oh well...
 		}
 
 
@@ -33,13 +33,13 @@
 
 		int c = switch (b) {
 		case 444:
-			break a + b;
+			yield a + b;
 
 
 		case 555:
 		case 666:
 			doSoemthing();
-			break 777;
+			yield 777;
 
 
 		default:
@@ -52,7 +52,7 @@
 		case 1 -> 6;
 		case 2 -> {
 			int f = a + b;
-			break f * f;
+			yield f * f;
 		}
 		default -> 55;
 		};
@@ -79,32 +79,32 @@
 				doSomething(switch (a * b * c * d) {
 				case 888:
 					aaa();
-					break bbb();
+					yield bbb();
 
 
 				// comment
 				case 999:
 					aaa();
-					break bbb();
+					yield bbb();
 				// comment
 
 
 				case 101010:
 					aaa();
-					break bbb();
+					yield bbb();
 
 
 				// comment
 				case 111111:
 					aaa();
-					break bbb();
+					yield bbb();
 
 				// comment
 
 
 				case 121212:
 					aaa();
-					break bbb();
+					yield bbb();
 
 				// comment
 
@@ -113,14 +113,14 @@
 
 				case 131313:
 					aaa();
-					break bbb();
+					yield bbb();
 
 
 				// comment
 				// comment
 				default:
 					aaa();
-					break bbb();
+					yield bbb();
 				});
 			}
 		}
diff --git a/org.eclipse.jdt.core.tests.model/workspace/Formatter/test390720/B_out.java b/org.eclipse.jdt.core.tests.model/workspace/Formatter/test390720/B_out.java
index b428dfc..68d73ba 100644
--- a/org.eclipse.jdt.core.tests.model/workspace/Formatter/test390720/B_out.java
+++ b/org.eclipse.jdt.core.tests.model/workspace/Formatter/test390720/B_out.java
@@ -12,7 +12,7 @@
 			doSomeOtherThing();
 			break;
 		case 4: {
-			// break missing, oh well...
+			// yield missing, oh well...
 		}
 		case 5: {
 			doSomething(55);
@@ -25,11 +25,11 @@
 
 		int c = switch (b) {
 		case 444:
-			break a + b;
+			yield a + b;
 		case 555:
 		case 666:
 			doSoemthing();
-			break 777;
+			yield 777;
 		default:
 			doSomeOtherSomething();
 			return;
@@ -40,7 +40,7 @@
 		case 1 -> 6;
 		case 2 -> {
 			int f = a + b;
-			break f * f;
+			yield f * f;
 		}
 		default -> 55;
 		};
@@ -63,37 +63,37 @@
 				doSomething(switch (a * b * c * d) {
 				case 888:
 					aaa();
-					break bbb();
+					yield bbb();
 				// comment
 				case 999:
 					aaa();
-					break bbb();
+					yield bbb();
 				// comment
 				case 101010:
 					aaa();
-					break bbb();
+					yield bbb();
 
 				// comment
 				case 111111:
 					aaa();
-					break bbb();
+					yield bbb();
 
 				// comment
 				case 121212:
 					aaa();
-					break bbb();
+					yield bbb();
 
 				// comment
 
 				// comment
 				case 131313:
 					aaa();
-					break bbb();
+					yield bbb();
 				// comment
 				// comment
 				default:
 					aaa();
-					break bbb();
+					yield bbb();
 				});
 			}
 		}
diff --git a/org.eclipse.jdt.core.tests.model/workspace/Formatter/test390720/in.java b/org.eclipse.jdt.core.tests.model/workspace/Formatter/test390720/in.java
index 6072466..967b5c9 100644
--- a/org.eclipse.jdt.core.tests.model/workspace/Formatter/test390720/in.java
+++ b/org.eclipse.jdt.core.tests.model/workspace/Formatter/test390720/in.java
@@ -13,7 +13,7 @@
 			doSomeOtherThing();
 			break;
 		case 4: {
-			// break missing, oh well...
+			// yield missing, oh well...
 		}
 
 		case 5: {
@@ -27,12 +27,12 @@
 
 		int c = switch (b) {
 		case 444:
-			break a + b;
+			yield a + b;
 
 		case 555:
 		case 666:
 			doSoemthing();
-			break 777;
+			yield 777;
 		default:
 			doSomeOtherSomething();
 			return;
@@ -43,7 +43,7 @@
 		case 1 -> 6;
 		case 2 -> {
 			int f = a + b;
-			break f * f;
+			yield f * f;
 		}
 		default -> 55;
 		};
@@ -66,27 +66,27 @@
 				doSomething(switch (a * b * c * d) {
 				case 888:
 					aaa();
-					break bbb();
+					yield bbb();
 				// comment
 				case 999:
 					aaa();
-					break bbb();
+					yield bbb();
 				// comment
 
 				case 101010:
 					aaa();
-					break bbb();
+					yield bbb();
 
 				// comment
 				case 111111:
 					aaa();
-					break bbb();
+					yield bbb();
 
 				// comment
 
 				case 121212:
 					aaa();
-					break bbb();
+					yield bbb();
 
 				// comment
 
@@ -94,12 +94,12 @@
 
 				case 131313:
 					aaa();
-					break bbb();
+					yield bbb();
 				// comment
 				// comment
 				default:
 					aaa();
-					break bbb();
+					yield bbb();
 				});
 			}
 		}
diff --git a/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/A_out.java b/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/A_out.java
index 89ab563..2e4f19b 100644
--- a/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/A_out.java
+++ b/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/A_out.java
@@ -31,7 +31,7 @@
 
 		int value = switch (ABC) {
 			case A :
-				break 1;
+				yield 1;
 			case B :
 				System.out.println("!!!");
 				return;
@@ -40,16 +40,16 @@
 			case C , D , E , F , G :
 			case H , I , J : {
 				System.out.println("@@@");
-				break 3454366;
+				yield 3454366;
 			}
 			default:
-				break 6;
+				yield 6;
 		};
 
 		Object value2 = switch (a.b.c.d(e.f.g.h())) {
 			case a -> {
 				System.out.println("aaaaaaa");
-				break "";
+				yield "";
 			}
 			case b + c , d.e , f("aaaaaaaaaaaa"//
 					+ //
diff --git a/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/B_out.java b/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/B_out.java
index 30ba3b5..9800b28 100644
--- a/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/B_out.java
+++ b/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/B_out.java
@@ -31,7 +31,7 @@
 
 		int value = switch (ABC ) {
 		case A:
-			break 1;
+			yield 1;
 		case B:
 		System.out.println("!!!");
 		return;
@@ -40,16 +40,16 @@
 		case C,D,E,F,G:
 		case H,I,J: {
 			System.out.println("@@@");
-			break 3454366;
+			yield 3454366;
 		}
 		default:
-			break 6;
+			yield 6;
 		};
 
 		Object value2 = switch (a.b.c.d(e.f.g.h()) ) {
 		case a -> {
 			System.out.println("aaaaaaa");
-			break "";
+			yield "";
 		}
 		case b + c,d.e,f("aaaaaaaaaaaa"//
 				+ //
diff --git a/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/C_out.java b/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/C_out.java
index b98e85a..f792810 100644
--- a/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/C_out.java
+++ b/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/C_out.java
@@ -31,7 +31,7 @@
 
 		int value = switch(ABC) {
 		case A:
-		break 1;
+		yield 1;
 		case B:
 			System.out.println("!!!");
 			return;
@@ -40,16 +40,16 @@
 		case C, D, E, F, G:
 		case H, I, J: {
 			System.out.println("@@@");
-			break 3454366;
+			yield 3454366;
 		}
 		default:
-		break 6;
+		yield 6;
 		};
 
 		Object value2 = switch(a.b.c.d(e.f.g.h())) {
 		case a-> {
 			System.out.println("aaaaaaa");
-			break "";
+			yield "";
 		}
 		case b + c, d.e, f("aaaaaaaaaaaa"//
 				+ //
diff --git a/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/D_out.java b/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/D_out.java
index 49e0db7..c971599 100644
--- a/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/D_out.java
+++ b/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/D_out.java
@@ -34,7 +34,7 @@
 		int value = switch ( ABC)
 		{
 		case A:
-			break 1;
+			yield 1;
 		case B:
 			System.out.println("!!!");
 			return;
@@ -43,17 +43,17 @@
 		case C, D, E, F, G:
 		case H, I, J:{
 			System.out.println("@@@");
-			break 3454366;
+			yield 3454366;
 		}
 		default:
-			break 6;
+			yield 6;
 		};
 
 		Object value2 = switch ( a.b.c.d(e.f.g.h()))
 		{
 		case a ->{
 			System.out.println("aaaaaaa");
-			break "";
+			yield "";
 		}
 		case b + c, d.e, f("aaaaaaaaaaaa"//
 				+ //
diff --git a/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/E_out.java b/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/E_out.java
index d8bbd1a..25f85e2 100644
--- a/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/E_out.java
+++ b/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/E_out.java
@@ -37,7 +37,7 @@
 			ABC
 		) {
 		case A:
-			break 1;
+			yield 1;
 		case B:
 			System.out.println("!!!");
 			return;
@@ -46,10 +46,10 @@
 		case C, D, E, F, G:
 		case H, I, J: {
 			System.out.println("@@@");
-			break 3454366;
+			yield 3454366;
 		}
 		default :
-			break 6;
+			yield 6;
 		};
 
 		Object value2 = switch (
@@ -57,7 +57,7 @@
 		) {
 		case a -> {
 			System.out.println("aaaaaaa");
-			break "";
+			yield "";
 		}
 		case b + c, d.e, f("aaaaaaaaaaaa"//
 				+ //
diff --git a/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/F_out.java b/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/F_out.java
index 6ad72c3..27b34bd 100644
--- a/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/F_out.java
+++ b/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/F_out.java
@@ -31,7 +31,7 @@
 
 		int value = switch (ABC){
 		case A:
-			break 1;
+			yield 1;
 		case B:
 			System.out.println("!!!");
 			return;
@@ -40,16 +40,16 @@
 		case C, D, E, F, G:
 		case H, I, J:{
 			System.out.println("@@@");
-			break 3454366;
+			yield 3454366;
 		}
 		default:
-			break 6;
+			yield 6;
 		};
 
 		Object value2 = switch (a.b.c.d(e.f.g.h())){
 		case a -> {
 			System.out.println("aaaaaaa");
-			break "";
+			yield "";
 		}
 		case b + c, d.e, f("aaaaaaaaaaaa"//
 				+ //
diff --git a/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/G_out.java b/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/G_out.java
index aa05baa..5a06a59 100644
--- a/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/G_out.java
+++ b/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/G_out.java
@@ -31,7 +31,7 @@
 
 		int value = switch (ABC) {
 		case A:
-			break 1;
+			yield 1;
 		case B:
 			System.out.println("!!!");
 			return;
@@ -40,16 +40,16 @@
 		case C, D, E, F, G:
 		case H, I, J: {
 			System.out.println("@@@");
-			break 3454366;
+			yield 3454366;
 		}
 		default:
-			break 6;
+			yield 6;
 		};
 
 		Object value2 = switch (a.b.c.d(e.f.g.h())) {
 		case a -> {
 			System.out.println("aaaaaaa");
-			break "";
+			yield "";
 		}
 		case b + c, d.e, f("aaaaaaaaaaaa"//
 				+ //
diff --git a/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/in.java b/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/in.java
index 7dfd080..96f93ec 100644
--- a/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/in.java
+++ b/org.eclipse.jdt.core.tests.model/workspace/Formatter/test543818/in.java
@@ -30,7 +30,7 @@
 		
 		int value = switch(ABC) {
 		case A:
-			break 1;
+			yield 1;
 		case B:
 			System.out.println("!!!");
 			return;
@@ -38,15 +38,15 @@
 		case C, D, E, F, G:
 		case H, I, J: {
 			System.out.println("@@@");
-			break 3454366;
+			yield 3454366;
 		}
-			default: break 6;
+			default: yield 6;
 		};
 		
 		Object value2 = switch(a.b.c.d(e.f.g.h())) {
 		case a -> {
 			System.out.println("aaaaaaa");
-			break "";
+			yield "";
 		}
 		case b + c, d.e, f("aaaaaaaaaaaa"//
 		+//
diff --git a/org.eclipse.jdt.core.tests.performance/META-INF/MANIFEST.MF b/org.eclipse.jdt.core.tests.performance/META-INF/MANIFEST.MF
index 539f46b..9b5cad8 100644
--- a/org.eclipse.jdt.core.tests.performance/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.core.tests.performance/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.core.tests.performance
-Bundle-Version: 3.10.600.qualifier
+Bundle-Version: 3.10.650.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Export-Package: org.eclipse.jdt.core.tests.performance,
diff --git a/org.eclipse.jdt.core.tests.performance/pom.xml b/org.eclipse.jdt.core.tests.performance/pom.xml
index eaad8ac..9461444 100644
--- a/org.eclipse.jdt.core.tests.performance/pom.xml
+++ b/org.eclipse.jdt.core.tests.performance/pom.xml
@@ -20,7 +20,7 @@
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.core.tests.performance</artifactId>
-  <version>3.10.600-SNAPSHOT</version>
+  <version>3.10.650-SNAPSHOT</version>
   <packaging>eclipse-test-plugin</packaging>
   <properties>
   	<testSuite>${project.artifactId}</testSuite>
diff --git a/org.eclipse.jdt.core.tests.performance/src/org/eclipse/jdt/core/tests/performance/SecondaryTypesPerformanceTest.java b/org.eclipse.jdt.core.tests.performance/src/org/eclipse/jdt/core/tests/performance/SecondaryTypesPerformanceTest.java
index fa5a8a2..042fe9c 100644
--- a/org.eclipse.jdt.core.tests.performance/src/org/eclipse/jdt/core/tests/performance/SecondaryTypesPerformanceTest.java
+++ b/org.eclipse.jdt.core.tests.performance/src/org/eclipse/jdt/core/tests/performance/SecondaryTypesPerformanceTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016 Sven Strohschein and others.
+ * Copyright (c) 2016, 2019 Sven Strohschein 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:
  *     Sven Strohschein - initial API and implementation
  *******************************************************************************/
@@ -84,7 +88,7 @@
 		classpathList.add(testScratchArea);
 
 		for (int i = 0; i<10; ++i) {
-			ASTParser parser = ASTParser.newParser(AST.JLS11);
+			ASTParser parser = ASTParser.newParser(AST.JLS13);
 			parser.setResolveBindings(true);
 			parser.setStatementsRecovery(true);
 			parser.setBindingsRecovery(true);
diff --git a/org.eclipse.jdt.core/.settings/.api_filters b/org.eclipse.jdt.core/.settings/.api_filters
index 26e4f57..022a2a4 100644
--- a/org.eclipse.jdt.core/.settings/.api_filters
+++ b/org.eclipse.jdt.core/.settings/.api_filters
@@ -1,5 +1,13 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <component id="org.eclipse.jdt.core" version="2">
+    <resource path="META-INF/MANIFEST.MF">
+        <filter comment="BETA_JAVA13 - temporary service segment bumping - to merge with master later (4.14)" id="924844039">
+            <message_arguments>
+                <message_argument value="3.18.50"/>
+                <message_argument value="3.18.0"/>
+            </message_arguments>
+        </filter>
+    </resource>
     <resource path="compiler/org/eclipse/jdt/core/compiler/CategorizedProblem.java" type="org.eclipse.jdt.core.compiler.CategorizedProblem">
         <filter comment="To be addressed while merging 12" id="336658481">
             <message_arguments>
@@ -7,8 +15,21 @@
                 <message_argument value="CAT_COMPLIANCE"/>
             </message_arguments>
         </filter>
+        <filter comment="PREVIEW RELATED" id="336658481">
+            <message_arguments>
+                <message_argument value="org.eclipse.jdt.core.compiler.CategorizedProblem"/>
+                <message_argument value="CAT_PREVIEW_RELATED"/>
+            </message_arguments>
+        </filter>
     </resource>
     <resource path="compiler/org/eclipse/jdt/core/compiler/IProblem.java" type="org.eclipse.jdt.core.compiler.IProblem">
+        <filter comment="BETA_JAVA13 addition of preview related base" id="388194388">
+            <message_arguments>
+                <message_argument value="org.eclipse.jdt.core.compiler.IProblem"/>
+                <message_argument value="IgnoreCategoriesMask"/>
+                <message_argument value="4194303"/>
+            </message_arguments>
+        </filter>
         <filter id="388194388">
             <message_arguments>
                 <message_argument value="org.eclipse.jdt.core.compiler.IProblem"/>
@@ -17,25 +38,77 @@
             </message_arguments>
         </filter>
     </resource>
+    <resource path="dom/org/eclipse/jdt/core/dom/ASTVisitor.java" type="org.eclipse.jdt.core.dom.ASTVisitor">
+        <filter comment="Not required as it is a part of preview feature" id="338944126">
+            <message_arguments>
+                <message_argument value="org.eclipse.jdt.core.dom.ASTVisitor"/>
+                <message_argument value="visit(SwitchExpression)"/>
+            </message_arguments>
+        </filter>
+    </resource>
     <resource path="dom/org/eclipse/jdt/core/dom/BreakStatement.java" type="org.eclipse.jdt.core.dom.BreakStatement">
-        <filter comment="For Java 12 support." id="336658481">
+        <filter comment="No more an API as part of preview feature" id="338944126">
             <message_arguments>
                 <message_argument value="org.eclipse.jdt.core.dom.BreakStatement"/>
-                <message_argument value="EXPRESSION_PROPERTY"/>
+                <message_argument value="getExpression()"/>
+            </message_arguments>
+        </filter>
+        <filter comment="No more an API as part of preview feature" id="338944126">
+            <message_arguments>
+                <message_argument value="org.eclipse.jdt.core.dom.BreakStatement"/>
+                <message_argument value="isImplicit()"/>
+            </message_arguments>
+        </filter>
+        <filter comment="Not valid for Java 13" id="338944126">
+            <message_arguments>
+                <message_argument value="org.eclipse.jdt.core.dom.BreakStatement"/>
+                <message_argument value="setExpression(Expression)"/>
             </message_arguments>
         </filter>
     </resource>
     <resource path="dom/org/eclipse/jdt/core/dom/SwitchCase.java" type="org.eclipse.jdt.core.dom.SwitchCase">
-        <filter comment="For Java 12" id="336658481">
+        <filter comment="No more an API as part of preview feature" id="338944126">
             <message_arguments>
                 <message_argument value="org.eclipse.jdt.core.dom.SwitchCase"/>
-                <message_argument value="EXPRESSIONS2_PROPERTY"/>
+                <message_argument value="expressions()"/>
             </message_arguments>
         </filter>
-        <filter comment="For Java 12 Support - case -&gt;" id="336658481">
+        <filter comment="No more an API as part of preview feature" id="338944126">
             <message_arguments>
                 <message_argument value="org.eclipse.jdt.core.dom.SwitchCase"/>
-                <message_argument value="SWITCH_LABELED_RULE_PROPERTY"/>
+                <message_argument value="isSwitchLabeledRule()"/>
+            </message_arguments>
+        </filter>
+        <filter comment="No more an API as part of preview feature" id="338944126">
+            <message_arguments>
+                <message_argument value="org.eclipse.jdt.core.dom.SwitchCase"/>
+                <message_argument value="setSwitchLabeledRule(boolean)"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="dom/org/eclipse/jdt/core/dom/SwitchExpression.java" type="org.eclipse.jdt.core.dom.SwitchExpression">
+        <filter comment="No more an API as part of preview feature" id="338944126">
+            <message_arguments>
+                <message_argument value="org.eclipse.jdt.core.dom.SwitchExpression"/>
+                <message_argument value="getExpression()"/>
+            </message_arguments>
+        </filter>
+        <filter comment="No more an API as part of preview feature" id="338944126">
+            <message_arguments>
+                <message_argument value="org.eclipse.jdt.core.dom.SwitchExpression"/>
+                <message_argument value="propertyDescriptors(int)"/>
+            </message_arguments>
+        </filter>
+        <filter comment="No more an API as part of preview feature" id="338944126">
+            <message_arguments>
+                <message_argument value="org.eclipse.jdt.core.dom.SwitchExpression"/>
+                <message_argument value="setExpression(Expression)"/>
+            </message_arguments>
+        </filter>
+        <filter comment="Only for Java 13" id="338944126">
+            <message_arguments>
+                <message_argument value="org.eclipse.jdt.core.dom.SwitchExpression"/>
+                <message_argument value="statements()"/>
             </message_arguments>
         </filter>
     </resource>
diff --git a/org.eclipse.jdt.core/META-INF/MANIFEST.MF b/org.eclipse.jdt.core/META-INF/MANIFEST.MF
index a65e832..40a2c4a 100644
--- a/org.eclipse.jdt.core/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.core/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.core; singleton:=true
-Bundle-Version: 3.19.0.qualifier
+Bundle-Version: 3.19.50.qualifier
 Bundle-Activator: org.eclipse.jdt.core.JavaCore
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/Main.java b/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/Main.java
index 4313153..daf0b50 100644
--- a/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/Main.java
+++ b/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/Main.java
@@ -2195,6 +2195,16 @@
 					mode = DEFAULT;
 					continue;
 				}
+				if (currentArg.equals("-13") || currentArg.equals("-13.0")) { //$NON-NLS-1$ //$NON-NLS-2$
+					if (didSpecifyCompliance) {
+						throw new IllegalArgumentException(
+							this.bind("configure.duplicateCompliance", currentArg)); //$NON-NLS-1$
+					}
+					didSpecifyCompliance = true;
+					this.options.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_13);
+					mode = DEFAULT;
+					continue;
+				}
 				if (currentArg.equals("-d")) { //$NON-NLS-1$
 					if (this.destinationPath != null) {
 						StringBuffer errorMessage = new StringBuffer();
@@ -2753,6 +2763,8 @@
 					this.options.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_11);
 				} else if (currentArg.equals("12") || currentArg.equals("12.0")) { //$NON-NLS-1$//$NON-NLS-2$
 					this.options.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_12);
+				} else if (currentArg.equals("13") || currentArg.equals("13.0")) { //$NON-NLS-1$//$NON-NLS-2$
+					this.options.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_13);
 				}
 				else if (currentArg.equals("jsr14")) { //$NON-NLS-1$
 					this.options.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_JSR14);
@@ -2844,6 +2856,8 @@
 					this.options.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_11);
 				} else if (currentArg.equals("12") ||  currentArg.equals("12.0")) { //$NON-NLS-1$//$NON-NLS-2$
 					this.options.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_12);
+				} else if (currentArg.equals("13") ||  currentArg.equals("13.0")) { //$NON-NLS-1$//$NON-NLS-2$
+					this.options.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_13);
 				} else {
 					throw new IllegalArgumentException(this.bind("configure.source", currentArg)); //$NON-NLS-1$
 				}
diff --git a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java
index 38eaad8..3ae6696 100644
--- a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java
+++ b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/complete/CompletionParser.java
@@ -7,6 +7,10 @@
  * 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
@@ -99,6 +103,7 @@
 	protected static final int K_AFTER_NAME_IN_PROVIDES_STATEMENT = COMPLETION_PARSER + 49;
 	protected static final int K_AFTER_WITH_IN_PROVIDES_STATEMENT = COMPLETION_PARSER + 50;
 	protected static final int K_INSIDE_OPENS_STATEMENT = COMPLETION_PARSER + 51;
+	protected static final int K_YIELD_KEYWORD = COMPLETION_PARSER + 52;
 
 
 	public final static char[] FAKE_TYPE_NAME = new char[]{' '};
@@ -1675,6 +1680,14 @@
 	}
 	return false;
 }
+private boolean checkYieldKeyword() {
+	// Clients to ensure that we are already inside a method
+	char[] id = this.scanner.getCurrentIdentifierSource();
+	if(id.length > 0 && CharOperation.prefixEquals(id, Keywords.YIELD)) {
+		return true;
+	}
+	return false;
+}
 /**
  * Checks if the completion is inside a method invocation or a constructor invocation.
  * Returns whether we found a completion node.
@@ -3798,6 +3811,12 @@
 	}
 }
 @Override
+protected void consumeSwitchLabeledBlock() {
+	popUntilElement(K_SWITCH_LABEL);
+	popElement(K_SWITCH_LABEL);
+	concatNodeLists();
+}
+@Override
 protected void consumeToken(int token) {
 	if(this.isFirst) {
 		super.consumeToken(token);
@@ -3826,6 +3845,10 @@
 				break;
 			case TokenNameLBRACE:
 				popElement(K_BETWEEN_NEW_AND_LEFT_BRACKET);
+				if(topKnownElementKind(COMPLETION_OR_ASSIST_PARSER) == K_SWITCH_LABEL
+						&& previous == TokenNameARROW) {
+					pushOnElementStack(K_SWITCH_EXPRESSION_DELIMITTER);
+				}
 				break;
 			case TokenNameLBRACKET:
 				if(topKnownElementKind(COMPLETION_OR_ASSIST_PARSER) == K_BETWEEN_NEW_AND_LEFT_BRACKET) {
@@ -3916,6 +3939,16 @@
 			case TokenNameIdentifier:
 				if (this.inReferenceExpression)
 					break;
+				if (this.scanner.previewEnabled && isInsideSwitch() && checkYieldKeyword()) {
+					pushOnElementStack(K_YIELD_KEYWORD);
+					// Take the short cut here.
+					// Instead of injecting the TokenNameRestrictedIdentifierYield, totally ignore it
+					// and let completion take it course. We will not be constructing the 
+					// YieldStatement and thus not producing accurate completion, but completion doesn't have
+					// enough information anyway about the LHS anyway.
+					token = this.currentToken = this.getNextToken();
+					super.consumeToken(this.currentToken);
+				}
 				if (previous == TokenNameDOT) { // e.g. foo().[fred]()
 					if (this.invocationType != SUPER_RECEIVER // e.g. not super.[fred]()
 						&& this.invocationType != NAME_RECEIVER // e.g. not bar.[fred]()
@@ -4321,6 +4354,7 @@
 				pushOnElementStack(K_BETWEEN_FOR_AND_RIGHT_PAREN, this.bracketDepth);
 				break;
 			case TokenNameswitch:
+				popElement(K_LOCAL_INITIALIZER_DELIMITER);
 				pushOnElementStack(K_BETWEEN_SWITCH_AND_RIGHT_PAREN, this.bracketDepth);
 				break;
 			case TokenNamesynchronized:
@@ -4864,7 +4898,8 @@
 			// https://bugs.eclipse.org/bugs/show_bug.cgi?id=269493: Keywords are not proposed in a for
 			// loop without block. Completion while at K_CONTROL_STATEMENT_DELIMITER case needs to handled
 			// similar to the K_BLOCK_DELIMITER with minor differences.
-			if(kind == K_BLOCK_DELIMITER || kind == K_CONTROL_STATEMENT_DELIMITER || kind == K_LAMBDA_EXPRESSION_DELIMITER) {
+			if(kind == K_BLOCK_DELIMITER || kind == K_CONTROL_STATEMENT_DELIMITER || kind == K_LAMBDA_EXPRESSION_DELIMITER
+					|| kind == K_SWITCH_EXPRESSION_DELIMITTER) {
 				if(this.canBeExplicitConstructor == YES) {
 					canBeExplicitConstructorCall = true;
 				}
@@ -4906,6 +4941,9 @@
 				if(isInsideBreakable()) {
 					keywords[count++]= Keywords.BREAK;
 				}
+				if(isInsideSwitch()) {
+					keywords[count++]= Keywords.YIELD;
+				}
 			} else if (kind == K_BETWEEN_FOR_AND_RIGHT_PAREN) {
 				if (this.options.complianceLevel >= ClassFileConstants.JDK10) {
 					keywords[count++]= Keywords.VAR;
@@ -4920,13 +4958,16 @@
 				keywords[count++]= Keywords.TRUE;
 				keywords[count++]= Keywords.FALSE;
 				keywords[count++]= Keywords.NULL;
-
+				if (kind == K_YIELD_KEYWORD) {
+					keywords[count++]= Keywords.YIELD;
+				}
 				if(kind == K_SWITCH_LABEL) {
 					if(topKnownElementInfo(COMPLETION_OR_ASSIST_PARSER) != DEFAULT) {
 						keywords[count++]= Keywords.DEFAULT;
 					}
 					keywords[count++]= Keywords.BREAK;
 					keywords[count++]= Keywords.CASE;
+					keywords[count++]= Keywords.YIELD;
 					if (this.options.complianceLevel >= ClassFileConstants.JDK1_4) {
 						keywords[count++]= Keywords.ASSERT;
 					}
@@ -5124,9 +5165,7 @@
 @Override
 protected void consumePostfixExpression() {
 	// PostfixExpression ::= Name
-	if(this.topKnownElementKind(COMPLETION_OR_ASSIST_PARSER) == K_INSIDE_BREAK_STATEMENT) {
-		// Do nothing, just let checkLabelStatement() do the job
-	} else {
+	if (topKnownElementKind(COMPLETION_OR_ASSIST_PARSER) != K_YIELD_KEYWORD) {
 		super.consumePostfixExpression();
 	}
 }
@@ -5231,24 +5270,11 @@
 	return false;
 }
 
-protected boolean isIndirectlyInsideBlock(){
-	int i = this.elementPtr;
-	while(i > -1) {
-		if(this.elementKindStack[i] == K_BLOCK_DELIMITER)
-			return true;
-		i--;
-	}
-	return false;
-}
-
-protected boolean isInsideBlock(){
+protected boolean isInsideSwitch(){
 	int i = this.elementPtr;
 	while(i > -1) {
 		switch (this.elementKindStack[i]) {
-			case K_TYPE_DELIMITER : return false;
-			case K_METHOD_DELIMITER : return false;
-			case K_FIELD_INITIALIZER_DELIMITER : return false;
-			case K_BLOCK_DELIMITER : return true;
+			case K_SWITCH_LABEL : return true;
 		}
 		i--;
 	}
diff --git a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/AssistParser.java b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/AssistParser.java
index 9980463..fa1531d 100644
--- a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/AssistParser.java
+++ b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/AssistParser.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
  *******************************************************************************/
@@ -104,6 +108,7 @@
 	protected static final int K_ENUM_CONSTANT_DELIMITER = ASSIST_PARSER + 6; // whether we are inside a field initializer
 	protected static final int K_LAMBDA_EXPRESSION_DELIMITER = ASSIST_PARSER + 7; // whether we are inside a lambda expression
 	protected static final int K_MODULE_INFO_DELIMITER = ASSIST_PARSER + 8; // whether we are inside a module info declaration
+	protected static final int K_SWITCH_EXPRESSION_DELIMITTER = ASSIST_PARSER + 9; // whether we are inside a switch expression
 
 	// selector constants
 	protected static final int THIS_CONSTRUCTOR = -1;
@@ -1281,11 +1286,8 @@
 			break;
 	}
 }
-private boolean lastArrowAssociatedWithCase = false;
 @Override
 protected void consumeToken(int token) {
-	if (TokenNameARROW == token)
-		this.lastArrowAssociatedWithCase = this.caseFlagSet; // remember the arrow association before reset.
 	super.consumeToken(token);
 
 	if(this.isFirst) {
@@ -1318,9 +1320,10 @@
 				}
 				break;
 			case TokenNameLBRACE:
-				if (this.previousToken == TokenNameARROW && !this.lastArrowAssociatedWithCase) {
+				if (this.previousToken == TokenNameARROW) {
 					popElement(K_LAMBDA_EXPRESSION_DELIMITER);
-					pushOnElementStack(K_LAMBDA_EXPRESSION_DELIMITER, BLOCK_BODY, this.previousObjectInfo);
+					if (topKnownElementKind(ASSIST_PARSER, 1) != K_SWITCH_EXPRESSION_DELIMITTER)
+						pushOnElementStack(K_LAMBDA_EXPRESSION_DELIMITER, BLOCK_BODY, this.previousObjectInfo);
 				}
 				break;
 		}
diff --git a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/Keywords.java b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/Keywords.java
index 2fb6ab5..ba10f2c 100644
--- a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/Keywords.java
+++ b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/Keywords.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
@@ -7,7 +7,11 @@
  * 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
  *      Jesper Steen Møller - Contributions for
@@ -22,6 +26,7 @@
 	char[] ASSERT = "assert".toCharArray(); //$NON-NLS-1$
 	char[] BREAK = "break".toCharArray(); //$NON-NLS-1$
 	char[] CASE = "case".toCharArray(); //$NON-NLS-1$
+	char[] YIELD = "yield".toCharArray(); //$NON-NLS-1$
 	char[] CATCH = "catch".toCharArray(); //$NON-NLS-1$
 	char[] CLASS = "class".toCharArray(); //$NON-NLS-1$
 	char[] CONTINUE = "continue".toCharArray(); //$NON-NLS-1$
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/CategorizedProblem.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/CategorizedProblem.java
index 41add2d..e5785f7 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/CategorizedProblem.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/CategorizedProblem.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
  *******************************************************************************/
@@ -107,6 +111,9 @@
 	 * @since 3.18
 	 */
 	public static final int CAT_COMPLIANCE = 170;
+	/** Category for problems related to preview features 
+	 * @since 3.19 BETA_JAVA13*/
+	public static final int CAT_PREVIEW_RELATED = 180;
 
 /**
  * Returns an integer identifying the category of this problem. Categories, like problem IDs are
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/IProblem.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/IProblem.java
index 15f4535..64a5619 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/IProblem.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/IProblem.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
  *     IBM Corporation - added the following constants
@@ -375,11 +379,13 @@
 	int ModuleRelated = 0x00800000;
 	/** @since 3.18 */
 	int Compliance = 0x00400000;
+	/** @since 3.19 BETA_JAVA13 */
+	int PreviewRelated = 0x00200000; 
 
 	/**
 	 * Mask to use in order to filter out the category portion of the problem ID.
 	 */
-	int IgnoreCategoriesMask = 0x3FFFFF;
+	int IgnoreCategoriesMask = 0x1FFFFF;
 
 	/*
 	 * Below are listed all available problem IDs. Note that this list could be augmented in the future,
@@ -774,7 +780,9 @@
 
 	/** @since 3.10 */
 	int MissingTypeInLambda = MethodRelated + 271;
-
+	/** @since 3.19 BETA_JAVA13
+	 * @noreference preview related error */
+	int UnterminatedTextBlock = PreviewRelated + 272;
 	// type related problems
 	/** @since 3.1 */
 	int DiscouragedReference = TypeRelated + 280;
@@ -2061,7 +2069,9 @@
 	int PreviewFeatureUsed = Compliance + 1104;
 	/** @since 3.18 */
 	int PreviewFeatureNotSupported = Compliance + 1105;
-	
+	/** @since 3.19 BETA_JAVA13*/
+	int PreviewFeaturesNotAllowed = PreviewRelated + 1106;
+
 	/** @since 3.13 */
 	int UnlikelyCollectionMethodArgumentType = 1200;
 	/** @since 3.13 */
@@ -2094,26 +2104,105 @@
 	int VarIsNotAllowedHere = Syntax + 1511; // ''var'' is not allowed here
 	/** @since 3.16 */
 	int VarCannotBeMixedWithNonVarParams = Syntax + 1512; // ''var'' cannot be mixed with explicit or implicit parameters
-	/** @since 3.18 */
+	/** @since 3.18 
+	 * @deprecated preview related error - will be removed
+	 * @noreference preview related error */
 	int SwitchExpressionsIncompatibleResultExpressionTypes = TypeRelated + 1600;
-	/** @since 3.18 */
+	/** @since 3.18 
+	 * @deprecated preview related error - will be removed
+	 * @noreference preview related error */
 	int SwitchExpressionsEmptySwitchBlock = Internal + 1601;
-	/** @since 3.18 */
+	/** @since 3.18 
+	 * @deprecated preview related error - will be removed
+	 * @noreference preview related error */
 	int SwitchExpressionsNoResultExpression = TypeRelated + 1602;
-	/** @since 3.18 */
+	/** @since 3.18 
+	 * @deprecated preview related error - will be removed
+	 * @noreference preview related error */
 	int SwitchExpressionSwitchLabeledBlockCompletesNormally = Internal + 1603;
-	/** @since 3.18 */
+	/** @since 3.18 
+	 * @deprecated preview related error - will be removed
+	 * @noreference preview related error */
 	int SwitchExpressionLastStatementCompletesNormally = Internal + 1604;
-	/** @since 3.18 */
+	/** @since 3.18 
+	 * @deprecated preview related error - will be removed
+	 * @noreference preview related error */
 	int SwitchExpressionTrailingSwitchLabels = Internal + 1605;
-	/** @since 3.18 */
+	/** @since 3.18 
+	 * @deprecated preview related error - will be removed
+	 * @noreference preview related error */
 	int switchMixedCase = Syntax + 1606;
-	/** @since 3.18 */
+	/** @since 3.18 
+	 * @deprecated preview related error - will be removed
+	 * @noreference preview related error */
 	int SwitchExpressionMissingDefaultCase = Internal + 1607;
-	/** @since 3.18 */
+	/** @since 3.18 
+	 * @deprecated preview related error - will be removed
+	 * @noreference preview related error */
 	int SwitchExpressionBreakMissingValue = Internal + 1610;
-	/** @since 3.18 */
+	/** @since 3.18 
+	 * @deprecated preview related error - will be removed
+	 * @noreference preview related error */
 	int SwitchExpressionMissingEnumConstantCase = Internal + 1611;
-	/** @since 3.18 */
+	/** @since 3.18 
+	 * @deprecated preview related error - will be removed
+	 * @noreference preview related error */
 	int SwitchExpressionIllegalLastStatement = Internal + 1612;
+	/** @since 3.19 BETA_JAVA13
+	 * @noreference preview related error */
+	int SwitchExpressionsYieldIncompatibleResultExpressionTypes = PreviewRelated + 1700;
+	/** @since 3.19 BETA_JAVA13
+	 * @noreference preview related error */
+	int SwitchExpressionsYieldEmptySwitchBlock = PreviewRelated + 1701;
+	/** @since 3.19 BETA_JAVA13
+	 * @noreference preview related error */
+	int SwitchExpressionsYieldNoResultExpression = PreviewRelated + 1702;
+	/** @since 3.19 BETA_JAVA13
+	 * @noreference preview related error */
+	int SwitchExpressionaYieldSwitchLabeledBlockCompletesNormally = PreviewRelated + 1703;
+	/** @since 3.19 BETA_JAVA13
+	 * @noreference preview related error */
+	int SwitchExpressionsYieldLastStatementCompletesNormally = PreviewRelated + 1704;
+	/** @since 3.19 BETA_JAVA13
+	 * @noreference preview related error */
+	int SwitchExpressionsYieldTrailingSwitchLabels = PreviewRelated + 1705;
+	/** @since 3.19 BETA_JAVA13
+	 * @noreference preview related error */
+	int SwitchPreviewMixedCase = PreviewRelated + 1706;
+	/** @since 3.19 BETA_JAVA13
+	 * @noreference preview related error */
+	int SwitchExpressionsYieldMissingDefaultCase = PreviewRelated + 1707;
+	/** @since 3.19 BETA_JAVA13
+	 * @noreference preview related error */
+	int SwitchExpressionsYieldMissingValue = PreviewRelated + 1708;
+	/** @since 3.19 BETA_JAVA13
+	 * @noreference preview related error */
+	int SwitchExpressionsYieldMissingEnumConstantCase = PreviewRelated + 1709;
+	/** @since 3.19 BETA_JAVA13
+	 * @noreference preview related error */
+	int SwitchExpressionsYieldIllegalLastStatement = PreviewRelated + 1710;
+	/** @since 3.19 BETA_JAVA13
+	 * @noreference preview related error */
+	int SwitchExpressionsYieldBreakNotAllowed = PreviewRelated + 1711;
+	/** @since 3.19 BETA_JAVA13
+	 * @noreference preview related error */
+	int SwitchExpressionsYieldUnqualifiedMethodWarning = PreviewRelated + 1712;
+	/** @since 3.19 BETA_JAVA13
+	 * @noreference preview related error */
+	int SwitchExpressionsYieldUnqualifiedMethodError = PreviewRelated + 1713;
+	/** @since 3.19 BETA_JAVA13
+	 * @noreference preview related error */
+	int SwitchExpressionsYieldOutsideSwitchExpression = PreviewRelated + 1714;
+	/** @since 3.19 BETA_JAVA13
+	 * @noreference preview related error */
+	int SwitchExpressionsYieldRestrictedGeneralWarning = PreviewRelated + 1715;
+	/** @since 3.19 BETA_JAVA13
+	 * @noreference preview related error */
+	int SwitchExpressionsYieldIllegalStatement = PreviewRelated + 1716;
+	/** @since 3.19 BETA_JAVA13
+	 * @noreference preview related error */
+	int SwitchExpressionsYieldTypeDeclarationWarning = PreviewRelated + 1717;
+	/** @since 3.19 BETA_JAVA13
+	 * @noreference preview related error */
+	int SwitchExpressionsYieldTypeDeclarationError = PreviewRelated + 1718;
 	}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ASTVisitor.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ASTVisitor.java
index b515f77..1966155 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ASTVisitor.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ASTVisitor.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
  *******************************************************************************/
@@ -487,6 +491,9 @@
 			ClassScope scope) {
 		// do nothing by default
 	}
+	public void endVisit(YieldStatement yieldStatement, BlockScope scope) {
+		// do nothing by default
+	}
 	public void endVisit(WhileStatement whileStatement, BlockScope scope) {
 		// do nothing by default
 	}
@@ -981,6 +988,9 @@
 			ClassScope scope) {
 		return true; // do nothing by default, keep traversing
 	}
+	public boolean visit(YieldStatement yieldStatement, BlockScope scope) {
+		return true; // do nothing by default, keep traversing
+	}
 	public boolean visit(WhileStatement whileStatement, BlockScope scope) {
 		return true; // do nothing by default, keep traversing
 	}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/Compiler.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/Compiler.java
index 363f9c5..477443c 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/Compiler.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/Compiler.java
@@ -803,14 +803,29 @@
 		this.parser = new Parser(this.problemReporter, this.options.parseLiteralExpressionsAsConstants);
 	}
 
+	private  void abortIfPreviewNotAllowed(ICompilationUnit[] sourceUnits, int maxUnits) {
+		if (!this.options.enablePreviewFeatures)
+			return;
+		try {
+			if (this.options.sourceLevel != ClassFileConstants.getLatestJDKLevel()) {
+				this.problemReporter.abortDueToPreviewEnablingNotAllowed(CompilerOptions.versionFromJdkLevel(this.options.sourceLevel), CompilerOptions.getLatestVersion());
+			}
+		} catch (AbortCompilation a) {
+			// best effort to find a way for reporting this problem: report on the first source
+			if (a.compilationResult == null) {
+				a.compilationResult = new CompilationResult(sourceUnits[0], 0, maxUnits, this.options.maxProblemsPerUnit);
+			}
+			throw a;
+		}
+	}
 	/**
 	 * Add the initial set of compilation units into the loop
 	 *  ->  build compilation unit declarations, their bindings and record their results.
 	 */
 	protected void internalBeginToCompile(ICompilationUnit[] sourceUnits, int maxUnits) {
+		abortIfPreviewNotAllowed(sourceUnits,maxUnits);
 		if (!this.useSingleThread && maxUnits >= ReadManager.THRESHOLD)
 			this.parser.readManager = new ReadManager(sourceUnits, maxUnits);
-
 		// Switch the current policy and compilation result for this unit to the requested one.
 		for (int i = 0; i < maxUnits; i++) {
 			CompilationResult unitResult = null;
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/BreakStatement.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/BreakStatement.java
index ada2ae6..2c51d87 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/BreakStatement.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/BreakStatement.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
@@ -16,16 +20,11 @@
 package org.eclipse.jdt.internal.compiler.ast;
 
 import org.eclipse.jdt.internal.compiler.ASTVisitor;
-import org.eclipse.jdt.internal.compiler.codegen.CodeStream;
 import org.eclipse.jdt.internal.compiler.flow.*;
 import org.eclipse.jdt.internal.compiler.lookup.*;
 
 public class BreakStatement extends BranchStatement {
 
-	public Expression expression;
-	public SwitchExpression switchExpression;
-	public boolean isImplicit;
-
 public BreakStatement(char[] label, int sourceStart, int e) {
 	super(label, sourceStart, e);
 }
@@ -40,23 +39,20 @@
 		? flowContext.getTargetContextForDefaultBreak()
 		: flowContext.getTargetContextForBreakLabel(this.label);
 
+		// JLS 13 14.15
+		if (targetContext instanceof SwitchFlowContext &&
+				targetContext.associatedNode instanceof SwitchExpression) {
+			currentScope.problemReporter().switchExpressionBreakNotAllowed(this);
+		}
 	if (targetContext == null) {
 		if (this.label == null) {
 			currentScope.problemReporter().invalidBreak(this);
 		} else {
-			if (this.switchExpression == null)
-				currentScope.problemReporter().undefinedLabel(this);
+			currentScope.problemReporter().undefinedLabel(this);
 		}
 		return flowInfo; // pretend it did not break since no actual target
 	}
 
-	if ((this.isImplicit || this.switchExpression != null) && this.expression != null) {
-		flowInfo = this.expression.analyseCode(currentScope, flowContext, flowInfo);
-		this.expression.checkNPEbyUnboxing(currentScope, flowContext, flowInfo);
-		if (flowInfo.reachMode() == FlowInfo.REACHABLE && currentScope.compilerOptions().isAnnotationBasedNullAnalysisEnabled)
-			checkAgainstNullAnnotation(currentScope, flowContext, flowInfo, this.expression);
-	}
-
 	targetContext.recordAbruptExit();
 	targetContext.expireNullCheckedFieldInfo();
 
@@ -101,72 +97,17 @@
 	}
 	return FlowInfo.DEAD_END;
 }
-@Override
-protected void generateExpressionResultCode(BlockScope currentScope, CodeStream codeStream) {
-	if (this.label == null && this.expression != null) {
-		this.expression.generateCode(currentScope, codeStream, this.switchExpression != null);
-	}
-}
-@Override
-protected void adjustStackSize(BlockScope currentScope, CodeStream codeStream) {
-	if (this.label == null && this.expression != null && this.switchExpression != null) {
-		TypeBinding postConversionType = this.expression.postConversionType(currentScope);
-		switch(postConversionType.id) {
-			case TypeIds.T_long :
-			case TypeIds.T_double :
-				codeStream.decrStackSize(2);
-				break;
-			case TypeIds.T_void :
-				break;
-			default :
-				codeStream.decrStackSize(1);
-				break;
-		}
-	}
-}
-@Override
-public void resolve(BlockScope scope) {
-	super.resolve(scope);
-	if  (this.expression != null && (this.switchExpression != null || this.isImplicit)) {
-		if (this.switchExpression == null && this.isImplicit && !this.expression.statementExpression()) {
-			if (scope.compilerOptions().enablePreviewFeatures) {
-				/* JLS 12 14.11.2
-				Switch labeled rules in switch statements differ from those in switch expressions (15.28).
-				In switch statements they must be switch labeled statement expressions, ... */
-				scope.problemReporter().invalidExpressionAsStatement(this.expression);
-				return;
-			}
-		}
-		this.expression.resolveType(scope);
-	} else if (this.expression == null && this.switchExpression != null) {
-		scope.problemReporter().switchExpressionBreakMissingValue(this);
-	}
-}
-
-@Override
-public TypeBinding resolveExpressionType(BlockScope scope) {
-	return this.expression != null ? this.expression.resolveType(scope) : null;
-}
 
 @Override
 public StringBuffer printStatement(int tab, StringBuffer output) {
-	if (!this.isImplicit) // implicit for SwitchLabeledExpressions
-		printIndent(tab, output).append("break"); //$NON-NLS-1$
-	if (this.label != null) 
-		output.append(' ').append(this.label);
-	if (this.expression != null) {
-		output.append(' ');
-		this.expression.printExpression(tab, output);
-	}
+	printIndent(tab, output).append("break"); //$NON-NLS-1$
+	if (this.label != null) output.append(' ').append(this.label);
 	return output.append(';');
 }
 
 @Override
 public void traverse(ASTVisitor visitor, BlockScope blockscope) {
-	if (visitor.visit(this, blockscope)) {
-		if (this.expression != null)
-			this.expression.traverse(visitor, blockscope);
-	}
+	visitor.visit(this, blockscope);
 	visitor.endVisit(this, blockscope);
 }
 @Override
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.java
index b605963..07eda63 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.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
  *     Nick Teryaev - fix for bug (https://bugs.eclipse.org/bugs/show_bug.cgi?id=40752)
@@ -146,6 +150,7 @@
 	boolean wasInsideAssert = ((flowContext.tagBits & FlowContext.HIDE_NULL_COMPARISON_WARNING) != 0);
 	flowInfo = this.receiver.analyseCode(currentScope, flowContext, flowInfo, nonStatic).unconditionalInits();
 
+	yieldQualifiedCheck(currentScope);
 	// recording the closing of AutoCloseable resources:
 	CompilerOptions compilerOptions = currentScope.compilerOptions();
 	boolean analyseResources = compilerOptions.analyseResourceLeaks;
@@ -243,6 +248,18 @@
 	flowContext.expireNullCheckedFieldInfo(); // no longer trust this info after any message send
 	return flowInfo;
 }
+private void yieldQualifiedCheck(BlockScope currentScope) {
+	long sourceLevel = currentScope.compilerOptions().sourceLevel;
+	if (sourceLevel < ClassFileConstants.JDK13 || !this.receiverIsImplicitThis())
+		return;
+	if (this.selector == null || !("yield".equals(new String(this.selector)))) //$NON-NLS-1$
+		return;
+	if (sourceLevel == ClassFileConstants.JDK13 && currentScope.compilerOptions().enablePreviewFeatures) {
+		currentScope.problemReporter().switchExpressionsYieldUnqualifiedMethodError(this);
+	} else {
+		currentScope.problemReporter().switchExpressionsYieldUnqualifiedMethodWarning(this);
+	}
+}
 private void recordCallingClose(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, Expression closeTarget) {
 	FakedTrackingVariable trackingVariable = FakedTrackingVariable.getCloseTrackingVariable(closeTarget, flowInfo, flowContext);
 	if (trackingVariable != null) { // null happens if target is not a local variable or not an AutoCloseable
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Statement.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Statement.java
index 091157b..0664e66 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Statement.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Statement.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
@@ -305,7 +309,10 @@
 				this.breaksOut = true;
 	    	return false;
 	    }
-		
+		@Override
+		public boolean visit(YieldStatement yieldStatement, BlockScope skope) {
+	    	return false;
+	    }
 		public boolean breaksOut() {
 			Statement.this.traverse(this, null);
 			return this.breaksOut;
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SwitchExpression.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SwitchExpression.java
index 78c8e64..7b3e80f 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SwitchExpression.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SwitchExpression.java
@@ -7,6 +7,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
  *******************************************************************************/
@@ -292,14 +296,14 @@
 				resolve(upperScope);
 	
 				if (this.statements == null || this.statements.length == 0) {
-					//	Report Error JLS 12 15.28.1  The switch block must not be empty.
+					//	Report Error JLS 13 15.28.1  The switch block must not be empty.
 					upperScope.problemReporter().switchExpressionEmptySwitchBlock(this);
 					return null;
 				}
 				
 				resultExpressionsCount = this.resultExpressions != null ? this.resultExpressions.size() : 0;
 				if (resultExpressionsCount == 0) {
-					//  Report Error JLS 12 15.28.1 
+					//  Report Error JLS 13 15.28.1 
 					// It is a compile-time error if a switch expression has no result expressions.
 					upperScope.problemReporter().switchExpressionNoResultExpressions(this);
 					return null;
@@ -390,10 +394,11 @@
 			boolean typeNumeric = true;
 			TypeBinding resultNumeric = null;
 			HashSet<TypeBinding> typeSet = new HashSet<>();
-			/*  JLS 12 5.6.3 Switch Numeric Promotion
-			 * When a switch expression applies numeric promotion to a set of result expressions, each of which
-			 * must denote a value that is convertible to a numeric type, the following rules apply, in order:
-			 *  If any result expression is of a reference type, it is subjected to unboxing conversion (5.1.8).
+			/*  JLS 13 5.6 Numeric Contexts
+			 * An expression appears in a numeric context if it is one of:....
+			 * ...8. a result expression of a standalone switch expression (15.28.1),
+			 * where all the result expressions are convertible to a numeric type
+			 * If any expression is of a reference type, it is subjected to unboxing conversion (5.1.8).
 			 */
 			for (int i = 0; i < resultExpressionsCount; ++i) {
 				TypeBinding originalType = this.originalValueResultExpressionTypes[i];
@@ -413,7 +418,7 @@
 				 *  Otherwise, if any result expression is of type long, then other result expressions that are not of 
 				 *  type long are widened to long.
 				 */
-				TypeBinding[] dfl = new TypeBinding[]{// do not change the order JLS 12 5.6.3
+				TypeBinding[] dfl = new TypeBinding[]{// do not change the order JLS 13 5.6
 						TypeBinding.DOUBLE,
 						TypeBinding.FLOAT,
 						TypeBinding.LONG};
@@ -424,6 +429,13 @@
 					}
 				}
 
+				/* Otherwise, if any expression appears in a numeric array context or a numeric arithmetic context,
+				 * rather than a numeric choice context, then the promoted type is int and other expressions that are
+				 * not of type int undergo widening primitive conversion to int. - not applicable since numeric choice context.
+				 * [Note: A numeric choice context is a numeric context that is either a numeric conditional expression or
+				 * a standalone switch expression where all the result expressions are convertible to a numeric type.]
+				 */
+
 				 /*  Otherwise, if any result expression is of type int and is not a constant expression, the other 
 				 *  result expressions that are not of type int are widened to int.
 				 */
@@ -433,7 +445,6 @@
 					getResultNumeric(typeSet, this.originalValueResultExpressionTypes); // check the rest
 				typeSet = null; // hey gc!
 				for (int i = 0; i < resultExpressionsCount; ++i) {
-					// auto-unboxing and/or widening/narrrowing JLS 12 5.6.3
 					this.resultExpressions.get(i).computeConversion(this.scope,
 							resultNumeric, this.originalValueResultExpressionTypes[i]);
 					this.finalValueResultExpressionTypes[i] = resultNumeric;
@@ -517,24 +528,25 @@
 		// note: if an expression has a type integer, then it will be a constant 
 		// since non-constant integers are already processed before reaching here.
 
-		/*
-		 * Otherwise, if any result expression is of type char, and every other result expression is either of
-		 * type char, or of type byte, or a constant expression of type int with a value that is representable
-		 * in the type char, then the byte results are widened to char and the int results are narrowed to char.
+		/* Otherwise, if any expression is of type short, and every other expression is either of type short,
+		 * or of type byte, or a constant expression of type int with a value that is representable in the
+		 * type short, then T is short, the byte expressions undergo widening primitive conversion to short, 
+		 * and the int expressions undergo narrowing primitive conversion to short.\
+		 *
+		 * Otherwise, if any expression is of type byte, and every other expression is either of type byte or a
+		 * constant expression of type int with a value that is representable in the type byte, then T is byte 
+		 * and the int expressions undergo narrowing primitive conversion to byte.
+		 *
+		 * Otherwise, if any expression is of type char, and every other expression is either of type char or a
+		 * constant expression of type int with a value that is representable in the type char, then T is char
+		 * and the int expressions undergo narrowing primitive conversion to char.
+		 *
+		 * Otherwise, T is int and all the expressions that are not of type int undergo widening
+		 * primitive conversion to int.
 		 */
 
-		 /*  Otherwise, if any result expression is of type short, and every other result expression is either of
-		 *  type short, or of type byte, or a constant expression of type int with a value that is representable
-		 *  in the type short, then the byte results are widened to short and the int results are narrowed to
-		 *  short.
-		 */
-		 /*  Otherwise, if any result expression is of type byte, and every other result expression is either of
-		 *  type byte or a constant expression of type int with a value that is representable in the type byte,
-		 *  then the int results are narrowed to byte.
-		 */
-
-		// DO NOT Change the order below [as per JLS 12 5.6.3 item 2, sub-items 5,6 and 7].
-		TypeBinding[] csb = new TypeBinding[] {TypeBinding.CHAR, TypeBinding.SHORT, TypeBinding.BYTE};
+		// DO NOT Change the order below [as per JLS 13 5.6 ].
+		TypeBinding[] csb = new TypeBinding[] {TypeBinding.SHORT, TypeBinding.BYTE, TypeBinding.CHAR};
 		for (TypeBinding c : csb) {
 			TypeBinding result = check_csb(typeSet, c);
 			if (result != null)
@@ -547,7 +559,7 @@
 	public boolean isPolyExpression() {
 		if (this.isPolyExpression)
 			return true;
-		// JLS 12 15.28.1 A switch expression is a poly expression if it appears in an assignment context or
+		// JLS 13 15.28.1 A switch expression is a poly expression if it appears in an assignment context or
 		// an invocation context (5.2, 5.3). Otherwise, it is a standalone expression.
 		return this.isPolyExpression = this.expressionContext == ASSIGNMENT_CONTEXT || 
 				this.expressionContext == INVOCATION_CONTEXT;
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SwitchStatement.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SwitchStatement.java
index f32a048..c49066b 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SwitchStatement.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SwitchStatement.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 
@@ -92,7 +96,6 @@
 				}
 				// else add an implicit break
 				BreakStatement breakStatement = new BreakStatement(null, block.sourceEnd -1, block.sourceEnd);
-				breakStatement.isImplicit = true;
 
 				int l = block.statements == null ? 0 : block.statements.length;
 				if (l == 0) {
@@ -126,6 +129,7 @@
 			}
 			SwitchFlowContext switchContext =
 				new SwitchFlowContext(flowContext, this, (this.breakLabel = new BranchLabel()), true, true);
+			switchContext.isExpression = this instanceof SwitchExpression;
 
 			// analyse the block by considering specially the case/default statements (need to bind them
 			// to the entry point)
@@ -159,6 +163,19 @@
 						complaintLevel = initialComplaintLevel; // reset complaint
 						fallThroughState = CASE;
 					} else {
+						if (!(this instanceof SwitchExpression) &&
+							currentScope.compilerOptions().complianceLevel >= ClassFileConstants.JDK13 &&
+							statement instanceof YieldStatement &&
+							((YieldStatement) statement).isImplicit) {
+							YieldStatement y = (YieldStatement) statement;
+							Expression e = ((YieldStatement) statement).expression;
+							/* JLS 13 14.11.2
+									Switch labeled rules in switch statements differ from those in switch expressions (15.28).
+									In switch statements they must be switch labeled statement expressions, ... */
+							if (!y.expression.statementExpression()) {
+								this.scope.problemReporter().invalidExpressionAsStatement(e);
+							}
+						}
 						fallThroughState = getFallThroughState(statement, currentScope); // reset below if needed
 					}
 					if ((complaintLevel = statement.complainIfUnreachable(caseInits, this.scope, complaintLevel, true)) < Statement.COMPLAINED_UNREACHABLE) {
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TextBlock.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TextBlock.java
new file mode 100644
index 0000000..6c3d50e
--- /dev/null
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TextBlock.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * 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.internal.compiler.ast;
+
+public class TextBlock extends StringLiteral {
+
+	public TextBlock(char[] token, int start, int end, int lineNumber) {
+		super(token, start,end, lineNumber);
+	}
+}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TypeDeclaration.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TypeDeclaration.java
index 34bc92b..384eb29 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TypeDeclaration.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TypeDeclaration.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
@@ -658,6 +662,7 @@
  *	Common flow analysis for all types
  */
 private void internalAnalyseCode(FlowContext flowContext, FlowInfo flowInfo) {
+	checkYieldUsage();
 	if (!this.binding.isUsed() && this.binding.isOrEnclosedByPrivateType()) {
 		if (!this.scope.referenceCompilationUnit().compilationResult.hasSyntaxError) {
 			this.scope.problemReporter().unusedPrivateType(this);
@@ -780,6 +785,18 @@
 	}
 }
 
+private void checkYieldUsage() {
+	long sourceLevel = this.scope.compilerOptions().sourceLevel;
+	if (sourceLevel < ClassFileConstants.JDK13 || this.name == null ||
+			!("yield".equals(new String(this.name)))) //$NON-NLS-1$
+		return;
+	if (sourceLevel == ClassFileConstants.JDK13 && this.scope.compilerOptions().enablePreviewFeatures) {
+		this.scope.problemReporter().switchExpressionsYieldTypeDeclarationError(this);
+	} else {
+		this.scope.problemReporter().switchExpressionsYieldTypeDeclarationWarning(this);
+	}
+}
+
 private SimpleSetOfCharArray getJUnitMethodSourceValues() {
 	SimpleSetOfCharArray junitMethodSourceValues = new SimpleSetOfCharArray();
 	for (AbstractMethodDeclaration methodDeclaration : this.methods) {
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TypeReference.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TypeReference.java
index 11c9aec..56180d9 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TypeReference.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TypeReference.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
@@ -350,6 +354,19 @@
 public void aboutToResolve(Scope scope) {
 	// default implementation: do nothing
 }
+private void checkYieldUsage(Scope currentScope) {
+	char [][] qName = getTypeName();
+	String name = qName != null && qName[0] != null ? new String(qName[0]) : null;
+	long sourceLevel = currentScope.compilerOptions().sourceLevel;
+	if (sourceLevel < ClassFileConstants.JDK13 || name == null ||
+			!("yield".equals(new String(name)))) //$NON-NLS-1$
+		return;
+	if (sourceLevel == ClassFileConstants.JDK13 && currentScope.compilerOptions().enablePreviewFeatures) {
+		currentScope.problemReporter().switchExpressionsYieldTypeDeclarationError(this);
+	} else {
+		currentScope.problemReporter().switchExpressionsYieldTypeDeclarationWarning(this);
+	}
+}
 @Override
 public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) {
 	return flowInfo;
@@ -494,6 +511,7 @@
 protected TypeBinding internalResolveType(Scope scope, int location) {
 	// handle the error here
 	this.constant = Constant.NotAConstant;
+	checkYieldUsage(scope);
 	if (this.resolvedType != null) { // is a shared type reference which was already resolved
 		if (this.resolvedType.isValidBinding()) {
 			return this.resolvedType;
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/YieldStatement.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/YieldStatement.java
new file mode 100644
index 0000000..0d20930
--- /dev/null
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/YieldStatement.java
@@ -0,0 +1,186 @@
+/*******************************************************************************
+ * 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.internal.compiler.ast;
+
+import org.eclipse.jdt.internal.compiler.ASTVisitor;
+import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
+import org.eclipse.jdt.internal.compiler.codegen.CodeStream;
+import org.eclipse.jdt.internal.compiler.flow.*;
+import org.eclipse.jdt.internal.compiler.lookup.*;
+
+public class YieldStatement extends BranchStatement {
+
+	public Expression expression;
+	public SwitchExpression switchExpression;
+	/**
+	 * @noreference This field is not intended to be referenced by clients.
+	 */
+	public boolean isImplicit;
+
+public YieldStatement(Expression exp, int sourceStart, int sourceEnd) {
+	super(null, sourceStart, sourceEnd);
+	this.expression = exp;
+}
+@Override
+public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) {
+	// this.switchExpression != null && this.expression != null true here.
+
+	// here requires to generate a sequence of finally blocks invocations depending corresponding
+	// to each of the traversed try statements, so that execution will terminate properly.
+
+
+	// lookup the null label, this should answer the returnContext - for implicit yields, the nesting
+	// doesn't occur since it immediately follow '->' and hence identical to default break - ie the 
+	// immediate breakable context is guaranteed to be the one intended;
+	// while explicit yield should move up the parent to the switch expression.
+	FlowContext targetContext = this.isImplicit ? flowContext.getTargetContextForDefaultBreak() :
+		flowContext.getTargetContextForDefaultYield();
+
+	flowInfo = this.expression.analyseCode(currentScope, flowContext, flowInfo);
+	this.expression.checkNPEbyUnboxing(currentScope, flowContext, flowInfo);
+	if (flowInfo.reachMode() == FlowInfo.REACHABLE && currentScope.compilerOptions().isAnnotationBasedNullAnalysisEnabled)
+		checkAgainstNullAnnotation(currentScope, flowContext, flowInfo, this.expression);
+
+	targetContext.recordAbruptExit();
+	targetContext.expireNullCheckedFieldInfo();
+
+	this.initStateIndex =
+		currentScope.methodScope().recordInitializationStates(flowInfo);
+
+	this.targetLabel = targetContext.breakLabel();
+	FlowContext traversedContext = flowContext;
+	int subCount = 0;
+	this.subroutines = new SubRoutineStatement[5];
+
+	do {
+		SubRoutineStatement sub;
+		if ((sub = traversedContext.subroutine()) != null) {
+			if (subCount == this.subroutines.length) {
+				System.arraycopy(this.subroutines, 0, (this.subroutines = new SubRoutineStatement[subCount*2]), 0, subCount); // grow
+			}
+			this.subroutines[subCount++] = sub;
+			if (sub.isSubRoutineEscaping()) {
+				break;
+			}
+		}
+		traversedContext.recordReturnFrom(flowInfo.unconditionalInits());
+		traversedContext.recordBreakTo(targetContext);
+
+		if (traversedContext instanceof InsideSubRoutineFlowContext) {
+			ASTNode node = traversedContext.associatedNode;
+			if (node instanceof TryStatement) {
+				TryStatement tryStatement = (TryStatement) node;
+				flowInfo.addInitializationsFrom(tryStatement.subRoutineInits); // collect inits
+			}
+		} else if (traversedContext == targetContext) {
+			// only record break info once accumulated through subroutines, and only against target context
+			targetContext.recordBreakFrom(flowInfo);
+			break;
+		}
+	} while ((traversedContext = traversedContext.getLocalParent()) != null);
+
+	// resize subroutines
+	if (subCount != this.subroutines.length) {
+		System.arraycopy(this.subroutines, 0, (this.subroutines = new SubRoutineStatement[subCount]), 0, subCount);
+	}
+	return FlowInfo.DEAD_END;
+}
+@Override
+protected void generateExpressionResultCode(BlockScope currentScope, CodeStream codeStream) {
+	this.expression.generateCode(currentScope, codeStream, this.switchExpression != null);
+}
+@Override
+protected void adjustStackSize(BlockScope currentScope, CodeStream codeStream) {
+	if (this.label == null && this.expression != null && this.switchExpression != null) {
+		TypeBinding postConversionType = this.expression.postConversionType(currentScope);
+		switch(postConversionType.id) {
+			case TypeIds.T_long :
+			case TypeIds.T_double :
+				codeStream.decrStackSize(2);
+				break;
+			case TypeIds.T_void :
+				break;
+			default :
+				codeStream.decrStackSize(1);
+				break;
+		}
+	}
+}
+@Override
+public void resolve(BlockScope scope) {
+	// METHOD IN WORKS - INCOMPLETE
+	super.resolve(scope);
+	if (this.expression == null) {
+		//currentScope.problemReporter().switchExpressionYieldMissingExpression(this);
+		return;
+		
+	}
+	if (this.switchExpression != null || this.isImplicit) {
+		if (this.switchExpression == null && this.isImplicit && !this.expression.statementExpression()) {
+			if (scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK12 && scope.compilerOptions().enablePreviewFeatures) {
+				/* JLS 13 14.11.2
+				Switch labeled rules in switch statements differ from those in switch expressions (15.28).
+				In switch statements they must be switch labeled statement expressions, ... */
+				scope.problemReporter().invalidExpressionAsStatement(this.expression);
+				return;
+			}
+		}
+	} else {
+		if (scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK13) {
+			if (scope.compilerOptions().enablePreviewFeatures) {
+				scope.problemReporter().switchExpressionsYieldOutsideSwitchExpression(this);
+			} else {
+				scope.problemReporter().switchExpressionsYieldIllegalStatement(this);
+			}
+		}
+	}
+	this.expression.resolveType(scope);
+//	if  (this.expression != null) {
+//		this.expression.resolveType(scope);
+//	}
+}
+
+@Override
+public TypeBinding resolveExpressionType(BlockScope scope) {
+	return this.expression != null ? this.expression.resolveType(scope) : null;
+}
+
+@Override
+public StringBuffer printStatement(int tab, StringBuffer output) {
+	if (!this.isImplicit)
+		printIndent(tab, output).append("yield"); //$NON-NLS-1$
+	if (this.expression != null) {
+		output.append(' ');
+		this.expression.printExpression(tab, output);
+	}
+	return output.append(';');
+}
+
+@Override
+public void traverse(ASTVisitor visitor, BlockScope blockscope) {
+	if (visitor.visit(this, blockscope)) {
+		if (this.expression != null)
+			this.expression.traverse(visitor, blockscope);
+	}
+	visitor.endVisit(this, blockscope);
+}
+@Override
+public boolean doesNotCompleteNormally() {
+	return true;
+}
+}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/classfmt/ClassFileConstants.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/classfmt/ClassFileConstants.java
index 6ab938c..aa146db 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/classfmt/ClassFileConstants.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/classfmt/ClassFileConstants.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 S Moller - Contributions for
@@ -129,9 +133,10 @@
 	int MAJOR_VERSION_10 = 54;
 	int MAJOR_VERSION_11 = 55;
 	int MAJOR_VERSION_12 = 56;
+	int MAJOR_VERSION_13 = 57;
 
 	int MAJOR_VERSION_0 = 44;
-	int MAJOR_LATEST_VERSION = MAJOR_VERSION_12;
+	int MAJOR_LATEST_VERSION = MAJOR_VERSION_13;
 
 	int MINOR_VERSION_0 = 0;
 	int MINOR_VERSION_1 = 1;
@@ -154,6 +159,7 @@
 	long JDK10 = ((long)ClassFileConstants.MAJOR_VERSION_10 << 16) + ClassFileConstants.MINOR_VERSION_0;
 	long JDK11 = ((long)ClassFileConstants.MAJOR_VERSION_11 << 16) + ClassFileConstants.MINOR_VERSION_0;
 	long JDK12 = ((long)ClassFileConstants.MAJOR_VERSION_12 << 16) + ClassFileConstants.MINOR_VERSION_0;
+	long JDK13 = ((long)ClassFileConstants.MAJOR_VERSION_13 << 16) + ClassFileConstants.MINOR_VERSION_0;
 
 	public static long getLatestJDKLevel() {
 		return ((long)ClassFileConstants.MAJOR_LATEST_VERSION << 16) + ClassFileConstants.MINOR_VERSION_0;
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/FlowContext.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/FlowContext.java
index 4d99f72..3d73bad 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/FlowContext.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/FlowContext.java
@@ -616,6 +616,24 @@
 	// not found
 	return null;
 }
+/*
+ * lookup a default yield through switch expression locations
+ */
+public FlowContext getTargetContextForDefaultYield() {
+	FlowContext current = this, lastNonReturningSubRoutine = null;
+	while (current != null) {
+		if (current.isNonReturningContext()) {
+			lastNonReturningSubRoutine = current;
+		}
+		if (current.isBreakable() && current.labelName() == null && ((SwitchFlowContext) current).isExpression){
+			if (lastNonReturningSubRoutine == null) return current;
+			return lastNonReturningSubRoutine;
+		}
+		current = current.getLocalParent();
+	}
+	// not found
+	return null;
+}
 
 /*
  * lookup a default continue amongst continuable locations
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/SwitchFlowContext.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/SwitchFlowContext.java
index 363c863..722e54f 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/SwitchFlowContext.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/flow/SwitchFlowContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2017 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
@@ -26,6 +30,7 @@
 
 	public BranchLabel breakLabel;
 	public UnconditionalFlowInfo initsOnBreak = FlowInfo.DEAD_END;
+	public boolean isExpression = false;
 
 public SwitchFlowContext(FlowContext parent, ASTNode associatedNode, BranchLabel breakLabel, boolean isPreTest, boolean inheritNullFieldChecks) {
 	super(parent, associatedNode, inheritNullFieldChecks);
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/CompilerOptions.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/CompilerOptions.java
index 5fda6a7..63e5979 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/CompilerOptions.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/CompilerOptions.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
@@ -229,6 +229,7 @@
 	public static final String VERSION_10 = "10"; //$NON-NLS-1$
 	public static final String VERSION_11 = "11"; //$NON-NLS-1$
 	public static final String VERSION_12 = "12"; //$NON-NLS-1$
+	public static final String VERSION_13 = "13"; //$NON-NLS-1$
 	/*
 	 * Note: Whenever a new version is added, make sure getLatestVersion()
 	 * is updated with it.
@@ -597,7 +598,7 @@
 	 * Return the latest Java language version supported by the Eclipse compiler
 	 */
 	public static String getLatestVersion() {
-		return VERSION_12;
+		return VERSION_13;
 	}
 	/**
 	 * Return the most specific option key controlling this irritant. Note that in some case, some irritant is controlled by
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/messages.properties b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/messages.properties
index 7b28fe3..c80749d 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/messages.properties
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/messages.properties
@@ -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
 ###############################################################################
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/AbstractCommentParser.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/AbstractCommentParser.java
index aa8f977..a7a0ff7 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/AbstractCommentParser.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/AbstractCommentParser.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
  *******************************************************************************/
@@ -1082,6 +1086,9 @@
 					consumeToken();
 					break;
 
+				case TerminalTokens.TokenNameRestrictedIdentifierYield:
+					throw new InvalidInputException(); // unexpected.
+					
 				case TerminalTokens.TokenNameDOT :
 					if ((iToken & 1) == 0) { // dots must be even tokens
 						throw new InvalidInputException();
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/ConflictedParser.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/ConflictedParser.java
index d9fe4e3..b4b1ad2 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/ConflictedParser.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/ConflictedParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2012 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
@@ -7,6 +7,10 @@
  * 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
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/JavadocTagConstants.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/JavadocTagConstants.java
index f952c71..fae9f03 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/JavadocTagConstants.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/JavadocTagConstants.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
  *******************************************************************************/
@@ -194,6 +198,8 @@
 		// since 11
 		{},
 		//since 12
+		{},
+		//since 12
 		{}
 	};
 	public static final char[][][] INLINE_TAGS = {
@@ -222,7 +228,9 @@
 		// since 11
 		{},
 		//since 12
-		{TAG_SYSTEM_PROPERTY}
+		{TAG_SYSTEM_PROPERTY},
+		//since 12
+		{}
 	};
 	public final static int INLINE_TAGS_LENGTH = INLINE_TAGS.length;
 	public final static int BLOCK_TAGS_LENGTH = BLOCK_TAGS.length;
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java
index f930920..ed82f72 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.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
  *     Tom Tromey - patch for readTable(String) as described in http://bugs.eclipse.org/bugs/show_bug.cgi?id=32196
@@ -215,6 +219,14 @@
 						compliance = ClassFileConstants.JDK1_8;
 					}  else if("9".equals(token)) { //$NON-NLS-1$
 						compliance = ClassFileConstants.JDK9;
+					}  else if("10".equals(token)) { //$NON-NLS-1$
+						compliance = ClassFileConstants.JDK10;
+					}  else if("11".equals(token)) { //$NON-NLS-1$
+						compliance = ClassFileConstants.JDK11;
+					}  else if("12".equals(token)) { //$NON-NLS-1$
+						compliance = ClassFileConstants.JDK12;
+					}  else if("13".equals(token)) { //$NON-NLS-1$
+						compliance = ClassFileConstants.JDK13;
 					} else if("recovery".equals(token)) { //$NON-NLS-1$
 						compliance = ClassFileConstants.JDK_DEFERRED;
 					}
@@ -545,8 +557,8 @@
 		buildFileOfIntFor(prefix + (++i) + ".rsc", "in_symb", tokens); //$NON-NLS-2$ //$NON-NLS-1$
 	
 		byte[] newRhs = buildFileOfByteFor(prefix + (++i) + ".rsc", "rhs", tokens); //$NON-NLS-2$ //$NON-NLS-1$
-		buildFileOfByteFor(prefix + (++i) + ".rsc", "term_check", tokens); //$NON-NLS-2$ //$NON-NLS-1$
-		buildFileOfByteFor(prefix + (++i) + ".rsc", "scope_la", tokens); //$NON-NLS-2$ //$NON-NLS-1$
+		buildFileOfIntFor(prefix + (++i) + ".rsc", "term_check", tokens); //$NON-NLS-2$ //$NON-NLS-1$
+		buildFileOfIntFor(prefix + (++i) + ".rsc", "scope_la", tokens); //$NON-NLS-2$ //$NON-NLS-1$
 	
 		String[] newName = buildFileForName(prefix + (++i) + ".rsc", new String(contents)); //$NON-NLS-1$
 	
@@ -944,6 +956,7 @@
 protected boolean parsingJava8Plus;
 protected boolean parsingJava9Plus;
 protected boolean parsingJava12Plus;
+protected boolean parsingJava13Plus;
 protected boolean parsingJava11Plus;
 protected int unstackedAct = ERROR_ACTION;
 private boolean haltOnSyntaxError = false;
@@ -963,6 +976,7 @@
 	initializeScanner();
 	this.parsingJava8Plus = this.options.sourceLevel >= ClassFileConstants.JDK1_8;
 	this.parsingJava9Plus = this.options.sourceLevel >= ClassFileConstants.JDK9;
+	this.parsingJava13Plus = this.options.sourceLevel >= ClassFileConstants.JDK13;
 	this.parsingJava12Plus = this.options.sourceLevel >= ClassFileConstants.JDK12;
 	this.parsingJava11Plus = this.options.sourceLevel >= ClassFileConstants.JDK11;
 	this.astLengthStack = new int[50];
@@ -2226,7 +2240,7 @@
 	}
 	CaseStatement caseStatement = new CaseStatement(constantExpressions[0], constantExpressions[length - 1].sourceEnd, this.intStack[this.intPtr--]);
 	if (constantExpressions.length > 1) {
-		if (this.parsingJava12Plus) {
+		if (this.parsingJava13Plus) {
 			if (this.options.enablePreviewFeatures) {
 				if (this.options.isAnyEnabled(IrritantSet.PREVIEW) && constantExpressions.length > 1) {
 					problemReporter().previewFeatureUsed(caseStatement.sourceStart, caseStatement.sourceEnd);
@@ -2235,7 +2249,7 @@
 				problemReporter().previewFeatureNotEnabled(caseStatement.sourceStart, caseStatement.sourceEnd, "Multi constant case"); //$NON-NLS-1$
 			}
 		} else {
-			problemReporter().previewFeatureNotSupported(caseStatement.sourceStart, caseStatement.sourceEnd, "Multi constant case", CompilerOptions.VERSION_12); //$NON-NLS-1$
+			problemReporter().previewFeatureNotSupported(caseStatement.sourceStart, caseStatement.sourceEnd, "Multi constant case", CompilerOptions.VERSION_13); //$NON-NLS-1$
 		}
 	}
 	caseStatement.constantExpressions = constantExpressions;
@@ -6450,2122 +6464,2118 @@
 // This method is part of an automatic generation : do NOT edit-modify
 protected void consumeRule(int act) {
   switch ( act ) {
-    case 35 : if (DEBUG) { System.out.println("Type ::= PrimitiveType"); }  //$NON-NLS-1$
+    case 37 : if (DEBUG) { System.out.println("Type ::= PrimitiveType"); }  //$NON-NLS-1$
 		    consumePrimitiveType();  
 			break;
  
-    case 49 : if (DEBUG) { System.out.println("ReferenceType ::= ClassOrInterfaceType"); }  //$NON-NLS-1$
+    case 51 : if (DEBUG) { System.out.println("ReferenceType ::= ClassOrInterfaceType"); }  //$NON-NLS-1$
 		    consumeReferenceType();  
 			break;
  
-    case 53 : if (DEBUG) { System.out.println("ClassOrInterface ::= Name"); }  //$NON-NLS-1$
+    case 55 : if (DEBUG) { System.out.println("ClassOrInterface ::= Name"); }  //$NON-NLS-1$
 		    consumeClassOrInterfaceName();  
 			break;
  
-    case 54 : if (DEBUG) { System.out.println("ClassOrInterface ::= GenericType DOT Name"); }  //$NON-NLS-1$
+    case 56 : if (DEBUG) { System.out.println("ClassOrInterface ::= GenericType DOT Name"); }  //$NON-NLS-1$
 		    consumeClassOrInterface();  
 			break;
  
-    case 55 : if (DEBUG) { System.out.println("GenericType ::= ClassOrInterface TypeArguments"); }  //$NON-NLS-1$
+    case 57 : if (DEBUG) { System.out.println("GenericType ::= ClassOrInterface TypeArguments"); }  //$NON-NLS-1$
 		    consumeGenericType();  
 			break;
  
-    case 56 : if (DEBUG) { System.out.println("GenericType ::= ClassOrInterface LESS GREATER"); }  //$NON-NLS-1$
+    case 58 : if (DEBUG) { System.out.println("GenericType ::= ClassOrInterface LESS GREATER"); }  //$NON-NLS-1$
 		    consumeGenericTypeWithDiamond();  
 			break;
  
-    case 57 : if (DEBUG) { System.out.println("ArrayTypeWithTypeArgumentsName ::= GenericType DOT Name"); }  //$NON-NLS-1$
+    case 59 : if (DEBUG) { System.out.println("ArrayTypeWithTypeArgumentsName ::= GenericType DOT Name"); }  //$NON-NLS-1$
 		    consumeArrayTypeWithTypeArgumentsName();  
 			break;
  
-    case 58 : if (DEBUG) { System.out.println("ArrayType ::= PrimitiveType Dims"); }  //$NON-NLS-1$
+    case 60 : if (DEBUG) { System.out.println("ArrayType ::= PrimitiveType Dims"); }  //$NON-NLS-1$
 		    consumePrimitiveArrayType();  
 			break;
  
-    case 59 : if (DEBUG) { System.out.println("ArrayType ::= Name Dims"); }  //$NON-NLS-1$
+    case 61 : if (DEBUG) { System.out.println("ArrayType ::= Name Dims"); }  //$NON-NLS-1$
 		    consumeNameArrayType();  
 			break;
  
-    case 60 : if (DEBUG) { System.out.println("ArrayType ::= ArrayTypeWithTypeArgumentsName Dims"); }  //$NON-NLS-1$
+    case 62 : if (DEBUG) { System.out.println("ArrayType ::= ArrayTypeWithTypeArgumentsName Dims"); }  //$NON-NLS-1$
 		    consumeGenericTypeNameArrayType();  
 			break;
  
-    case 61 : if (DEBUG) { System.out.println("ArrayType ::= GenericType Dims"); }  //$NON-NLS-1$
+    case 63 : if (DEBUG) { System.out.println("ArrayType ::= GenericType Dims"); }  //$NON-NLS-1$
 		    consumeGenericTypeArrayType();  
 			break;
  
-    case 63 : if (DEBUG) { System.out.println("Name ::= SimpleName"); }  //$NON-NLS-1$
+    case 65 : if (DEBUG) { System.out.println("Name ::= SimpleName"); }  //$NON-NLS-1$
 		    consumeZeroTypeAnnotations();  
 			break;
  
-    case 68 : if (DEBUG) { System.out.println("UnannotatableName ::= UnannotatableName DOT SimpleName"); }  //$NON-NLS-1$
+    case 70 : if (DEBUG) { System.out.println("UnannotatableName ::= UnannotatableName DOT SimpleName"); }  //$NON-NLS-1$
 		    consumeUnannotatableQualifiedName();  
 			break;
  
-    case 69 : if (DEBUG) { System.out.println("QualifiedName ::= Name DOT SimpleName"); }  //$NON-NLS-1$
+    case 71 : if (DEBUG) { System.out.println("QualifiedName ::= Name DOT SimpleName"); }  //$NON-NLS-1$
 		    consumeQualifiedName(false);  
 			break;
  
-    case 70 : if (DEBUG) { System.out.println("QualifiedName ::= Name DOT TypeAnnotations SimpleName"); }  //$NON-NLS-1$
+    case 72 : if (DEBUG) { System.out.println("QualifiedName ::= Name DOT TypeAnnotations SimpleName"); }  //$NON-NLS-1$
 		    consumeQualifiedName(true);  
 			break;
  
-    case 71 : if (DEBUG) { System.out.println("TypeAnnotationsopt ::="); }  //$NON-NLS-1$
+    case 73 : if (DEBUG) { System.out.println("TypeAnnotationsopt ::="); }  //$NON-NLS-1$
 		    consumeZeroTypeAnnotations();  
 			break;
  
-     case 75 : if (DEBUG) { System.out.println("TypeAnnotations0 ::= TypeAnnotations0 TypeAnnotation"); }  //$NON-NLS-1$
+     case 77 : if (DEBUG) { System.out.println("TypeAnnotations0 ::= TypeAnnotations0 TypeAnnotation"); }  //$NON-NLS-1$
 		    consumeOneMoreTypeAnnotation();  
 			break;
  
-     case 76 : if (DEBUG) { System.out.println("TypeAnnotation ::= NormalTypeAnnotation"); }  //$NON-NLS-1$
+     case 78 : if (DEBUG) { System.out.println("TypeAnnotation ::= NormalTypeAnnotation"); }  //$NON-NLS-1$
 		    consumeTypeAnnotation();  
 			break;
  
-     case 77 : if (DEBUG) { System.out.println("TypeAnnotation ::= MarkerTypeAnnotation"); }  //$NON-NLS-1$
+     case 79 : if (DEBUG) { System.out.println("TypeAnnotation ::= MarkerTypeAnnotation"); }  //$NON-NLS-1$
 		    consumeTypeAnnotation();  
 			break;
  
-     case 78 : if (DEBUG) { System.out.println("TypeAnnotation ::= SingleMemberTypeAnnotation"); }  //$NON-NLS-1$
+     case 80 : if (DEBUG) { System.out.println("TypeAnnotation ::= SingleMemberTypeAnnotation"); }  //$NON-NLS-1$
 		    consumeTypeAnnotation();  
 			break;
  
-    case 79 : if (DEBUG) { System.out.println("TypeAnnotationName ::= AT308 UnannotatableName"); }  //$NON-NLS-1$
+    case 81 : if (DEBUG) { System.out.println("TypeAnnotationName ::= AT308 UnannotatableName"); }  //$NON-NLS-1$
 		    consumeAnnotationName() ;  
 			break;
  
-    case 80 : if (DEBUG) { System.out.println("NormalTypeAnnotation ::= TypeAnnotationName LPAREN..."); }  //$NON-NLS-1$
+    case 82 : if (DEBUG) { System.out.println("NormalTypeAnnotation ::= TypeAnnotationName LPAREN..."); }  //$NON-NLS-1$
 		    consumeNormalAnnotation(true) ;  
 			break;
  
-    case 81 : if (DEBUG) { System.out.println("MarkerTypeAnnotation ::= TypeAnnotationName"); }  //$NON-NLS-1$
+    case 83 : if (DEBUG) { System.out.println("MarkerTypeAnnotation ::= TypeAnnotationName"); }  //$NON-NLS-1$
 		    consumeMarkerAnnotation(true) ;  
 			break;
  
-    case 82 : if (DEBUG) { System.out.println("SingleMemberTypeAnnotation ::= TypeAnnotationName LPAREN"); }  //$NON-NLS-1$
+    case 84 : if (DEBUG) { System.out.println("SingleMemberTypeAnnotation ::= TypeAnnotationName LPAREN"); }  //$NON-NLS-1$
 		    consumeSingleMemberAnnotation(true) ;  
 			break;
  
-    case 83 : if (DEBUG) { System.out.println("RejectTypeAnnotations ::="); }  //$NON-NLS-1$
+    case 85 : if (DEBUG) { System.out.println("RejectTypeAnnotations ::="); }  //$NON-NLS-1$
 		    consumeNonTypeUseName();  
 			break;
  
-    case 84 : if (DEBUG) { System.out.println("PushZeroTypeAnnotations ::="); }  //$NON-NLS-1$
+    case 86 : if (DEBUG) { System.out.println("PushZeroTypeAnnotations ::="); }  //$NON-NLS-1$
 		    consumeZeroTypeAnnotations();  
 			break;
  
-    case 85 : if (DEBUG) { System.out.println("VariableDeclaratorIdOrThis ::= this"); }  //$NON-NLS-1$
+    case 87 : if (DEBUG) { System.out.println("VariableDeclaratorIdOrThis ::= this"); }  //$NON-NLS-1$
 		    consumeExplicitThisParameter(false);  
 			break;
  
-    case 86 : if (DEBUG) { System.out.println("VariableDeclaratorIdOrThis ::= UnannotatableName DOT this"); }  //$NON-NLS-1$
+    case 88 : if (DEBUG) { System.out.println("VariableDeclaratorIdOrThis ::= UnannotatableName DOT this"); }  //$NON-NLS-1$
 		    consumeExplicitThisParameter(true);  
 			break;
  
-    case 87 : if (DEBUG) { System.out.println("VariableDeclaratorIdOrThis ::= VariableDeclaratorId"); }  //$NON-NLS-1$
+    case 89 : if (DEBUG) { System.out.println("VariableDeclaratorIdOrThis ::= VariableDeclaratorId"); }  //$NON-NLS-1$
 		    consumeVariableDeclaratorIdParameter();  
 			break;
  
-    case 88 : if (DEBUG) { System.out.println("CompilationUnit ::= EnterCompilationUnit..."); }  //$NON-NLS-1$
+    case 90 : if (DEBUG) { System.out.println("CompilationUnit ::= EnterCompilationUnit..."); }  //$NON-NLS-1$
 		    consumeCompilationUnit();  
 			break;
  
-    case 89 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= PackageDeclaration"); }  //$NON-NLS-1$
+    case 91 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= PackageDeclaration"); }  //$NON-NLS-1$
 		    consumeInternalCompilationUnit();  
 			break;
  
-    case 90 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= PackageDeclaration..."); }  //$NON-NLS-1$
-		    consumeInternalCompilationUnit();  
-			break;
- 
-    case 91 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= PackageDeclaration..."); }  //$NON-NLS-1$
-		    consumeInternalCompilationUnitWithTypes();  
-			break;
- 
     case 92 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= PackageDeclaration..."); }  //$NON-NLS-1$
-		    consumeInternalCompilationUnitWithTypes();  
-			break;
- 
-    case 93 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= ImportDeclarations..."); }  //$NON-NLS-1$
 		    consumeInternalCompilationUnit();  
 			break;
  
-    case 94 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= TypeDeclarations"); }  //$NON-NLS-1$
+    case 93 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= PackageDeclaration..."); }  //$NON-NLS-1$
+		    consumeInternalCompilationUnitWithTypes();  
+			break;
+ 
+    case 94 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= PackageDeclaration..."); }  //$NON-NLS-1$
 		    consumeInternalCompilationUnitWithTypes();  
 			break;
  
     case 95 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= ImportDeclarations..."); }  //$NON-NLS-1$
+		    consumeInternalCompilationUnit();  
+			break;
+ 
+    case 96 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= TypeDeclarations"); }  //$NON-NLS-1$
 		    consumeInternalCompilationUnitWithTypes();  
 			break;
  
-    case 96 : if (DEBUG) { System.out.println("InternalCompilationUnit ::="); }  //$NON-NLS-1$
+    case 97 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= ImportDeclarations..."); }  //$NON-NLS-1$
+		    consumeInternalCompilationUnitWithTypes();  
+			break;
+ 
+    case 98 : if (DEBUG) { System.out.println("InternalCompilationUnit ::="); }  //$NON-NLS-1$
 		    consumeEmptyInternalCompilationUnit();  
 			break;
  
-    case 97 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= ImportDeclarations..."); }  //$NON-NLS-1$
+    case 99 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= ImportDeclarations..."); }  //$NON-NLS-1$
 		    consumeInternalCompilationUnitWithModuleDeclaration();  
 			break;
  
-    case 98 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= ModuleDeclaration"); }  //$NON-NLS-1$
+    case 100 : if (DEBUG) { System.out.println("InternalCompilationUnit ::= ModuleDeclaration"); }  //$NON-NLS-1$
 		    consumeInternalCompilationUnitWithModuleDeclaration();  
 			break;
  
-    case 99 : if (DEBUG) { System.out.println("ModuleDeclaration ::= ModuleHeader ModuleBody"); }  //$NON-NLS-1$
+    case 101 : if (DEBUG) { System.out.println("ModuleDeclaration ::= ModuleHeader ModuleBody"); }  //$NON-NLS-1$
 		    consumeModuleDeclaration();  
 			break;
  
-    case 100 : if (DEBUG) { System.out.println("ModuleHeader ::= Modifiersopt ModuleModifieropt module"); }  //$NON-NLS-1$
+    case 102 : if (DEBUG) { System.out.println("ModuleHeader ::= Modifiersopt ModuleModifieropt module"); }  //$NON-NLS-1$
 		    consumeModuleHeader();  
 			break;
  
-    case 102 : if (DEBUG) { System.out.println("ModuleModifieropt ::= ModuleModifier"); }  //$NON-NLS-1$
+    case 104 : if (DEBUG) { System.out.println("ModuleModifieropt ::= ModuleModifier"); }  //$NON-NLS-1$
 		    consumeModuleModifiers();  
 			break;
  
-    case 105 : if (DEBUG) { System.out.println("ModuleStatementsOpt ::="); }  //$NON-NLS-1$
+    case 107 : if (DEBUG) { System.out.println("ModuleStatementsOpt ::="); }  //$NON-NLS-1$
 		    consumeEmptyModuleStatementsOpt();  
 			break;
  
-    case 108 : if (DEBUG) { System.out.println("ModuleStatements ::= ModuleStatements ModuleStatement"); }  //$NON-NLS-1$
+    case 110 : if (DEBUG) { System.out.println("ModuleStatements ::= ModuleStatements ModuleStatement"); }  //$NON-NLS-1$
 		    consumeModuleStatements();  
 			break;
  
-    case 114 : if (DEBUG) { System.out.println("RequiresStatement ::= SingleRequiresModuleName SEMICOLON"); }  //$NON-NLS-1$
+    case 116 : if (DEBUG) { System.out.println("RequiresStatement ::= SingleRequiresModuleName SEMICOLON"); }  //$NON-NLS-1$
 		    consumeRequiresStatement();  
 			break;
  
-    case 115 : if (DEBUG) { System.out.println("SingleRequiresModuleName ::= requires..."); }  //$NON-NLS-1$
+    case 117 : if (DEBUG) { System.out.println("SingleRequiresModuleName ::= requires..."); }  //$NON-NLS-1$
 		    consumeSingleRequiresModuleName();  
 			break;
  
-    case 116 : if (DEBUG) { System.out.println("RequiresModifiersopt ::= RequiresModifiers"); }  //$NON-NLS-1$
+    case 118 : if (DEBUG) { System.out.println("RequiresModifiersopt ::= RequiresModifiers"); }  //$NON-NLS-1$
 		    consumeModifiers();  
 			break;
  
-    case 117 : if (DEBUG) { System.out.println("RequiresModifiersopt ::="); }  //$NON-NLS-1$
+    case 119 : if (DEBUG) { System.out.println("RequiresModifiersopt ::="); }  //$NON-NLS-1$
 		    consumeDefaultModifiers();  
 			break;
  
-    case 119 : if (DEBUG) { System.out.println("RequiresModifiers ::= RequiresModifiers RequiresModifier"); }  //$NON-NLS-1$
+    case 121 : if (DEBUG) { System.out.println("RequiresModifiers ::= RequiresModifiers RequiresModifier"); }  //$NON-NLS-1$
 		    consumeModifiers2();  
 			break;
  
-    case 122 : if (DEBUG) { System.out.println("ExportsStatement ::= ExportsHeader TargetModuleListopt"); }  //$NON-NLS-1$
+    case 124 : if (DEBUG) { System.out.println("ExportsStatement ::= ExportsHeader TargetModuleListopt"); }  //$NON-NLS-1$
 		    consumeExportsStatement();  
 			break;
  
-    case 123 : if (DEBUG) { System.out.println("ExportsHeader ::= exports SinglePkgName"); }  //$NON-NLS-1$
+    case 125 : if (DEBUG) { System.out.println("ExportsHeader ::= exports SinglePkgName"); }  //$NON-NLS-1$
 		    consumeExportsHeader();  
 			break;
  
-    case 125 : if (DEBUG) { System.out.println("TargetModuleListopt ::= to TargetModuleNameList"); }  //$NON-NLS-1$
+    case 127 : if (DEBUG) { System.out.println("TargetModuleListopt ::= to TargetModuleNameList"); }  //$NON-NLS-1$
 		    consumeTargetModuleList();  
 			break;
  
-    case 126 : if (DEBUG) { System.out.println("TargetModuleName ::= UnannotatableName"); }  //$NON-NLS-1$
+    case 128 : if (DEBUG) { System.out.println("TargetModuleName ::= UnannotatableName"); }  //$NON-NLS-1$
 		    consumeSingleTargetModuleName();  
 			break;
  
-    case 128 : if (DEBUG) { System.out.println("TargetModuleNameList ::= TargetModuleNameList COMMA..."); }  //$NON-NLS-1$
+    case 130 : if (DEBUG) { System.out.println("TargetModuleNameList ::= TargetModuleNameList COMMA..."); }  //$NON-NLS-1$
 		    consumeTargetModuleNameList();  
 			break;
  
-    case 129 : if (DEBUG) { System.out.println("SinglePkgName ::= UnannotatableName"); }  //$NON-NLS-1$
+    case 131 : if (DEBUG) { System.out.println("SinglePkgName ::= UnannotatableName"); }  //$NON-NLS-1$
 		    consumeSinglePkgName();  
 			break;
  
-    case 130 : if (DEBUG) { System.out.println("OpensStatement ::= OpensHeader TargetModuleListopt..."); }  //$NON-NLS-1$
+    case 132 : if (DEBUG) { System.out.println("OpensStatement ::= OpensHeader TargetModuleListopt..."); }  //$NON-NLS-1$
 		    consumeOpensStatement();  
 			break;
  
-    case 131 : if (DEBUG) { System.out.println("OpensHeader ::= opens SinglePkgName"); }  //$NON-NLS-1$
+    case 133 : if (DEBUG) { System.out.println("OpensHeader ::= opens SinglePkgName"); }  //$NON-NLS-1$
 		    consumeOpensHeader();  
 			break;
  
-    case 132 : if (DEBUG) { System.out.println("UsesStatement ::= UsesHeader SEMICOLON"); }  //$NON-NLS-1$
+    case 134 : if (DEBUG) { System.out.println("UsesStatement ::= UsesHeader SEMICOLON"); }  //$NON-NLS-1$
 		    consumeUsesStatement();  
 			break;
  
-    case 133 : if (DEBUG) { System.out.println("UsesHeader ::= uses Name"); }  //$NON-NLS-1$
+    case 135 : if (DEBUG) { System.out.println("UsesHeader ::= uses Name"); }  //$NON-NLS-1$
 		    consumeUsesHeader();  
 			break;
  
-    case 134 : if (DEBUG) { System.out.println("ProvidesStatement ::= ProvidesInterface WithClause..."); }  //$NON-NLS-1$
+    case 136 : if (DEBUG) { System.out.println("ProvidesStatement ::= ProvidesInterface WithClause..."); }  //$NON-NLS-1$
 		    consumeProvidesStatement();  
 			break;
  
-    case 135 : if (DEBUG) { System.out.println("ProvidesInterface ::= provides Name"); }  //$NON-NLS-1$
+    case 137 : if (DEBUG) { System.out.println("ProvidesInterface ::= provides Name"); }  //$NON-NLS-1$
 		    consumeProvidesInterface();  
 			break;
  
-    case 136 : if (DEBUG) { System.out.println("ServiceImplName ::= Name"); }  //$NON-NLS-1$
+    case 138 : if (DEBUG) { System.out.println("ServiceImplName ::= Name"); }  //$NON-NLS-1$
 		    consumeSingleServiceImplName();  
 			break;
  
-    case 138 : if (DEBUG) { System.out.println("ServiceImplNameList ::= ServiceImplNameList COMMA..."); }  //$NON-NLS-1$
+    case 140 : if (DEBUG) { System.out.println("ServiceImplNameList ::= ServiceImplNameList COMMA..."); }  //$NON-NLS-1$
 		    consumeServiceImplNameList();  
 			break;
  
-    case 139 : if (DEBUG) { System.out.println("WithClause ::= with ServiceImplNameList"); }  //$NON-NLS-1$
+    case 141 : if (DEBUG) { System.out.println("WithClause ::= with ServiceImplNameList"); }  //$NON-NLS-1$
 		    consumeWithClause();  
 			break;
  
-    case 140 : if (DEBUG) { System.out.println("ReduceImports ::="); }  //$NON-NLS-1$
+    case 142 : if (DEBUG) { System.out.println("ReduceImports ::="); }  //$NON-NLS-1$
 		    consumeReduceImports();  
 			break;
  
-    case 141 : if (DEBUG) { System.out.println("EnterCompilationUnit ::="); }  //$NON-NLS-1$
+    case 143 : if (DEBUG) { System.out.println("EnterCompilationUnit ::="); }  //$NON-NLS-1$
 		    consumeEnterCompilationUnit();  
 			break;
  
-    case 163 : if (DEBUG) { System.out.println("CatchHeader ::= catch LPAREN CatchFormalParameter RPAREN"); }  //$NON-NLS-1$
+    case 165 : if (DEBUG) { System.out.println("CatchHeader ::= catch LPAREN CatchFormalParameter RPAREN"); }  //$NON-NLS-1$
 		    consumeCatchHeader();  
 			break;
  
-    case 165 : if (DEBUG) { System.out.println("ImportDeclarations ::= ImportDeclarations..."); }  //$NON-NLS-1$
+    case 167 : if (DEBUG) { System.out.println("ImportDeclarations ::= ImportDeclarations..."); }  //$NON-NLS-1$
 		    consumeImportDeclarations();  
 			break;
  
-    case 167 : if (DEBUG) { System.out.println("TypeDeclarations ::= TypeDeclarations TypeDeclaration"); }  //$NON-NLS-1$
+    case 169 : if (DEBUG) { System.out.println("TypeDeclarations ::= TypeDeclarations TypeDeclaration"); }  //$NON-NLS-1$
 		    consumeTypeDeclarations();  
 			break;
  
-    case 168 : if (DEBUG) { System.out.println("PackageDeclaration ::= PackageDeclarationName SEMICOLON"); }  //$NON-NLS-1$
+    case 170 : if (DEBUG) { System.out.println("PackageDeclaration ::= PackageDeclarationName SEMICOLON"); }  //$NON-NLS-1$
 		    consumePackageDeclaration();  
 			break;
  
-    case 169 : if (DEBUG) { System.out.println("PackageDeclarationName ::= Modifiers package..."); }  //$NON-NLS-1$
+    case 171 : if (DEBUG) { System.out.println("PackageDeclarationName ::= Modifiers package..."); }  //$NON-NLS-1$
 		    consumePackageDeclarationNameWithModifiers();  
 			break;
  
-    case 170 : if (DEBUG) { System.out.println("PackageDeclarationName ::= PackageComment package Name"); }  //$NON-NLS-1$
+    case 172 : if (DEBUG) { System.out.println("PackageDeclarationName ::= PackageComment package Name"); }  //$NON-NLS-1$
 		    consumePackageDeclarationName();  
 			break;
  
-    case 171 : if (DEBUG) { System.out.println("PackageComment ::="); }  //$NON-NLS-1$
+    case 173 : if (DEBUG) { System.out.println("PackageComment ::="); }  //$NON-NLS-1$
 		    consumePackageComment();  
 			break;
  
-    case 176 : if (DEBUG) { System.out.println("SingleTypeImportDeclaration ::=..."); }  //$NON-NLS-1$
+    case 178 : if (DEBUG) { System.out.println("SingleTypeImportDeclaration ::=..."); }  //$NON-NLS-1$
 		    consumeImportDeclaration();  
 			break;
  
-    case 177 : if (DEBUG) { System.out.println("SingleTypeImportDeclarationName ::= import Name..."); }  //$NON-NLS-1$
+    case 179 : if (DEBUG) { System.out.println("SingleTypeImportDeclarationName ::= import Name..."); }  //$NON-NLS-1$
 		    consumeSingleTypeImportDeclarationName();  
 			break;
  
-    case 178 : if (DEBUG) { System.out.println("TypeImportOnDemandDeclaration ::=..."); }  //$NON-NLS-1$
+    case 180 : if (DEBUG) { System.out.println("TypeImportOnDemandDeclaration ::=..."); }  //$NON-NLS-1$
 		    consumeImportDeclaration();  
 			break;
  
-    case 179 : if (DEBUG) { System.out.println("TypeImportOnDemandDeclarationName ::= import Name DOT..."); }  //$NON-NLS-1$
+    case 181 : if (DEBUG) { System.out.println("TypeImportOnDemandDeclarationName ::= import Name DOT..."); }  //$NON-NLS-1$
 		    consumeTypeImportOnDemandDeclarationName();  
 			break;
  
-     case 182 : if (DEBUG) { System.out.println("TypeDeclaration ::= SEMICOLON"); }  //$NON-NLS-1$
+     case 184 : if (DEBUG) { System.out.println("TypeDeclaration ::= SEMICOLON"); }  //$NON-NLS-1$
 		    consumeEmptyTypeDeclaration();  
 			break;
  
-    case 186 : if (DEBUG) { System.out.println("Modifiers ::= Modifiers Modifier"); }  //$NON-NLS-1$
+    case 188 : if (DEBUG) { System.out.println("Modifiers ::= Modifiers Modifier"); }  //$NON-NLS-1$
 		    consumeModifiers2();  
 			break;
  
-    case 198 : if (DEBUG) { System.out.println("Modifier ::= Annotation"); }  //$NON-NLS-1$
+    case 200 : if (DEBUG) { System.out.println("Modifier ::= Annotation"); }  //$NON-NLS-1$
 		    consumeAnnotationAsModifier();  
 			break;
  
-    case 199 : if (DEBUG) { System.out.println("ClassDeclaration ::= ClassHeader ClassBody"); }  //$NON-NLS-1$
+    case 201 : if (DEBUG) { System.out.println("ClassDeclaration ::= ClassHeader ClassBody"); }  //$NON-NLS-1$
 		    consumeClassDeclaration();  
 			break;
  
-    case 200 : if (DEBUG) { System.out.println("ClassHeader ::= ClassHeaderName ClassHeaderExtendsopt..."); }  //$NON-NLS-1$
+    case 202 : if (DEBUG) { System.out.println("ClassHeader ::= ClassHeaderName ClassHeaderExtendsopt..."); }  //$NON-NLS-1$
 		    consumeClassHeader();  
 			break;
  
-    case 201 : if (DEBUG) { System.out.println("ClassHeaderName ::= ClassHeaderName1 TypeParameters"); }  //$NON-NLS-1$
+    case 203 : if (DEBUG) { System.out.println("ClassHeaderName ::= ClassHeaderName1 TypeParameters"); }  //$NON-NLS-1$
 		    consumeTypeHeaderNameWithTypeParameters();  
 			break;
  
-    case 203 : if (DEBUG) { System.out.println("ClassHeaderName1 ::= Modifiersopt class Identifier"); }  //$NON-NLS-1$
+    case 205 : if (DEBUG) { System.out.println("ClassHeaderName1 ::= Modifiersopt class Identifier"); }  //$NON-NLS-1$
 		    consumeClassHeaderName1();  
 			break;
  
-    case 204 : if (DEBUG) { System.out.println("ClassHeaderExtends ::= extends ClassType"); }  //$NON-NLS-1$
+    case 206 : if (DEBUG) { System.out.println("ClassHeaderExtends ::= extends ClassType"); }  //$NON-NLS-1$
 		    consumeClassHeaderExtends();  
 			break;
  
-    case 205 : if (DEBUG) { System.out.println("ClassHeaderImplements ::= implements InterfaceTypeList"); }  //$NON-NLS-1$
+    case 207 : if (DEBUG) { System.out.println("ClassHeaderImplements ::= implements InterfaceTypeList"); }  //$NON-NLS-1$
 		    consumeClassHeaderImplements();  
 			break;
  
-    case 207 : if (DEBUG) { System.out.println("InterfaceTypeList ::= InterfaceTypeList COMMA..."); }  //$NON-NLS-1$
+    case 209 : if (DEBUG) { System.out.println("InterfaceTypeList ::= InterfaceTypeList COMMA..."); }  //$NON-NLS-1$
 		    consumeInterfaceTypeList();  
 			break;
  
-    case 208 : if (DEBUG) { System.out.println("InterfaceType ::= ClassOrInterfaceType"); }  //$NON-NLS-1$
+    case 210 : if (DEBUG) { System.out.println("InterfaceType ::= ClassOrInterfaceType"); }  //$NON-NLS-1$
 		    consumeInterfaceType();  
 			break;
  
-    case 211 : if (DEBUG) { System.out.println("ClassBodyDeclarations ::= ClassBodyDeclarations..."); }  //$NON-NLS-1$
+    case 213 : if (DEBUG) { System.out.println("ClassBodyDeclarations ::= ClassBodyDeclarations..."); }  //$NON-NLS-1$
 		    consumeClassBodyDeclarations();  
 			break;
  
-    case 215 : if (DEBUG) { System.out.println("ClassBodyDeclaration ::= Diet NestedMethod..."); }  //$NON-NLS-1$
+    case 217 : if (DEBUG) { System.out.println("ClassBodyDeclaration ::= Diet NestedMethod..."); }  //$NON-NLS-1$
 		    consumeClassBodyDeclaration();  
 			break;
  
-    case 216 : if (DEBUG) { System.out.println("Diet ::="); }  //$NON-NLS-1$
+    case 218 : if (DEBUG) { System.out.println("Diet ::="); }  //$NON-NLS-1$
 		    consumeDiet();  
 			break;
 
-    case 217 : if (DEBUG) { System.out.println("Initializer ::= Diet NestedMethod CreateInitializer..."); }  //$NON-NLS-1$
+    case 219 : if (DEBUG) { System.out.println("Initializer ::= Diet NestedMethod CreateInitializer..."); }  //$NON-NLS-1$
 		    consumeClassBodyDeclaration();  
 			break;
  
-    case 218 : if (DEBUG) { System.out.println("CreateInitializer ::="); }  //$NON-NLS-1$
+    case 220 : if (DEBUG) { System.out.println("CreateInitializer ::="); }  //$NON-NLS-1$
 		    consumeCreateInitializer();  
 			break;
 
-    case 225 : if (DEBUG) { System.out.println("ClassMemberDeclaration ::= SEMICOLON"); }  //$NON-NLS-1$
+    case 227 : if (DEBUG) { System.out.println("ClassMemberDeclaration ::= SEMICOLON"); }  //$NON-NLS-1$
 		    consumeEmptyTypeDeclaration();  
 			break;
 
-    case 228 : if (DEBUG) { System.out.println("FieldDeclaration ::= Modifiersopt Type..."); }  //$NON-NLS-1$
+    case 230 : if (DEBUG) { System.out.println("FieldDeclaration ::= Modifiersopt Type..."); }  //$NON-NLS-1$
 		    consumeFieldDeclaration();  
 			break;
  
-    case 230 : if (DEBUG) { System.out.println("VariableDeclarators ::= VariableDeclarators COMMA..."); }  //$NON-NLS-1$
+    case 232 : if (DEBUG) { System.out.println("VariableDeclarators ::= VariableDeclarators COMMA..."); }  //$NON-NLS-1$
 		    consumeVariableDeclarators();  
 			break;
  
-    case 233 : if (DEBUG) { System.out.println("EnterVariable ::="); }  //$NON-NLS-1$
+    case 235 : if (DEBUG) { System.out.println("EnterVariable ::="); }  //$NON-NLS-1$
 		    consumeEnterVariable();  
 			break;
  
-    case 234 : if (DEBUG) { System.out.println("ExitVariableWithInitialization ::="); }  //$NON-NLS-1$
+    case 236 : if (DEBUG) { System.out.println("ExitVariableWithInitialization ::="); }  //$NON-NLS-1$
 		    consumeExitVariableWithInitialization();  
 			break;
  
-    case 235 : if (DEBUG) { System.out.println("ExitVariableWithoutInitialization ::="); }  //$NON-NLS-1$
+    case 237 : if (DEBUG) { System.out.println("ExitVariableWithoutInitialization ::="); }  //$NON-NLS-1$
 		    consumeExitVariableWithoutInitialization();  
 			break;
  
-    case 236 : if (DEBUG) { System.out.println("ForceNoDiet ::="); }  //$NON-NLS-1$
+    case 238 : if (DEBUG) { System.out.println("ForceNoDiet ::="); }  //$NON-NLS-1$
 		    consumeForceNoDiet();  
 			break;
  
-    case 237 : if (DEBUG) { System.out.println("RestoreDiet ::="); }  //$NON-NLS-1$
+    case 239 : if (DEBUG) { System.out.println("RestoreDiet ::="); }  //$NON-NLS-1$
 		    consumeRestoreDiet();  
 			break;
  
-    case 242 : if (DEBUG) { System.out.println("MethodDeclaration ::= MethodHeader MethodBody"); }  //$NON-NLS-1$
+    case 244 : if (DEBUG) { System.out.println("MethodDeclaration ::= MethodHeader MethodBody"); }  //$NON-NLS-1$
 		    // set to true to consume a method with a body
  consumeMethodDeclaration(true, false);  
 			break;
  
-    case 243 : if (DEBUG) { System.out.println("MethodDeclaration ::= DefaultMethodHeader MethodBody"); }  //$NON-NLS-1$
+    case 245 : if (DEBUG) { System.out.println("MethodDeclaration ::= DefaultMethodHeader MethodBody"); }  //$NON-NLS-1$
 		    // set to true to consume a method with a body
  consumeMethodDeclaration(true, true);  
 			break;
  
-    case 244 : if (DEBUG) { System.out.println("AbstractMethodDeclaration ::= MethodHeader SEMICOLON"); }  //$NON-NLS-1$
+    case 246 : if (DEBUG) { System.out.println("AbstractMethodDeclaration ::= MethodHeader SEMICOLON"); }  //$NON-NLS-1$
 		    // set to false to consume a method without body
  consumeMethodDeclaration(false, false);  
 			break;
  
-    case 245 : if (DEBUG) { System.out.println("MethodHeader ::= MethodHeaderName FormalParameterListopt"); }  //$NON-NLS-1$
+    case 247 : if (DEBUG) { System.out.println("MethodHeader ::= MethodHeaderName FormalParameterListopt"); }  //$NON-NLS-1$
 		    consumeMethodHeader();  
 			break;
  
-    case 246 : if (DEBUG) { System.out.println("DefaultMethodHeader ::= DefaultMethodHeaderName..."); }  //$NON-NLS-1$
+    case 248 : if (DEBUG) { System.out.println("DefaultMethodHeader ::= DefaultMethodHeaderName..."); }  //$NON-NLS-1$
 		    consumeMethodHeader();  
 			break;
  
-    case 247 : if (DEBUG) { System.out.println("MethodHeaderName ::= Modifiersopt TypeParameters Type..."); }  //$NON-NLS-1$
+    case 249 : if (DEBUG) { System.out.println("MethodHeaderName ::= Modifiersopt TypeParameters Type..."); }  //$NON-NLS-1$
 		    consumeMethodHeaderNameWithTypeParameters(false);  
 			break;
  
-    case 248 : if (DEBUG) { System.out.println("MethodHeaderName ::= Modifiersopt Type Identifier LPAREN"); }  //$NON-NLS-1$
+    case 250 : if (DEBUG) { System.out.println("MethodHeaderName ::= Modifiersopt Type Identifier LPAREN"); }  //$NON-NLS-1$
 		    consumeMethodHeaderName(false);  
 			break;
  
-    case 249 : if (DEBUG) { System.out.println("DefaultMethodHeaderName ::= ModifiersWithDefault..."); }  //$NON-NLS-1$
+    case 251 : if (DEBUG) { System.out.println("DefaultMethodHeaderName ::= ModifiersWithDefault..."); }  //$NON-NLS-1$
 		    consumeMethodHeaderNameWithTypeParameters(false);  
 			break;
  
-    case 250 : if (DEBUG) { System.out.println("DefaultMethodHeaderName ::= ModifiersWithDefault Type..."); }  //$NON-NLS-1$
+    case 252 : if (DEBUG) { System.out.println("DefaultMethodHeaderName ::= ModifiersWithDefault Type..."); }  //$NON-NLS-1$
 		    consumeMethodHeaderName(false);  
 			break;
  
-    case 251 : if (DEBUG) { System.out.println("ModifiersWithDefault ::= Modifiersopt default..."); }  //$NON-NLS-1$
+    case 253 : if (DEBUG) { System.out.println("ModifiersWithDefault ::= Modifiersopt default..."); }  //$NON-NLS-1$
 		    consumePushCombineModifiers();  
 			break;
  
-    case 252 : if (DEBUG) { System.out.println("MethodHeaderRightParen ::= RPAREN"); }  //$NON-NLS-1$
+    case 254 : if (DEBUG) { System.out.println("MethodHeaderRightParen ::= RPAREN"); }  //$NON-NLS-1$
 		    consumeMethodHeaderRightParen();  
 			break;
  
-    case 253 : if (DEBUG) { System.out.println("MethodHeaderExtendedDims ::= Dimsopt"); }  //$NON-NLS-1$
+    case 255 : if (DEBUG) { System.out.println("MethodHeaderExtendedDims ::= Dimsopt"); }  //$NON-NLS-1$
 		    consumeMethodHeaderExtendedDims();  
 			break;
  
-    case 254 : if (DEBUG) { System.out.println("MethodHeaderThrowsClause ::= throws ClassTypeList"); }  //$NON-NLS-1$
+    case 256 : if (DEBUG) { System.out.println("MethodHeaderThrowsClause ::= throws ClassTypeList"); }  //$NON-NLS-1$
 		    consumeMethodHeaderThrowsClause();  
 			break;
  
-    case 255 : if (DEBUG) { System.out.println("ConstructorHeader ::= ConstructorHeaderName..."); }  //$NON-NLS-1$
+    case 257 : if (DEBUG) { System.out.println("ConstructorHeader ::= ConstructorHeaderName..."); }  //$NON-NLS-1$
 		    consumeConstructorHeader();  
 			break;
  
-    case 256 : if (DEBUG) { System.out.println("ConstructorHeaderName ::= Modifiersopt TypeParameters..."); }  //$NON-NLS-1$
+    case 258 : if (DEBUG) { System.out.println("ConstructorHeaderName ::= Modifiersopt TypeParameters..."); }  //$NON-NLS-1$
 		    consumeConstructorHeaderNameWithTypeParameters();  
 			break;
  
-    case 257 : if (DEBUG) { System.out.println("ConstructorHeaderName ::= Modifiersopt Identifier LPAREN"); }  //$NON-NLS-1$
+    case 259 : if (DEBUG) { System.out.println("ConstructorHeaderName ::= Modifiersopt Identifier LPAREN"); }  //$NON-NLS-1$
 		    consumeConstructorHeaderName();  
 			break;
  
-    case 259 : if (DEBUG) { System.out.println("FormalParameterList ::= FormalParameterList COMMA..."); }  //$NON-NLS-1$
+    case 261 : if (DEBUG) { System.out.println("FormalParameterList ::= FormalParameterList COMMA..."); }  //$NON-NLS-1$
 		    consumeFormalParameterList();  
 			break;
  
-    case 260 : if (DEBUG) { System.out.println("FormalParameter ::= Modifiersopt Type..."); }  //$NON-NLS-1$
+    case 262 : if (DEBUG) { System.out.println("FormalParameter ::= Modifiersopt Type..."); }  //$NON-NLS-1$
 		    consumeFormalParameter(false);  
 			break;
  
-    case 261 : if (DEBUG) { System.out.println("FormalParameter ::= Modifiersopt Type..."); }  //$NON-NLS-1$
+    case 263 : if (DEBUG) { System.out.println("FormalParameter ::= Modifiersopt Type..."); }  //$NON-NLS-1$
 		    consumeFormalParameter(true);  
 			break;
  
-    case 262 : if (DEBUG) { System.out.println("FormalParameter ::= Modifiersopt Type AT308DOTDOTDOT..."); }  //$NON-NLS-1$
+    case 264 : if (DEBUG) { System.out.println("FormalParameter ::= Modifiersopt Type AT308DOTDOTDOT..."); }  //$NON-NLS-1$
 		    consumeFormalParameter(true);  
 			break;
  
-    case 263 : if (DEBUG) { System.out.println("CatchFormalParameter ::= Modifiersopt CatchType..."); }  //$NON-NLS-1$
+    case 265 : if (DEBUG) { System.out.println("CatchFormalParameter ::= Modifiersopt CatchType..."); }  //$NON-NLS-1$
 		    consumeCatchFormalParameter();  
 			break;
  
-    case 264 : if (DEBUG) { System.out.println("CatchType ::= UnionType"); }  //$NON-NLS-1$
+    case 266 : if (DEBUG) { System.out.println("CatchType ::= UnionType"); }  //$NON-NLS-1$
 		    consumeCatchType();  
 			break;
  
-    case 265 : if (DEBUG) { System.out.println("UnionType ::= Type"); }  //$NON-NLS-1$
+    case 267 : if (DEBUG) { System.out.println("UnionType ::= Type"); }  //$NON-NLS-1$
 		    consumeUnionTypeAsClassType();  
 			break;
  
-    case 266 : if (DEBUG) { System.out.println("UnionType ::= UnionType OR Type"); }  //$NON-NLS-1$
+    case 268 : if (DEBUG) { System.out.println("UnionType ::= UnionType OR Type"); }  //$NON-NLS-1$
 		    consumeUnionType();  
 			break;
  
-    case 268 : if (DEBUG) { System.out.println("ClassTypeList ::= ClassTypeList COMMA ClassTypeElt"); }  //$NON-NLS-1$
+    case 270 : if (DEBUG) { System.out.println("ClassTypeList ::= ClassTypeList COMMA ClassTypeElt"); }  //$NON-NLS-1$
 		    consumeClassTypeList();  
 			break;
  
-    case 269 : if (DEBUG) { System.out.println("ClassTypeElt ::= ClassType"); }  //$NON-NLS-1$
+    case 271 : if (DEBUG) { System.out.println("ClassTypeElt ::= ClassType"); }  //$NON-NLS-1$
 		    consumeClassTypeElt();  
 			break;
  
-    case 270 : if (DEBUG) { System.out.println("MethodBody ::= NestedMethod LBRACE BlockStatementsopt..."); }  //$NON-NLS-1$
+    case 272 : if (DEBUG) { System.out.println("MethodBody ::= NestedMethod LBRACE BlockStatementsopt..."); }  //$NON-NLS-1$
 		    consumeMethodBody();  
 			break;
  
-    case 271 : if (DEBUG) { System.out.println("NestedMethod ::="); }  //$NON-NLS-1$
+    case 273 : if (DEBUG) { System.out.println("NestedMethod ::="); }  //$NON-NLS-1$
 		    consumeNestedMethod();  
 			break;
  
-    case 272 : if (DEBUG) { System.out.println("StaticInitializer ::= StaticOnly Block"); }  //$NON-NLS-1$
+    case 274 : if (DEBUG) { System.out.println("StaticInitializer ::= StaticOnly Block"); }  //$NON-NLS-1$
 		    consumeStaticInitializer();  
 			break;
 
-    case 273 : if (DEBUG) { System.out.println("StaticOnly ::= static"); }  //$NON-NLS-1$
+    case 275 : if (DEBUG) { System.out.println("StaticOnly ::= static"); }  //$NON-NLS-1$
 		    consumeStaticOnly();  
 			break;
  
-    case 274 : if (DEBUG) { System.out.println("ConstructorDeclaration ::= ConstructorHeader MethodBody"); }  //$NON-NLS-1$
+    case 276 : if (DEBUG) { System.out.println("ConstructorDeclaration ::= ConstructorHeader MethodBody"); }  //$NON-NLS-1$
 		    consumeConstructorDeclaration() ;  
 			break;
  
-    case 275 : if (DEBUG) { System.out.println("ConstructorDeclaration ::= ConstructorHeader SEMICOLON"); }  //$NON-NLS-1$
+    case 277 : if (DEBUG) { System.out.println("ConstructorDeclaration ::= ConstructorHeader SEMICOLON"); }  //$NON-NLS-1$
 		    consumeInvalidConstructorDeclaration() ;  
 			break;
  
-    case 276 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= this LPAREN..."); }  //$NON-NLS-1$
+    case 278 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= this LPAREN..."); }  //$NON-NLS-1$
 		    consumeExplicitConstructorInvocation(0, THIS_CALL);  
 			break;
  
-    case 277 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= OnlyTypeArguments this"); }  //$NON-NLS-1$
+    case 279 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= OnlyTypeArguments this"); }  //$NON-NLS-1$
 		    consumeExplicitConstructorInvocationWithTypeArguments(0,THIS_CALL);  
 			break;
  
-    case 278 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= super LPAREN..."); }  //$NON-NLS-1$
+    case 280 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= super LPAREN..."); }  //$NON-NLS-1$
 		    consumeExplicitConstructorInvocation(0,SUPER_CALL);  
 			break;
  
-    case 279 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= OnlyTypeArguments..."); }  //$NON-NLS-1$
+    case 281 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= OnlyTypeArguments..."); }  //$NON-NLS-1$
 		    consumeExplicitConstructorInvocationWithTypeArguments(0,SUPER_CALL);  
 			break;
  
-    case 280 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Primary DOT super..."); }  //$NON-NLS-1$
+    case 282 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Primary DOT super..."); }  //$NON-NLS-1$
 		    consumeExplicitConstructorInvocation(1, SUPER_CALL);  
 			break;
  
-    case 281 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Primary DOT..."); }  //$NON-NLS-1$
+    case 283 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Primary DOT..."); }  //$NON-NLS-1$
 		    consumeExplicitConstructorInvocationWithTypeArguments(1, SUPER_CALL);  
 			break;
  
-    case 282 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Name DOT super LPAREN"); }  //$NON-NLS-1$
+    case 284 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Name DOT super LPAREN"); }  //$NON-NLS-1$
 		    consumeExplicitConstructorInvocation(2, SUPER_CALL);  
 			break;
  
-    case 283 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Name DOT..."); }  //$NON-NLS-1$
+    case 285 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Name DOT..."); }  //$NON-NLS-1$
 		    consumeExplicitConstructorInvocationWithTypeArguments(2, SUPER_CALL);  
 			break;
  
-    case 284 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Primary DOT this..."); }  //$NON-NLS-1$
+    case 286 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Primary DOT this..."); }  //$NON-NLS-1$
 		    consumeExplicitConstructorInvocation(1, THIS_CALL);  
 			break;
  
-    case 285 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Primary DOT..."); }  //$NON-NLS-1$
+    case 287 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Primary DOT..."); }  //$NON-NLS-1$
 		    consumeExplicitConstructorInvocationWithTypeArguments(1, THIS_CALL);  
 			break;
  
-    case 286 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Name DOT this LPAREN"); }  //$NON-NLS-1$
+    case 288 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Name DOT this LPAREN"); }  //$NON-NLS-1$
 		    consumeExplicitConstructorInvocation(2, THIS_CALL);  
 			break;
  
-    case 287 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Name DOT..."); }  //$NON-NLS-1$
+    case 289 : if (DEBUG) { System.out.println("ExplicitConstructorInvocation ::= Name DOT..."); }  //$NON-NLS-1$
 		    consumeExplicitConstructorInvocationWithTypeArguments(2, THIS_CALL);  
 			break;
  
-    case 288 : if (DEBUG) { System.out.println("InterfaceDeclaration ::= InterfaceHeader InterfaceBody"); }  //$NON-NLS-1$
+    case 290 : if (DEBUG) { System.out.println("InterfaceDeclaration ::= InterfaceHeader InterfaceBody"); }  //$NON-NLS-1$
 		    consumeInterfaceDeclaration();  
 			break;
  
-    case 289 : if (DEBUG) { System.out.println("InterfaceHeader ::= InterfaceHeaderName..."); }  //$NON-NLS-1$
+    case 291 : if (DEBUG) { System.out.println("InterfaceHeader ::= InterfaceHeaderName..."); }  //$NON-NLS-1$
 		    consumeInterfaceHeader();  
 			break;
  
-    case 290 : if (DEBUG) { System.out.println("InterfaceHeaderName ::= InterfaceHeaderName1..."); }  //$NON-NLS-1$
+    case 292 : if (DEBUG) { System.out.println("InterfaceHeaderName ::= InterfaceHeaderName1..."); }  //$NON-NLS-1$
 		    consumeTypeHeaderNameWithTypeParameters();  
 			break;
  
-    case 292 : if (DEBUG) { System.out.println("InterfaceHeaderName1 ::= Modifiersopt interface..."); }  //$NON-NLS-1$
+    case 294 : if (DEBUG) { System.out.println("InterfaceHeaderName1 ::= Modifiersopt interface..."); }  //$NON-NLS-1$
 		    consumeInterfaceHeaderName1();  
 			break;
  
-    case 293 : if (DEBUG) { System.out.println("InterfaceHeaderExtends ::= extends InterfaceTypeList"); }  //$NON-NLS-1$
+    case 295 : if (DEBUG) { System.out.println("InterfaceHeaderExtends ::= extends InterfaceTypeList"); }  //$NON-NLS-1$
 		    consumeInterfaceHeaderExtends();  
 			break;
  
-    case 296 : if (DEBUG) { System.out.println("InterfaceMemberDeclarations ::=..."); }  //$NON-NLS-1$
+    case 298 : if (DEBUG) { System.out.println("InterfaceMemberDeclarations ::=..."); }  //$NON-NLS-1$
 		    consumeInterfaceMemberDeclarations();  
 			break;
  
-    case 297 : if (DEBUG) { System.out.println("InterfaceMemberDeclaration ::= SEMICOLON"); }  //$NON-NLS-1$
+    case 299 : if (DEBUG) { System.out.println("InterfaceMemberDeclaration ::= SEMICOLON"); }  //$NON-NLS-1$
 		    consumeEmptyTypeDeclaration();  
 			break;
  
-    case 299 : if (DEBUG) { System.out.println("InterfaceMemberDeclaration ::= DefaultMethodHeader..."); }  //$NON-NLS-1$
-		    consumeInterfaceMethodDeclaration(false);  
-			break;
- 
-    case 300 : if (DEBUG) { System.out.println("InterfaceMemberDeclaration ::= MethodHeader MethodBody"); }  //$NON-NLS-1$
-		    consumeInterfaceMethodDeclaration(false);  
-			break;
- 
     case 301 : if (DEBUG) { System.out.println("InterfaceMemberDeclaration ::= DefaultMethodHeader..."); }  //$NON-NLS-1$
+		    consumeInterfaceMethodDeclaration(false);  
+			break;
+ 
+    case 302 : if (DEBUG) { System.out.println("InterfaceMemberDeclaration ::= MethodHeader MethodBody"); }  //$NON-NLS-1$
+		    consumeInterfaceMethodDeclaration(false);  
+			break;
+ 
+    case 303 : if (DEBUG) { System.out.println("InterfaceMemberDeclaration ::= DefaultMethodHeader..."); }  //$NON-NLS-1$
 		    consumeInterfaceMethodDeclaration(true);  
 			break;
  
-    case 302 : if (DEBUG) { System.out.println("InvalidConstructorDeclaration ::= ConstructorHeader..."); }  //$NON-NLS-1$
+    case 304 : if (DEBUG) { System.out.println("InvalidConstructorDeclaration ::= ConstructorHeader..."); }  //$NON-NLS-1$
 		    consumeInvalidConstructorDeclaration(true);  
 			break;
  
-    case 303 : if (DEBUG) { System.out.println("InvalidConstructorDeclaration ::= ConstructorHeader..."); }  //$NON-NLS-1$
+    case 305 : if (DEBUG) { System.out.println("InvalidConstructorDeclaration ::= ConstructorHeader..."); }  //$NON-NLS-1$
 		    consumeInvalidConstructorDeclaration(false);  
 			break;
  
-    case 314 : if (DEBUG) { System.out.println("PushLeftBrace ::="); }  //$NON-NLS-1$
+    case 316 : if (DEBUG) { System.out.println("PushLeftBrace ::="); }  //$NON-NLS-1$
 		    consumePushLeftBrace();  
 			break;
  
-    case 315 : if (DEBUG) { System.out.println("ArrayInitializer ::= LBRACE PushLeftBrace ,opt RBRACE"); }  //$NON-NLS-1$
+    case 317 : if (DEBUG) { System.out.println("ArrayInitializer ::= LBRACE PushLeftBrace ,opt RBRACE"); }  //$NON-NLS-1$
 		    consumeEmptyArrayInitializer();  
 			break;
  
-    case 316 : if (DEBUG) { System.out.println("ArrayInitializer ::= LBRACE PushLeftBrace..."); }  //$NON-NLS-1$
+    case 318 : if (DEBUG) { System.out.println("ArrayInitializer ::= LBRACE PushLeftBrace..."); }  //$NON-NLS-1$
 		    consumeArrayInitializer();  
 			break;
  
-    case 317 : if (DEBUG) { System.out.println("ArrayInitializer ::= LBRACE PushLeftBrace..."); }  //$NON-NLS-1$
+    case 319 : if (DEBUG) { System.out.println("ArrayInitializer ::= LBRACE PushLeftBrace..."); }  //$NON-NLS-1$
 		    consumeArrayInitializer();  
 			break;
  
-    case 319 : if (DEBUG) { System.out.println("VariableInitializers ::= VariableInitializers COMMA..."); }  //$NON-NLS-1$
+    case 321 : if (DEBUG) { System.out.println("VariableInitializers ::= VariableInitializers COMMA..."); }  //$NON-NLS-1$
 		    consumeVariableInitializers();  
 			break;
  
-    case 320 : if (DEBUG) { System.out.println("Block ::= OpenBlock LBRACE BlockStatementsopt RBRACE"); }  //$NON-NLS-1$
+    case 322 : if (DEBUG) { System.out.println("Block ::= OpenBlock LBRACE BlockStatementsopt RBRACE"); }  //$NON-NLS-1$
 		    consumeBlock();  
 			break;
  
-    case 321 : if (DEBUG) { System.out.println("OpenBlock ::="); }  //$NON-NLS-1$
+    case 323 : if (DEBUG) { System.out.println("OpenBlock ::="); }  //$NON-NLS-1$
 		    consumeOpenBlock() ;  
 			break;
  
-    case 322 : if (DEBUG) { System.out.println("BlockStatements ::= BlockStatement"); }  //$NON-NLS-1$
+    case 324 : if (DEBUG) { System.out.println("BlockStatements ::= BlockStatement"); }  //$NON-NLS-1$
 		    consumeBlockStatement() ;  
 			break;
  
-    case 323 : if (DEBUG) { System.out.println("BlockStatements ::= BlockStatements BlockStatement"); }  //$NON-NLS-1$
+    case 325 : if (DEBUG) { System.out.println("BlockStatements ::= BlockStatements BlockStatement"); }  //$NON-NLS-1$
 		    consumeBlockStatements() ;  
 			break;
  
-    case 330 : if (DEBUG) { System.out.println("BlockStatement ::= InterfaceDeclaration"); }  //$NON-NLS-1$
+    case 332 : if (DEBUG) { System.out.println("BlockStatement ::= InterfaceDeclaration"); }  //$NON-NLS-1$
 		    consumeInvalidInterfaceDeclaration();  
 			break;
  
-    case 331 : if (DEBUG) { System.out.println("BlockStatement ::= AnnotationTypeDeclaration"); }  //$NON-NLS-1$
+    case 333 : if (DEBUG) { System.out.println("BlockStatement ::= AnnotationTypeDeclaration"); }  //$NON-NLS-1$
 		    consumeInvalidAnnotationTypeDeclaration();  
 			break;
  
-    case 332 : if (DEBUG) { System.out.println("BlockStatement ::= EnumDeclaration"); }  //$NON-NLS-1$
+    case 334 : if (DEBUG) { System.out.println("BlockStatement ::= EnumDeclaration"); }  //$NON-NLS-1$
 		    consumeInvalidEnumDeclaration();  
 			break;
  
-    case 333 : if (DEBUG) { System.out.println("LocalVariableDeclarationStatement ::=..."); }  //$NON-NLS-1$
+    case 335 : if (DEBUG) { System.out.println("LocalVariableDeclarationStatement ::=..."); }  //$NON-NLS-1$
 		    consumeLocalVariableDeclarationStatement();  
 			break;
  
-    case 334 : if (DEBUG) { System.out.println("LocalVariableDeclaration ::= Type PushModifiers..."); }  //$NON-NLS-1$
+    case 336 : if (DEBUG) { System.out.println("LocalVariableDeclaration ::= Type PushModifiers..."); }  //$NON-NLS-1$
 		    consumeLocalVariableDeclaration();  
 			break;
  
-    case 335 : if (DEBUG) { System.out.println("LocalVariableDeclaration ::= Modifiers Type..."); }  //$NON-NLS-1$
+    case 337 : if (DEBUG) { System.out.println("LocalVariableDeclaration ::= Modifiers Type..."); }  //$NON-NLS-1$
 		    consumeLocalVariableDeclaration();  
 			break;
  
-    case 336 : if (DEBUG) { System.out.println("PushModifiers ::="); }  //$NON-NLS-1$
+    case 338 : if (DEBUG) { System.out.println("PushModifiers ::="); }  //$NON-NLS-1$
 		    consumePushModifiers();  
 			break;
  
-    case 337 : if (DEBUG) { System.out.println("PushModifiersForHeader ::="); }  //$NON-NLS-1$
+    case 339 : if (DEBUG) { System.out.println("PushModifiersForHeader ::="); }  //$NON-NLS-1$
 		    consumePushModifiersForHeader();  
 			break;
  
-    case 338 : if (DEBUG) { System.out.println("PushRealModifiers ::="); }  //$NON-NLS-1$
+    case 340 : if (DEBUG) { System.out.println("PushRealModifiers ::="); }  //$NON-NLS-1$
 		    consumePushRealModifiers();  
 			break;
  
-    case 365 : if (DEBUG) { System.out.println("EmptyStatement ::= SEMICOLON"); }  //$NON-NLS-1$
+    case 368 : if (DEBUG) { System.out.println("EmptyStatement ::= SEMICOLON"); }  //$NON-NLS-1$
 		    consumeEmptyStatement();  
 			break;
  
-    case 366 : if (DEBUG) { System.out.println("LabeledStatement ::= Label COLON Statement"); }  //$NON-NLS-1$
+    case 369 : if (DEBUG) { System.out.println("LabeledStatement ::= Label COLON Statement"); }  //$NON-NLS-1$
 		    consumeStatementLabel() ;  
 			break;
  
-    case 367 : if (DEBUG) { System.out.println("LabeledStatementNoShortIf ::= Label COLON..."); }  //$NON-NLS-1$
+    case 370 : if (DEBUG) { System.out.println("LabeledStatementNoShortIf ::= Label COLON..."); }  //$NON-NLS-1$
 		    consumeStatementLabel() ;  
 			break;
  
-    case 368 : if (DEBUG) { System.out.println("Label ::= Identifier"); }  //$NON-NLS-1$
+    case 371 : if (DEBUG) { System.out.println("Label ::= Identifier"); }  //$NON-NLS-1$
 		    consumeLabel() ;  
 			break;
  
-     case 369 : if (DEBUG) { System.out.println("ExpressionStatement ::= StatementExpression SEMICOLON"); }  //$NON-NLS-1$
+     case 372 : if (DEBUG) { System.out.println("ExpressionStatement ::= StatementExpression SEMICOLON"); }  //$NON-NLS-1$
 		    consumeExpressionStatement();  
 			break;
  
-    case 378 : if (DEBUG) { System.out.println("IfThenStatement ::= if LPAREN Expression RPAREN..."); }  //$NON-NLS-1$
+    case 381 : if (DEBUG) { System.out.println("IfThenStatement ::= if LPAREN Expression RPAREN..."); }  //$NON-NLS-1$
 		    consumeStatementIfNoElse();  
 			break;
  
-    case 379 : if (DEBUG) { System.out.println("IfThenElseStatement ::= if LPAREN Expression RPAREN..."); }  //$NON-NLS-1$
+    case 382 : if (DEBUG) { System.out.println("IfThenElseStatement ::= if LPAREN Expression RPAREN..."); }  //$NON-NLS-1$
 		    consumeStatementIfWithElse();  
 			break;
  
-    case 380 : if (DEBUG) { System.out.println("IfThenElseStatementNoShortIf ::= if LPAREN Expression..."); }  //$NON-NLS-1$
+    case 383 : if (DEBUG) { System.out.println("IfThenElseStatementNoShortIf ::= if LPAREN Expression..."); }  //$NON-NLS-1$
 		    consumeStatementIfWithElse();  
 			break;
  
-    case 381 : if (DEBUG) { System.out.println("SwitchStatement ::= switch LPAREN Expression RPAREN..."); }  //$NON-NLS-1$
+    case 384 : if (DEBUG) { System.out.println("SwitchStatement ::= switch LPAREN Expression RPAREN..."); }  //$NON-NLS-1$
 		    consumeStatementSwitch() ;  
 			break;
  
-    case 382 : if (DEBUG) { System.out.println("SwitchBlock ::= LBRACE RBRACE"); }  //$NON-NLS-1$
+    case 385 : if (DEBUG) { System.out.println("SwitchBlock ::= LBRACE RBRACE"); }  //$NON-NLS-1$
 		    consumeEmptySwitchBlock() ;  
 			break;
  
-    case 385 : if (DEBUG) { System.out.println("SwitchBlock ::= LBRACE SwitchBlockStatements..."); }  //$NON-NLS-1$
+    case 388 : if (DEBUG) { System.out.println("SwitchBlock ::= LBRACE SwitchBlockStatements..."); }  //$NON-NLS-1$
 		    consumeSwitchBlock() ;  
 			break;
  
-    case 387 : if (DEBUG) { System.out.println("SwitchBlockStatements ::= SwitchBlockStatements..."); }  //$NON-NLS-1$
+    case 390 : if (DEBUG) { System.out.println("SwitchBlockStatements ::= SwitchBlockStatements..."); }  //$NON-NLS-1$
 		    consumeSwitchBlockStatements() ;  
 			break;
  
-    case 389 : if (DEBUG) { System.out.println("SwitchBlockStatement ::= SwitchLabels BlockStatements"); }  //$NON-NLS-1$
+    case 392 : if (DEBUG) { System.out.println("SwitchBlockStatement ::= SwitchLabels BlockStatements"); }  //$NON-NLS-1$
 		    consumeSwitchBlockStatement() ;  
 			break;
  
-    case 391 : if (DEBUG) { System.out.println("SwitchLabels ::= SwitchLabels SwitchLabel"); }  //$NON-NLS-1$
+    case 394 : if (DEBUG) { System.out.println("SwitchLabels ::= SwitchLabels SwitchLabel"); }  //$NON-NLS-1$
 		    consumeSwitchLabels() ;  
 			break;
  
-     case 392 : if (DEBUG) { System.out.println("SwitchLabel ::= SwitchLabelCaseLhs COLON"); }  //$NON-NLS-1$
+     case 395 : if (DEBUG) { System.out.println("SwitchLabel ::= SwitchLabelCaseLhs COLON"); }  //$NON-NLS-1$
 		    consumeCaseLabel();  
 			break;
  
-     case 393 : if (DEBUG) { System.out.println("SwitchLabel ::= default COLON"); }  //$NON-NLS-1$
+     case 396 : if (DEBUG) { System.out.println("SwitchLabel ::= default COLON"); }  //$NON-NLS-1$
 		    consumeDefaultLabel();  
 			break;
  
-    case 396 : if (DEBUG) { System.out.println("SwitchExpression ::= switch LPAREN Expression RPAREN..."); }  //$NON-NLS-1$
+    case 399 : if (DEBUG) { System.out.println("SwitchExpression ::= switch LPAREN Expression RPAREN..."); }  //$NON-NLS-1$
 		    consumeSwitchExpression() ;  
 			break;
  
-     case 399 : if (DEBUG) { System.out.println("SwitchLabeledRule ::= SwitchLabeledThrowStatement"); }  //$NON-NLS-1$
+     case 402 : if (DEBUG) { System.out.println("SwitchLabeledRule ::= SwitchLabeledThrowStatement"); }  //$NON-NLS-1$
 		    consumeSwitchLabeledRule();  
 			break;
  
-     case 400 : if (DEBUG) { System.out.println("SwitchLabeledExpression ::= SwitchLabelExpr Expression"); }  //$NON-NLS-1$
+     case 403 : if (DEBUG) { System.out.println("SwitchLabeledExpression ::= SwitchLabelExpr Expression"); }  //$NON-NLS-1$
 		    consumeSwitchLabeledExpression();  
 			break;
  
-     case 401 : if (DEBUG) { System.out.println("SwitchLabeledBlock ::= SwitchLabelExpr Block"); }  //$NON-NLS-1$
+     case 404 : if (DEBUG) { System.out.println("SwitchLabeledBlock ::= SwitchLabelExpr Block"); }  //$NON-NLS-1$
 		    consumeSwitchLabeledBlock();  
 			break;
  
-     case 402 : if (DEBUG) { System.out.println("SwitchLabeledThrowStatement ::= SwitchLabelExpr..."); }  //$NON-NLS-1$
+     case 405 : if (DEBUG) { System.out.println("SwitchLabeledThrowStatement ::= SwitchLabelExpr..."); }  //$NON-NLS-1$
 		    consumeSwitchLabeledThrowStatement();  
 			break;
  
-     case 403 : if (DEBUG) { System.out.println("SwitchLabelExpr ::= default ARROW"); }  //$NON-NLS-1$
+     case 406 : if (DEBUG) { System.out.println("SwitchLabelExpr ::= default ARROW"); }  //$NON-NLS-1$
 		    consumeDefaultLabelExpr();  
 			break;
  
-     case 404 : if (DEBUG) { System.out.println("SwitchLabelExpr ::= SwitchLabelCaseLhs BeginCaseExpr..."); }  //$NON-NLS-1$
+     case 407 : if (DEBUG) { System.out.println("SwitchLabelExpr ::= SwitchLabelCaseLhs BeginCaseExpr..."); }  //$NON-NLS-1$
 		    consumeCaseLabelExpr();  
 			break;
  
-     case 405 : if (DEBUG) { System.out.println("SwitchLabelCaseLhs ::= case ConstantExpressions"); }  //$NON-NLS-1$
+     case 408 : if (DEBUG) { System.out.println("SwitchLabelCaseLhs ::= case ConstantExpressions"); }  //$NON-NLS-1$
 		    consumeSwitchLabelCaseLhs();  
 			break;
  
-    case 406 : if (DEBUG) { System.out.println("WhileStatement ::= while LPAREN Expression RPAREN..."); }  //$NON-NLS-1$
+    case 409 : if (DEBUG) { System.out.println("YieldStatement ::= RestrictedIdentifierYield Expression"); }  //$NON-NLS-1$
+		    consumeStatementYield() ;  
+			break;
+ 
+    case 410 : if (DEBUG) { System.out.println("WhileStatement ::= while LPAREN Expression RPAREN..."); }  //$NON-NLS-1$
 		    consumeStatementWhile() ;  
 			break;
  
-    case 407 : if (DEBUG) { System.out.println("WhileStatementNoShortIf ::= while LPAREN Expression..."); }  //$NON-NLS-1$
+    case 411 : if (DEBUG) { System.out.println("WhileStatementNoShortIf ::= while LPAREN Expression..."); }  //$NON-NLS-1$
 		    consumeStatementWhile() ;  
 			break;
  
-    case 408 : if (DEBUG) { System.out.println("DoStatement ::= do Statement while LPAREN Expression..."); }  //$NON-NLS-1$
+    case 412 : if (DEBUG) { System.out.println("DoStatement ::= do Statement while LPAREN Expression..."); }  //$NON-NLS-1$
 		    consumeStatementDo() ;  
 			break;
  
-    case 409 : if (DEBUG) { System.out.println("ForStatement ::= for LPAREN ForInitopt SEMICOLON..."); }  //$NON-NLS-1$
+    case 413 : if (DEBUG) { System.out.println("ForStatement ::= for LPAREN ForInitopt SEMICOLON..."); }  //$NON-NLS-1$
 		    consumeStatementFor() ;  
 			break;
  
-    case 410 : if (DEBUG) { System.out.println("ForStatementNoShortIf ::= for LPAREN ForInitopt..."); }  //$NON-NLS-1$
+    case 414 : if (DEBUG) { System.out.println("ForStatementNoShortIf ::= for LPAREN ForInitopt..."); }  //$NON-NLS-1$
 		    consumeStatementFor() ;  
 			break;
  
-    case 411 : if (DEBUG) { System.out.println("ForInit ::= StatementExpressionList"); }  //$NON-NLS-1$
+    case 415 : if (DEBUG) { System.out.println("ForInit ::= StatementExpressionList"); }  //$NON-NLS-1$
 		    consumeForInit() ;  
 			break;
  
-    case 415 : if (DEBUG) { System.out.println("StatementExpressionList ::= StatementExpressionList..."); }  //$NON-NLS-1$
+    case 419 : if (DEBUG) { System.out.println("StatementExpressionList ::= StatementExpressionList..."); }  //$NON-NLS-1$
 		    consumeStatementExpressionList() ;  
 			break;
  
-    case 416 : if (DEBUG) { System.out.println("AssertStatement ::= assert Expression SEMICOLON"); }  //$NON-NLS-1$
+    case 420 : if (DEBUG) { System.out.println("AssertStatement ::= assert Expression SEMICOLON"); }  //$NON-NLS-1$
 		    consumeSimpleAssertStatement() ;  
 			break;
  
-    case 417 : if (DEBUG) { System.out.println("AssertStatement ::= assert Expression COLON Expression"); }  //$NON-NLS-1$
+    case 421 : if (DEBUG) { System.out.println("AssertStatement ::= assert Expression COLON Expression"); }  //$NON-NLS-1$
 		    consumeAssertStatement() ;  
 			break;
  
-    case 418 : if (DEBUG) { System.out.println("BreakStatement ::= break SEMICOLON"); }  //$NON-NLS-1$
+    case 422 : if (DEBUG) { System.out.println("BreakStatement ::= break SEMICOLON"); }  //$NON-NLS-1$
 		    consumeStatementBreak() ;  
 			break;
  
-    case 419 : if (DEBUG) { System.out.println("BreakStatement ::= break Identifier SEMICOLON"); }  //$NON-NLS-1$
+    case 423 : if (DEBUG) { System.out.println("BreakStatement ::= break Identifier SEMICOLON"); }  //$NON-NLS-1$
 		    consumeStatementBreakWithLabel() ;  
 			break;
  
-    case 420 : if (DEBUG) { System.out.println("BreakStatement ::= break BreakPreviewMarker SEMICOLON"); }  //$NON-NLS-1$
-		    consumeStatementBreak() ;  
-			break;
- 
-    case 421 : if (DEBUG) { System.out.println("BreakStatement ::= break BreakPreviewMarker Expression"); }  //$NON-NLS-1$
-		    consumeStatementBreakWithExpressionOrLabel() ;  
-			break;
- 
-    case 422 : if (DEBUG) { System.out.println("ContinueStatement ::= continue SEMICOLON"); }  //$NON-NLS-1$
+    case 424 : if (DEBUG) { System.out.println("ContinueStatement ::= continue SEMICOLON"); }  //$NON-NLS-1$
 		    consumeStatementContinue() ;  
 			break;
  
-    case 423 : if (DEBUG) { System.out.println("ContinueStatement ::= continue Identifier SEMICOLON"); }  //$NON-NLS-1$
+    case 425 : if (DEBUG) { System.out.println("ContinueStatement ::= continue Identifier SEMICOLON"); }  //$NON-NLS-1$
 		    consumeStatementContinueWithLabel() ;  
 			break;
  
-    case 424 : if (DEBUG) { System.out.println("ReturnStatement ::= return Expressionopt SEMICOLON"); }  //$NON-NLS-1$
+    case 426 : if (DEBUG) { System.out.println("ReturnStatement ::= return Expressionopt SEMICOLON"); }  //$NON-NLS-1$
 		    consumeStatementReturn() ;  
 			break;
  
-    case 425 : if (DEBUG) { System.out.println("ThrowStatement ::= throw Expression SEMICOLON"); }  //$NON-NLS-1$
+    case 427 : if (DEBUG) { System.out.println("ThrowStatement ::= throw Expression SEMICOLON"); }  //$NON-NLS-1$
 		    consumeStatementThrow();  
 			break;
  
-    case 426 : if (DEBUG) { System.out.println("ThrowExpression ::= throw Expression"); }  //$NON-NLS-1$
+    case 428 : if (DEBUG) { System.out.println("ThrowExpression ::= throw Expression"); }  //$NON-NLS-1$
 		    consumeThrowExpression() ;  
 			break;
  
-    case 427 : if (DEBUG) { System.out.println("SynchronizedStatement ::= OnlySynchronized LPAREN..."); }  //$NON-NLS-1$
+    case 429 : if (DEBUG) { System.out.println("SynchronizedStatement ::= OnlySynchronized LPAREN..."); }  //$NON-NLS-1$
 		    consumeStatementSynchronized();  
 			break;
  
-    case 428 : if (DEBUG) { System.out.println("OnlySynchronized ::= synchronized"); }  //$NON-NLS-1$
+    case 430 : if (DEBUG) { System.out.println("OnlySynchronized ::= synchronized"); }  //$NON-NLS-1$
 		    consumeOnlySynchronized();  
 			break;
  
-    case 429 : if (DEBUG) { System.out.println("TryStatement ::= try TryBlock Catches"); }  //$NON-NLS-1$
+    case 431 : if (DEBUG) { System.out.println("TryStatement ::= try TryBlock Catches"); }  //$NON-NLS-1$
 		    consumeStatementTry(false, false);  
 			break;
  
-    case 430 : if (DEBUG) { System.out.println("TryStatement ::= try TryBlock Catchesopt Finally"); }  //$NON-NLS-1$
+    case 432 : if (DEBUG) { System.out.println("TryStatement ::= try TryBlock Catchesopt Finally"); }  //$NON-NLS-1$
 		    consumeStatementTry(true, false);  
 			break;
  
-    case 431 : if (DEBUG) { System.out.println("TryStatementWithResources ::= try ResourceSpecification"); }  //$NON-NLS-1$
+    case 433 : if (DEBUG) { System.out.println("TryStatementWithResources ::= try ResourceSpecification"); }  //$NON-NLS-1$
 		    consumeStatementTry(false, true);  
 			break;
  
-    case 432 : if (DEBUG) { System.out.println("TryStatementWithResources ::= try ResourceSpecification"); }  //$NON-NLS-1$
+    case 434 : if (DEBUG) { System.out.println("TryStatementWithResources ::= try ResourceSpecification"); }  //$NON-NLS-1$
 		    consumeStatementTry(true, true);  
 			break;
  
-    case 433 : if (DEBUG) { System.out.println("ResourceSpecification ::= LPAREN Resources ;opt RPAREN"); }  //$NON-NLS-1$
+    case 435 : if (DEBUG) { System.out.println("ResourceSpecification ::= LPAREN Resources ;opt RPAREN"); }  //$NON-NLS-1$
 		    consumeResourceSpecification();  
 			break;
  
-    case 434 : if (DEBUG) { System.out.println(";opt ::="); }  //$NON-NLS-1$
+    case 436 : if (DEBUG) { System.out.println(";opt ::="); }  //$NON-NLS-1$
 		    consumeResourceOptionalTrailingSemiColon(false);  
 			break;
  
-    case 435 : if (DEBUG) { System.out.println(";opt ::= SEMICOLON"); }  //$NON-NLS-1$
+    case 437 : if (DEBUG) { System.out.println(";opt ::= SEMICOLON"); }  //$NON-NLS-1$
 		    consumeResourceOptionalTrailingSemiColon(true);  
 			break;
  
-    case 436 : if (DEBUG) { System.out.println("Resources ::= Resource"); }  //$NON-NLS-1$
+    case 438 : if (DEBUG) { System.out.println("Resources ::= Resource"); }  //$NON-NLS-1$
 		    consumeSingleResource();  
 			break;
  
-    case 437 : if (DEBUG) { System.out.println("Resources ::= Resources TrailingSemiColon Resource"); }  //$NON-NLS-1$
+    case 439 : if (DEBUG) { System.out.println("Resources ::= Resources TrailingSemiColon Resource"); }  //$NON-NLS-1$
 		    consumeMultipleResources();  
 			break;
  
-    case 438 : if (DEBUG) { System.out.println("TrailingSemiColon ::= SEMICOLON"); }  //$NON-NLS-1$
+    case 440 : if (DEBUG) { System.out.println("TrailingSemiColon ::= SEMICOLON"); }  //$NON-NLS-1$
 		    consumeResourceOptionalTrailingSemiColon(true);  
 			break;
  
-    case 439 : if (DEBUG) { System.out.println("Resource ::= Type PushModifiers VariableDeclaratorId..."); }  //$NON-NLS-1$
+    case 441 : if (DEBUG) { System.out.println("Resource ::= Type PushModifiers VariableDeclaratorId..."); }  //$NON-NLS-1$
 		    consumeResourceAsLocalVariableDeclaration();  
 			break;
  
-    case 440 : if (DEBUG) { System.out.println("Resource ::= Modifiers Type PushRealModifiers..."); }  //$NON-NLS-1$
+    case 442 : if (DEBUG) { System.out.println("Resource ::= Modifiers Type PushRealModifiers..."); }  //$NON-NLS-1$
 		    consumeResourceAsLocalVariableDeclaration();  
 			break;
  
-    case 441 : if (DEBUG) { System.out.println("Resource ::= Name"); }  //$NON-NLS-1$
+    case 443 : if (DEBUG) { System.out.println("Resource ::= Name"); }  //$NON-NLS-1$
 		    consumeResourceAsLocalVariable();  
 			break;
  
-    case 442 : if (DEBUG) { System.out.println("Resource ::= FieldAccess"); }  //$NON-NLS-1$
+    case 444 : if (DEBUG) { System.out.println("Resource ::= FieldAccess"); }  //$NON-NLS-1$
 		    consumeResourceAsFieldAccess();  
 			break;
  
-    case 444 : if (DEBUG) { System.out.println("ExitTryBlock ::="); }  //$NON-NLS-1$
+    case 446 : if (DEBUG) { System.out.println("ExitTryBlock ::="); }  //$NON-NLS-1$
 		    consumeExitTryBlock();  
 			break;
  
-    case 446 : if (DEBUG) { System.out.println("Catches ::= Catches CatchClause"); }  //$NON-NLS-1$
+    case 448 : if (DEBUG) { System.out.println("Catches ::= Catches CatchClause"); }  //$NON-NLS-1$
 		    consumeCatches();  
 			break;
  
-    case 447 : if (DEBUG) { System.out.println("CatchClause ::= catch LPAREN CatchFormalParameter RPAREN"); }  //$NON-NLS-1$
+    case 449 : if (DEBUG) { System.out.println("CatchClause ::= catch LPAREN CatchFormalParameter RPAREN"); }  //$NON-NLS-1$
 		    consumeStatementCatch() ;  
 			break;
  
-    case 449 : if (DEBUG) { System.out.println("PushLPAREN ::= LPAREN"); }  //$NON-NLS-1$
+    case 451 : if (DEBUG) { System.out.println("PushLPAREN ::= LPAREN"); }  //$NON-NLS-1$
 		    consumeLeftParen();  
 			break;
  
-    case 450 : if (DEBUG) { System.out.println("PushRPAREN ::= RPAREN"); }  //$NON-NLS-1$
+    case 452 : if (DEBUG) { System.out.println("PushRPAREN ::= RPAREN"); }  //$NON-NLS-1$
 		    consumeRightParen();  
 			break;
  
-    case 455 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= this"); }  //$NON-NLS-1$
+    case 457 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= this"); }  //$NON-NLS-1$
 		    consumePrimaryNoNewArrayThis();  
 			break;
  
-    case 456 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PushLPAREN Expression_NotName..."); }  //$NON-NLS-1$
+    case 458 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PushLPAREN Expression_NotName..."); }  //$NON-NLS-1$
 		    consumePrimaryNoNewArray();  
 			break;
  
-    case 457 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PushLPAREN Name PushRPAREN"); }  //$NON-NLS-1$
+    case 459 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PushLPAREN Name PushRPAREN"); }  //$NON-NLS-1$
 		    consumePrimaryNoNewArrayWithName();  
 			break;
  
-    case 460 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name DOT this"); }  //$NON-NLS-1$
+    case 462 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name DOT this"); }  //$NON-NLS-1$
 		    consumePrimaryNoNewArrayNameThis();  
 			break;
  
-    case 461 : if (DEBUG) { System.out.println("QualifiedSuperReceiver ::= Name DOT super"); }  //$NON-NLS-1$
+    case 463 : if (DEBUG) { System.out.println("QualifiedSuperReceiver ::= Name DOT super"); }  //$NON-NLS-1$
 		    consumeQualifiedSuperReceiver();  
 			break;
  
-    case 462 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name DOT class"); }  //$NON-NLS-1$
+    case 464 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name DOT class"); }  //$NON-NLS-1$
 		    consumePrimaryNoNewArrayName();  
 			break;
  
-    case 463 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name Dims DOT class"); }  //$NON-NLS-1$
+    case 465 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= Name Dims DOT class"); }  //$NON-NLS-1$
 		    consumePrimaryNoNewArrayArrayType();  
 			break;
  
-    case 464 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PrimitiveType Dims DOT class"); }  //$NON-NLS-1$
+    case 466 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PrimitiveType Dims DOT class"); }  //$NON-NLS-1$
 		    consumePrimaryNoNewArrayPrimitiveArrayType();  
 			break;
  
-    case 465 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PrimitiveType DOT class"); }  //$NON-NLS-1$
+    case 467 : if (DEBUG) { System.out.println("PrimaryNoNewArray ::= PrimitiveType DOT class"); }  //$NON-NLS-1$
 		    consumePrimaryNoNewArrayPrimitiveType();  
 			break;
  
-    case 471 : if (DEBUG) { System.out.println("ReferenceExpressionTypeArgumentsAndTrunk0 ::=..."); }  //$NON-NLS-1$
+    case 473 : if (DEBUG) { System.out.println("ReferenceExpressionTypeArgumentsAndTrunk0 ::=..."); }  //$NON-NLS-1$
 		    consumeReferenceExpressionTypeArgumentsAndTrunk(false);  
 			break;
  
-    case 472 : if (DEBUG) { System.out.println("ReferenceExpressionTypeArgumentsAndTrunk0 ::=..."); }  //$NON-NLS-1$
+    case 474 : if (DEBUG) { System.out.println("ReferenceExpressionTypeArgumentsAndTrunk0 ::=..."); }  //$NON-NLS-1$
 		    consumeReferenceExpressionTypeArgumentsAndTrunk(true);  
 			break;
  
-    case 473 : if (DEBUG) { System.out.println("ReferenceExpression ::= PrimitiveType Dims COLON_COLON"); }  //$NON-NLS-1$
+    case 475 : if (DEBUG) { System.out.println("ReferenceExpression ::= PrimitiveType Dims COLON_COLON"); }  //$NON-NLS-1$
 		    consumeReferenceExpressionTypeForm(true);  
 			break;
  
-    case 474 : if (DEBUG) { System.out.println("ReferenceExpression ::= Name Dimsopt COLON_COLON..."); }  //$NON-NLS-1$
+    case 476 : if (DEBUG) { System.out.println("ReferenceExpression ::= Name Dimsopt COLON_COLON..."); }  //$NON-NLS-1$
 		    consumeReferenceExpressionTypeForm(false);  
 			break;
  
-    case 475 : if (DEBUG) { System.out.println("ReferenceExpression ::= Name BeginTypeArguments..."); }  //$NON-NLS-1$
+    case 477 : if (DEBUG) { System.out.println("ReferenceExpression ::= Name BeginTypeArguments..."); }  //$NON-NLS-1$
 		    consumeReferenceExpressionGenericTypeForm();  
 			break;
  
-    case 476 : if (DEBUG) { System.out.println("ReferenceExpression ::= Primary COLON_COLON..."); }  //$NON-NLS-1$
+    case 478 : if (DEBUG) { System.out.println("ReferenceExpression ::= Primary COLON_COLON..."); }  //$NON-NLS-1$
 		    consumeReferenceExpressionPrimaryForm();  
 			break;
  
-    case 477 : if (DEBUG) { System.out.println("ReferenceExpression ::= QualifiedSuperReceiver..."); }  //$NON-NLS-1$
+    case 479 : if (DEBUG) { System.out.println("ReferenceExpression ::= QualifiedSuperReceiver..."); }  //$NON-NLS-1$
 		    consumeReferenceExpressionPrimaryForm();  
 			break;
  
-    case 478 : if (DEBUG) { System.out.println("ReferenceExpression ::= super COLON_COLON..."); }  //$NON-NLS-1$
+    case 480 : if (DEBUG) { System.out.println("ReferenceExpression ::= super COLON_COLON..."); }  //$NON-NLS-1$
 		    consumeReferenceExpressionSuperForm();  
 			break;
  
-    case 479 : if (DEBUG) { System.out.println("NonWildTypeArgumentsopt ::="); }  //$NON-NLS-1$
+    case 481 : if (DEBUG) { System.out.println("NonWildTypeArgumentsopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyTypeArguments();  
 			break;
  
-    case 481 : if (DEBUG) { System.out.println("IdentifierOrNew ::= Identifier"); }  //$NON-NLS-1$
+    case 483 : if (DEBUG) { System.out.println("IdentifierOrNew ::= Identifier"); }  //$NON-NLS-1$
 		    consumeIdentifierOrNew(false);  
 			break;
  
-    case 482 : if (DEBUG) { System.out.println("IdentifierOrNew ::= new"); }  //$NON-NLS-1$
+    case 484 : if (DEBUG) { System.out.println("IdentifierOrNew ::= new"); }  //$NON-NLS-1$
 		    consumeIdentifierOrNew(true);  
 			break;
  
-    case 483 : if (DEBUG) { System.out.println("LambdaExpression ::= LambdaParameters ARROW LambdaBody"); }  //$NON-NLS-1$
+    case 485 : if (DEBUG) { System.out.println("LambdaExpression ::= LambdaParameters ARROW LambdaBody"); }  //$NON-NLS-1$
 		    consumeLambdaExpression();  
 			break;
  
-    case 484 : if (DEBUG) { System.out.println("NestedLambda ::="); }  //$NON-NLS-1$
+    case 486 : if (DEBUG) { System.out.println("NestedLambda ::="); }  //$NON-NLS-1$
 		    consumeNestedLambda();  
 			break;
  
-    case 485 : if (DEBUG) { System.out.println("LambdaParameters ::= Identifier NestedLambda"); }  //$NON-NLS-1$
+    case 487 : if (DEBUG) { System.out.println("LambdaParameters ::= Identifier NestedLambda"); }  //$NON-NLS-1$
 		    consumeTypeElidedLambdaParameter(false);  
 			break;
  
-    case 491 : if (DEBUG) { System.out.println("TypeElidedFormalParameterList ::=..."); }  //$NON-NLS-1$
+    case 493 : if (DEBUG) { System.out.println("TypeElidedFormalParameterList ::=..."); }  //$NON-NLS-1$
 		    consumeFormalParameterList();  
 			break;
  
-    case 492 : if (DEBUG) { System.out.println("TypeElidedFormalParameter ::= Modifiersopt Identifier"); }  //$NON-NLS-1$
+    case 494 : if (DEBUG) { System.out.println("TypeElidedFormalParameter ::= Modifiersopt Identifier"); }  //$NON-NLS-1$
 		    consumeTypeElidedLambdaParameter(true);  
 			break;
  
-    case 495 : if (DEBUG) { System.out.println("ElidedLeftBraceAndReturn ::="); }  //$NON-NLS-1$
+    case 497 : if (DEBUG) { System.out.println("ElidedLeftBraceAndReturn ::="); }  //$NON-NLS-1$
 		    consumeElidedLeftBraceAndReturn();  
 			break;
  
-    case 496 : if (DEBUG) { System.out.println("AllocationHeader ::= new ClassType LPAREN..."); }  //$NON-NLS-1$
+    case 498 : if (DEBUG) { System.out.println("AllocationHeader ::= new ClassType LPAREN..."); }  //$NON-NLS-1$
 		    consumeAllocationHeader();  
 			break;
  
-    case 497 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= new..."); }  //$NON-NLS-1$
+    case 499 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= new..."); }  //$NON-NLS-1$
 		    consumeClassInstanceCreationExpressionWithTypeArguments();  
 			break;
  
-    case 498 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= new ClassType..."); }  //$NON-NLS-1$
+    case 500 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= new ClassType..."); }  //$NON-NLS-1$
 		    consumeClassInstanceCreationExpression();  
 			break;
  
-    case 499 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= Primary DOT new..."); }  //$NON-NLS-1$
+    case 501 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= Primary DOT new..."); }  //$NON-NLS-1$
 		    consumeClassInstanceCreationExpressionQualifiedWithTypeArguments() ;  
 			break;
  
-    case 500 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= Primary DOT new..."); }  //$NON-NLS-1$
+    case 502 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::= Primary DOT new..."); }  //$NON-NLS-1$
 		    consumeClassInstanceCreationExpressionQualified() ;  
 			break;
  
-    case 501 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::=..."); }  //$NON-NLS-1$
+    case 503 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::=..."); }  //$NON-NLS-1$
 		    consumeClassInstanceCreationExpressionQualified() ;  
 			break;
  
-    case 502 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::=..."); }  //$NON-NLS-1$
+    case 504 : if (DEBUG) { System.out.println("ClassInstanceCreationExpression ::=..."); }  //$NON-NLS-1$
 		    consumeClassInstanceCreationExpressionQualifiedWithTypeArguments() ;  
 			break;
  
-    case 503 : if (DEBUG) { System.out.println("EnterInstanceCreationArgumentList ::="); }  //$NON-NLS-1$
+    case 505 : if (DEBUG) { System.out.println("EnterInstanceCreationArgumentList ::="); }  //$NON-NLS-1$
 		    consumeEnterInstanceCreationArgumentList();  
 			break;
  
-    case 504 : if (DEBUG) { System.out.println("ClassInstanceCreationExpressionName ::= Name DOT new"); }  //$NON-NLS-1$
+    case 506 : if (DEBUG) { System.out.println("ClassInstanceCreationExpressionName ::= Name DOT new"); }  //$NON-NLS-1$
 		    consumeClassInstanceCreationExpressionName() ;  
 			break;
  
-    case 505 : if (DEBUG) { System.out.println("UnqualifiedClassBodyopt ::="); }  //$NON-NLS-1$
+    case 507 : if (DEBUG) { System.out.println("UnqualifiedClassBodyopt ::="); }  //$NON-NLS-1$
 		    consumeClassBodyopt();  
 			break;
  
-    case 507 : if (DEBUG) { System.out.println("UnqualifiedEnterAnonymousClassBody ::="); }  //$NON-NLS-1$
+    case 509 : if (DEBUG) { System.out.println("UnqualifiedEnterAnonymousClassBody ::="); }  //$NON-NLS-1$
 		    consumeEnterAnonymousClassBody(false);  
 			break;
  
-    case 508 : if (DEBUG) { System.out.println("QualifiedClassBodyopt ::="); }  //$NON-NLS-1$
+    case 510 : if (DEBUG) { System.out.println("QualifiedClassBodyopt ::="); }  //$NON-NLS-1$
 		    consumeClassBodyopt();  
 			break;
  
-    case 510 : if (DEBUG) { System.out.println("QualifiedEnterAnonymousClassBody ::="); }  //$NON-NLS-1$
+    case 512 : if (DEBUG) { System.out.println("QualifiedEnterAnonymousClassBody ::="); }  //$NON-NLS-1$
 		    consumeEnterAnonymousClassBody(true);  
 			break;
  
-    case 512 : if (DEBUG) { System.out.println("ArgumentList ::= ArgumentList COMMA Expression"); }  //$NON-NLS-1$
+    case 514 : if (DEBUG) { System.out.println("ArgumentList ::= ArgumentList COMMA Expression"); }  //$NON-NLS-1$
 		    consumeArgumentList();  
 			break;
  
-    case 513 : if (DEBUG) { System.out.println("ArrayCreationHeader ::= new PrimitiveType..."); }  //$NON-NLS-1$
+    case 515 : if (DEBUG) { System.out.println("ArrayCreationHeader ::= new PrimitiveType..."); }  //$NON-NLS-1$
 		    consumeArrayCreationHeader();  
 			break;
  
-    case 514 : if (DEBUG) { System.out.println("ArrayCreationHeader ::= new ClassOrInterfaceType..."); }  //$NON-NLS-1$
+    case 516 : if (DEBUG) { System.out.println("ArrayCreationHeader ::= new ClassOrInterfaceType..."); }  //$NON-NLS-1$
 		    consumeArrayCreationHeader();  
 			break;
  
-    case 515 : if (DEBUG) { System.out.println("ArrayCreationWithoutArrayInitializer ::= new..."); }  //$NON-NLS-1$
-		    consumeArrayCreationExpressionWithoutInitializer();  
-			break;
- 
-    case 516 : if (DEBUG) { System.out.println("ArrayCreationWithArrayInitializer ::= new PrimitiveType"); }  //$NON-NLS-1$
-		    consumeArrayCreationExpressionWithInitializer();  
-			break;
- 
     case 517 : if (DEBUG) { System.out.println("ArrayCreationWithoutArrayInitializer ::= new..."); }  //$NON-NLS-1$
 		    consumeArrayCreationExpressionWithoutInitializer();  
 			break;
  
-    case 518 : if (DEBUG) { System.out.println("ArrayCreationWithArrayInitializer ::= new..."); }  //$NON-NLS-1$
+    case 518 : if (DEBUG) { System.out.println("ArrayCreationWithArrayInitializer ::= new PrimitiveType"); }  //$NON-NLS-1$
 		    consumeArrayCreationExpressionWithInitializer();  
 			break;
  
-    case 520 : if (DEBUG) { System.out.println("DimWithOrWithOutExprs ::= DimWithOrWithOutExprs..."); }  //$NON-NLS-1$
+    case 519 : if (DEBUG) { System.out.println("ArrayCreationWithoutArrayInitializer ::= new..."); }  //$NON-NLS-1$
+		    consumeArrayCreationExpressionWithoutInitializer();  
+			break;
+ 
+    case 520 : if (DEBUG) { System.out.println("ArrayCreationWithArrayInitializer ::= new..."); }  //$NON-NLS-1$
+		    consumeArrayCreationExpressionWithInitializer();  
+			break;
+ 
+    case 522 : if (DEBUG) { System.out.println("DimWithOrWithOutExprs ::= DimWithOrWithOutExprs..."); }  //$NON-NLS-1$
 		    consumeDimWithOrWithOutExprs();  
 			break;
  
-     case 522 : if (DEBUG) { System.out.println("DimWithOrWithOutExpr ::= TypeAnnotationsopt LBRACKET..."); }  //$NON-NLS-1$
+     case 524 : if (DEBUG) { System.out.println("DimWithOrWithOutExpr ::= TypeAnnotationsopt LBRACKET..."); }  //$NON-NLS-1$
 		    consumeDimWithOrWithOutExpr();  
 			break;
  
-     case 523 : if (DEBUG) { System.out.println("Dims ::= DimsLoop"); }  //$NON-NLS-1$
+     case 525 : if (DEBUG) { System.out.println("Dims ::= DimsLoop"); }  //$NON-NLS-1$
 		    consumeDims();  
 			break;
  
-     case 526 : if (DEBUG) { System.out.println("OneDimLoop ::= LBRACKET RBRACKET"); }  //$NON-NLS-1$
+     case 528 : if (DEBUG) { System.out.println("OneDimLoop ::= LBRACKET RBRACKET"); }  //$NON-NLS-1$
 		    consumeOneDimLoop(false);  
 			break;
  
-     case 527 : if (DEBUG) { System.out.println("OneDimLoop ::= TypeAnnotations LBRACKET RBRACKET"); }  //$NON-NLS-1$
+     case 529 : if (DEBUG) { System.out.println("OneDimLoop ::= TypeAnnotations LBRACKET RBRACKET"); }  //$NON-NLS-1$
 		    consumeOneDimLoop(true);  
 			break;
  
-    case 528 : if (DEBUG) { System.out.println("FieldAccess ::= Primary DOT Identifier"); }  //$NON-NLS-1$
+    case 530 : if (DEBUG) { System.out.println("FieldAccess ::= Primary DOT Identifier"); }  //$NON-NLS-1$
 		    consumeFieldAccess(false);  
 			break;
  
-    case 529 : if (DEBUG) { System.out.println("FieldAccess ::= super DOT Identifier"); }  //$NON-NLS-1$
+    case 531 : if (DEBUG) { System.out.println("FieldAccess ::= super DOT Identifier"); }  //$NON-NLS-1$
 		    consumeFieldAccess(true);  
 			break;
  
-    case 530 : if (DEBUG) { System.out.println("FieldAccess ::= QualifiedSuperReceiver DOT Identifier"); }  //$NON-NLS-1$
+    case 532 : if (DEBUG) { System.out.println("FieldAccess ::= QualifiedSuperReceiver DOT Identifier"); }  //$NON-NLS-1$
 		    consumeFieldAccess(false);  
 			break;
  
-    case 531 : if (DEBUG) { System.out.println("MethodInvocation ::= Name LPAREN ArgumentListopt RPAREN"); }  //$NON-NLS-1$
+    case 533 : if (DEBUG) { System.out.println("MethodInvocation ::= Name LPAREN ArgumentListopt RPAREN"); }  //$NON-NLS-1$
 		    consumeMethodInvocationName();  
 			break;
  
-    case 532 : if (DEBUG) { System.out.println("MethodInvocation ::= Name DOT OnlyTypeArguments..."); }  //$NON-NLS-1$
+    case 534 : if (DEBUG) { System.out.println("MethodInvocation ::= Name DOT OnlyTypeArguments..."); }  //$NON-NLS-1$
 		    consumeMethodInvocationNameWithTypeArguments();  
 			break;
  
-    case 533 : if (DEBUG) { System.out.println("MethodInvocation ::= Primary DOT OnlyTypeArguments..."); }  //$NON-NLS-1$
+    case 535 : if (DEBUG) { System.out.println("MethodInvocation ::= Primary DOT OnlyTypeArguments..."); }  //$NON-NLS-1$
 		    consumeMethodInvocationPrimaryWithTypeArguments();  
 			break;
  
-    case 534 : if (DEBUG) { System.out.println("MethodInvocation ::= Primary DOT Identifier LPAREN..."); }  //$NON-NLS-1$
+    case 536 : if (DEBUG) { System.out.println("MethodInvocation ::= Primary DOT Identifier LPAREN..."); }  //$NON-NLS-1$
 		    consumeMethodInvocationPrimary();  
 			break;
  
-    case 535 : if (DEBUG) { System.out.println("MethodInvocation ::= QualifiedSuperReceiver DOT..."); }  //$NON-NLS-1$
+    case 537 : if (DEBUG) { System.out.println("MethodInvocation ::= QualifiedSuperReceiver DOT..."); }  //$NON-NLS-1$
 		    consumeMethodInvocationPrimary();  
 			break;
  
-    case 536 : if (DEBUG) { System.out.println("MethodInvocation ::= QualifiedSuperReceiver DOT..."); }  //$NON-NLS-1$
+    case 538 : if (DEBUG) { System.out.println("MethodInvocation ::= QualifiedSuperReceiver DOT..."); }  //$NON-NLS-1$
 		    consumeMethodInvocationPrimaryWithTypeArguments();  
 			break;
  
-    case 537 : if (DEBUG) { System.out.println("MethodInvocation ::= super DOT OnlyTypeArguments..."); }  //$NON-NLS-1$
+    case 539 : if (DEBUG) { System.out.println("MethodInvocation ::= super DOT OnlyTypeArguments..."); }  //$NON-NLS-1$
 		    consumeMethodInvocationSuperWithTypeArguments();  
 			break;
  
-    case 538 : if (DEBUG) { System.out.println("MethodInvocation ::= super DOT Identifier LPAREN..."); }  //$NON-NLS-1$
+    case 540 : if (DEBUG) { System.out.println("MethodInvocation ::= super DOT Identifier LPAREN..."); }  //$NON-NLS-1$
 		    consumeMethodInvocationSuper();  
 			break;
  
-    case 539 : if (DEBUG) { System.out.println("ArrayAccess ::= Name LBRACKET Expression RBRACKET"); }  //$NON-NLS-1$
+    case 541 : if (DEBUG) { System.out.println("ArrayAccess ::= Name LBRACKET Expression RBRACKET"); }  //$NON-NLS-1$
 		    consumeArrayAccess(true);  
 			break;
  
-    case 540 : if (DEBUG) { System.out.println("ArrayAccess ::= PrimaryNoNewArray LBRACKET Expression..."); }  //$NON-NLS-1$
+    case 542 : if (DEBUG) { System.out.println("ArrayAccess ::= PrimaryNoNewArray LBRACKET Expression..."); }  //$NON-NLS-1$
 		    consumeArrayAccess(false);  
 			break;
  
-    case 541 : if (DEBUG) { System.out.println("ArrayAccess ::= ArrayCreationWithArrayInitializer..."); }  //$NON-NLS-1$
+    case 543 : if (DEBUG) { System.out.println("ArrayAccess ::= ArrayCreationWithArrayInitializer..."); }  //$NON-NLS-1$
 		    consumeArrayAccess(false);  
 			break;
  
-    case 543 : if (DEBUG) { System.out.println("PostfixExpression ::= Name"); }  //$NON-NLS-1$
+    case 545 : if (DEBUG) { System.out.println("PostfixExpression ::= Name"); }  //$NON-NLS-1$
 		    consumePostfixExpression();  
 			break;
  
-    case 546 : if (DEBUG) { System.out.println("PostIncrementExpression ::= PostfixExpression PLUS_PLUS"); }  //$NON-NLS-1$
+    case 548 : if (DEBUG) { System.out.println("PostIncrementExpression ::= PostfixExpression PLUS_PLUS"); }  //$NON-NLS-1$
 		    consumeUnaryExpression(OperatorIds.PLUS,true);  
 			break;
  
-    case 547 : if (DEBUG) { System.out.println("PostDecrementExpression ::= PostfixExpression..."); }  //$NON-NLS-1$
+    case 549 : if (DEBUG) { System.out.println("PostDecrementExpression ::= PostfixExpression..."); }  //$NON-NLS-1$
 		    consumeUnaryExpression(OperatorIds.MINUS,true);  
 			break;
  
-    case 548 : if (DEBUG) { System.out.println("PushPosition ::="); }  //$NON-NLS-1$
+    case 550 : if (DEBUG) { System.out.println("PushPosition ::="); }  //$NON-NLS-1$
 		    consumePushPosition();  
 			break;
  
-    case 551 : if (DEBUG) { System.out.println("UnaryExpression ::= PLUS PushPosition UnaryExpression"); }  //$NON-NLS-1$
+    case 553 : if (DEBUG) { System.out.println("UnaryExpression ::= PLUS PushPosition UnaryExpression"); }  //$NON-NLS-1$
 		    consumeUnaryExpression(OperatorIds.PLUS);  
 			break;
  
-    case 552 : if (DEBUG) { System.out.println("UnaryExpression ::= MINUS PushPosition UnaryExpression"); }  //$NON-NLS-1$
+    case 554 : if (DEBUG) { System.out.println("UnaryExpression ::= MINUS PushPosition UnaryExpression"); }  //$NON-NLS-1$
 		    consumeUnaryExpression(OperatorIds.MINUS);  
 			break;
  
-    case 554 : if (DEBUG) { System.out.println("PreIncrementExpression ::= PLUS_PLUS PushPosition..."); }  //$NON-NLS-1$
+    case 556 : if (DEBUG) { System.out.println("PreIncrementExpression ::= PLUS_PLUS PushPosition..."); }  //$NON-NLS-1$
 		    consumeUnaryExpression(OperatorIds.PLUS,false);  
 			break;
  
-    case 555 : if (DEBUG) { System.out.println("PreDecrementExpression ::= MINUS_MINUS PushPosition..."); }  //$NON-NLS-1$
+    case 557 : if (DEBUG) { System.out.println("PreDecrementExpression ::= MINUS_MINUS PushPosition..."); }  //$NON-NLS-1$
 		    consumeUnaryExpression(OperatorIds.MINUS,false);  
 			break;
  
-    case 557 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus ::= TWIDDLE PushPosition..."); }  //$NON-NLS-1$
+    case 559 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus ::= TWIDDLE PushPosition..."); }  //$NON-NLS-1$
 		    consumeUnaryExpression(OperatorIds.TWIDDLE);  
 			break;
  
-    case 558 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus ::= NOT PushPosition..."); }  //$NON-NLS-1$
+    case 560 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus ::= NOT PushPosition..."); }  //$NON-NLS-1$
 		    consumeUnaryExpression(OperatorIds.NOT);  
 			break;
  
-    case 560 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN PrimitiveType Dimsopt..."); }  //$NON-NLS-1$
+    case 562 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN PrimitiveType Dimsopt..."); }  //$NON-NLS-1$
 		    consumeCastExpressionWithPrimitiveType();  
 			break;
  
-    case 561 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name..."); }  //$NON-NLS-1$
+    case 563 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name..."); }  //$NON-NLS-1$
 		    consumeCastExpressionWithGenericsArray();  
 			break;
  
-    case 562 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name..."); }  //$NON-NLS-1$
+    case 564 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name..."); }  //$NON-NLS-1$
 		    consumeCastExpressionWithQualifiedGenericsArray();  
 			break;
  
-    case 563 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name PushRPAREN..."); }  //$NON-NLS-1$
+    case 565 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name PushRPAREN..."); }  //$NON-NLS-1$
 		    consumeCastExpressionLL1();  
 			break;
  
-    case 564 : if (DEBUG) { System.out.println("CastExpression ::= BeginIntersectionCast PushLPAREN..."); }  //$NON-NLS-1$
+    case 566 : if (DEBUG) { System.out.println("CastExpression ::= BeginIntersectionCast PushLPAREN..."); }  //$NON-NLS-1$
 		    consumeCastExpressionLL1WithBounds();  
 			break;
  
-    case 565 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name Dims..."); }  //$NON-NLS-1$
+    case 567 : if (DEBUG) { System.out.println("CastExpression ::= PushLPAREN Name Dims..."); }  //$NON-NLS-1$
 		    consumeCastExpressionWithNameArray();  
 			break;
  
-    case 566 : if (DEBUG) { System.out.println("AdditionalBoundsListOpt ::="); }  //$NON-NLS-1$
+    case 568 : if (DEBUG) { System.out.println("AdditionalBoundsListOpt ::="); }  //$NON-NLS-1$
 		    consumeZeroAdditionalBounds();  
 			break;
  
-    case 570 : if (DEBUG) { System.out.println("OnlyTypeArgumentsForCastExpression ::= OnlyTypeArguments"); }  //$NON-NLS-1$
+    case 572 : if (DEBUG) { System.out.println("OnlyTypeArgumentsForCastExpression ::= OnlyTypeArguments"); }  //$NON-NLS-1$
 		    consumeOnlyTypeArgumentsForCastExpression();  
 			break;
  
-    case 571 : if (DEBUG) { System.out.println("InsideCastExpression ::="); }  //$NON-NLS-1$
+    case 573 : if (DEBUG) { System.out.println("InsideCastExpression ::="); }  //$NON-NLS-1$
 		    consumeInsideCastExpression();  
 			break;
  
-    case 572 : if (DEBUG) { System.out.println("InsideCastExpressionLL1 ::="); }  //$NON-NLS-1$
+    case 574 : if (DEBUG) { System.out.println("InsideCastExpressionLL1 ::="); }  //$NON-NLS-1$
 		    consumeInsideCastExpressionLL1();  
 			break;
  
-    case 573 : if (DEBUG) { System.out.println("InsideCastExpressionLL1WithBounds ::="); }  //$NON-NLS-1$
+    case 575 : if (DEBUG) { System.out.println("InsideCastExpressionLL1WithBounds ::="); }  //$NON-NLS-1$
 		    consumeInsideCastExpressionLL1WithBounds ();  
 			break;
  
-    case 574 : if (DEBUG) { System.out.println("InsideCastExpressionWithQualifiedGenerics ::="); }  //$NON-NLS-1$
+    case 576 : if (DEBUG) { System.out.println("InsideCastExpressionWithQualifiedGenerics ::="); }  //$NON-NLS-1$
 		    consumeInsideCastExpressionWithQualifiedGenerics();  
 			break;
  
-    case 576 : if (DEBUG) { System.out.println("MultiplicativeExpression ::= MultiplicativeExpression..."); }  //$NON-NLS-1$
+    case 578 : if (DEBUG) { System.out.println("MultiplicativeExpression ::= MultiplicativeExpression..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.MULTIPLY);  
 			break;
  
-    case 577 : if (DEBUG) { System.out.println("MultiplicativeExpression ::= MultiplicativeExpression..."); }  //$NON-NLS-1$
+    case 579 : if (DEBUG) { System.out.println("MultiplicativeExpression ::= MultiplicativeExpression..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.DIVIDE);  
 			break;
  
-    case 578 : if (DEBUG) { System.out.println("MultiplicativeExpression ::= MultiplicativeExpression..."); }  //$NON-NLS-1$
+    case 580 : if (DEBUG) { System.out.println("MultiplicativeExpression ::= MultiplicativeExpression..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.REMAINDER);  
 			break;
  
-    case 580 : if (DEBUG) { System.out.println("AdditiveExpression ::= AdditiveExpression PLUS..."); }  //$NON-NLS-1$
+    case 582 : if (DEBUG) { System.out.println("AdditiveExpression ::= AdditiveExpression PLUS..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.PLUS);  
 			break;
  
-    case 581 : if (DEBUG) { System.out.println("AdditiveExpression ::= AdditiveExpression MINUS..."); }  //$NON-NLS-1$
+    case 583 : if (DEBUG) { System.out.println("AdditiveExpression ::= AdditiveExpression MINUS..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.MINUS);  
 			break;
  
-    case 583 : if (DEBUG) { System.out.println("ShiftExpression ::= ShiftExpression LEFT_SHIFT..."); }  //$NON-NLS-1$
+    case 585 : if (DEBUG) { System.out.println("ShiftExpression ::= ShiftExpression LEFT_SHIFT..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.LEFT_SHIFT);  
 			break;
  
-    case 584 : if (DEBUG) { System.out.println("ShiftExpression ::= ShiftExpression RIGHT_SHIFT..."); }  //$NON-NLS-1$
+    case 586 : if (DEBUG) { System.out.println("ShiftExpression ::= ShiftExpression RIGHT_SHIFT..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.RIGHT_SHIFT);  
 			break;
  
-    case 585 : if (DEBUG) { System.out.println("ShiftExpression ::= ShiftExpression UNSIGNED_RIGHT_SHIFT"); }  //$NON-NLS-1$
+    case 587 : if (DEBUG) { System.out.println("ShiftExpression ::= ShiftExpression UNSIGNED_RIGHT_SHIFT"); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.UNSIGNED_RIGHT_SHIFT);  
 			break;
  
-    case 587 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression LESS..."); }  //$NON-NLS-1$
+    case 589 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression LESS..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.LESS);  
 			break;
  
-    case 588 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression GREATER..."); }  //$NON-NLS-1$
+    case 590 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression GREATER..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.GREATER);  
 			break;
  
-    case 589 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression LESS_EQUAL"); }  //$NON-NLS-1$
+    case 591 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression LESS_EQUAL"); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.LESS_EQUAL);  
 			break;
  
-    case 590 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression..."); }  //$NON-NLS-1$
+    case 592 : if (DEBUG) { System.out.println("RelationalExpression ::= RelationalExpression..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.GREATER_EQUAL);  
 			break;
  
-    case 592 : if (DEBUG) { System.out.println("InstanceofExpression ::= InstanceofExpression instanceof"); }  //$NON-NLS-1$
+    case 594 : if (DEBUG) { System.out.println("InstanceofExpression ::= InstanceofExpression instanceof"); }  //$NON-NLS-1$
 		    consumeInstanceOfExpression();  
 			break;
  
-    case 594 : if (DEBUG) { System.out.println("EqualityExpression ::= EqualityExpression EQUAL_EQUAL..."); }  //$NON-NLS-1$
+    case 596 : if (DEBUG) { System.out.println("EqualityExpression ::= EqualityExpression EQUAL_EQUAL..."); }  //$NON-NLS-1$
 		    consumeEqualityExpression(OperatorIds.EQUAL_EQUAL);  
 			break;
  
-    case 595 : if (DEBUG) { System.out.println("EqualityExpression ::= EqualityExpression NOT_EQUAL..."); }  //$NON-NLS-1$
+    case 597 : if (DEBUG) { System.out.println("EqualityExpression ::= EqualityExpression NOT_EQUAL..."); }  //$NON-NLS-1$
 		    consumeEqualityExpression(OperatorIds.NOT_EQUAL);  
 			break;
  
-    case 597 : if (DEBUG) { System.out.println("AndExpression ::= AndExpression AND EqualityExpression"); }  //$NON-NLS-1$
+    case 599 : if (DEBUG) { System.out.println("AndExpression ::= AndExpression AND EqualityExpression"); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.AND);  
 			break;
  
-    case 599 : if (DEBUG) { System.out.println("ExclusiveOrExpression ::= ExclusiveOrExpression XOR..."); }  //$NON-NLS-1$
+    case 601 : if (DEBUG) { System.out.println("ExclusiveOrExpression ::= ExclusiveOrExpression XOR..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.XOR);  
 			break;
  
-    case 601 : if (DEBUG) { System.out.println("InclusiveOrExpression ::= InclusiveOrExpression OR..."); }  //$NON-NLS-1$
+    case 603 : if (DEBUG) { System.out.println("InclusiveOrExpression ::= InclusiveOrExpression OR..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.OR);  
 			break;
  
-    case 603 : if (DEBUG) { System.out.println("ConditionalAndExpression ::= ConditionalAndExpression..."); }  //$NON-NLS-1$
+    case 605 : if (DEBUG) { System.out.println("ConditionalAndExpression ::= ConditionalAndExpression..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.AND_AND);  
 			break;
  
-    case 605 : if (DEBUG) { System.out.println("ConditionalOrExpression ::= ConditionalOrExpression..."); }  //$NON-NLS-1$
+    case 607 : if (DEBUG) { System.out.println("ConditionalOrExpression ::= ConditionalOrExpression..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.OR_OR);  
 			break;
  
-    case 607 : if (DEBUG) { System.out.println("ConditionalExpression ::= ConditionalOrExpression..."); }  //$NON-NLS-1$
+    case 609 : if (DEBUG) { System.out.println("ConditionalExpression ::= ConditionalOrExpression..."); }  //$NON-NLS-1$
 		    consumeConditionalExpression(OperatorIds.QUESTIONCOLON) ;  
 			break;
  
-    case 610 : if (DEBUG) { System.out.println("Assignment ::= PostfixExpression AssignmentOperator..."); }  //$NON-NLS-1$
+    case 612 : if (DEBUG) { System.out.println("Assignment ::= PostfixExpression AssignmentOperator..."); }  //$NON-NLS-1$
 		    consumeAssignment();  
 			break;
  
-    case 612 : if (DEBUG) { System.out.println("Assignment ::= InvalidArrayInitializerAssignement"); }  //$NON-NLS-1$
+    case 614 : if (DEBUG) { System.out.println("Assignment ::= InvalidArrayInitializerAssignement"); }  //$NON-NLS-1$
 		    ignoreExpressionAssignment(); 
 			break;
  
-    case 613 : if (DEBUG) { System.out.println("AssignmentOperator ::= EQUAL"); }  //$NON-NLS-1$
+    case 615 : if (DEBUG) { System.out.println("AssignmentOperator ::= EQUAL"); }  //$NON-NLS-1$
 		    consumeAssignmentOperator(EQUAL);  
 			break;
  
-    case 614 : if (DEBUG) { System.out.println("AssignmentOperator ::= MULTIPLY_EQUAL"); }  //$NON-NLS-1$
+    case 616 : if (DEBUG) { System.out.println("AssignmentOperator ::= MULTIPLY_EQUAL"); }  //$NON-NLS-1$
 		    consumeAssignmentOperator(MULTIPLY);  
 			break;
  
-    case 615 : if (DEBUG) { System.out.println("AssignmentOperator ::= DIVIDE_EQUAL"); }  //$NON-NLS-1$
+    case 617 : if (DEBUG) { System.out.println("AssignmentOperator ::= DIVIDE_EQUAL"); }  //$NON-NLS-1$
 		    consumeAssignmentOperator(DIVIDE);  
 			break;
  
-    case 616 : if (DEBUG) { System.out.println("AssignmentOperator ::= REMAINDER_EQUAL"); }  //$NON-NLS-1$
+    case 618 : if (DEBUG) { System.out.println("AssignmentOperator ::= REMAINDER_EQUAL"); }  //$NON-NLS-1$
 		    consumeAssignmentOperator(REMAINDER);  
 			break;
  
-    case 617 : if (DEBUG) { System.out.println("AssignmentOperator ::= PLUS_EQUAL"); }  //$NON-NLS-1$
+    case 619 : if (DEBUG) { System.out.println("AssignmentOperator ::= PLUS_EQUAL"); }  //$NON-NLS-1$
 		    consumeAssignmentOperator(PLUS);  
 			break;
  
-    case 618 : if (DEBUG) { System.out.println("AssignmentOperator ::= MINUS_EQUAL"); }  //$NON-NLS-1$
+    case 620 : if (DEBUG) { System.out.println("AssignmentOperator ::= MINUS_EQUAL"); }  //$NON-NLS-1$
 		    consumeAssignmentOperator(MINUS);  
 			break;
  
-    case 619 : if (DEBUG) { System.out.println("AssignmentOperator ::= LEFT_SHIFT_EQUAL"); }  //$NON-NLS-1$
+    case 621 : if (DEBUG) { System.out.println("AssignmentOperator ::= LEFT_SHIFT_EQUAL"); }  //$NON-NLS-1$
 		    consumeAssignmentOperator(LEFT_SHIFT);  
 			break;
  
-    case 620 : if (DEBUG) { System.out.println("AssignmentOperator ::= RIGHT_SHIFT_EQUAL"); }  //$NON-NLS-1$
+    case 622 : if (DEBUG) { System.out.println("AssignmentOperator ::= RIGHT_SHIFT_EQUAL"); }  //$NON-NLS-1$
 		    consumeAssignmentOperator(RIGHT_SHIFT);  
 			break;
  
-    case 621 : if (DEBUG) { System.out.println("AssignmentOperator ::= UNSIGNED_RIGHT_SHIFT_EQUAL"); }  //$NON-NLS-1$
+    case 623 : if (DEBUG) { System.out.println("AssignmentOperator ::= UNSIGNED_RIGHT_SHIFT_EQUAL"); }  //$NON-NLS-1$
 		    consumeAssignmentOperator(UNSIGNED_RIGHT_SHIFT);  
 			break;
  
-    case 622 : if (DEBUG) { System.out.println("AssignmentOperator ::= AND_EQUAL"); }  //$NON-NLS-1$
+    case 624 : if (DEBUG) { System.out.println("AssignmentOperator ::= AND_EQUAL"); }  //$NON-NLS-1$
 		    consumeAssignmentOperator(AND);  
 			break;
  
-    case 623 : if (DEBUG) { System.out.println("AssignmentOperator ::= XOR_EQUAL"); }  //$NON-NLS-1$
+    case 625 : if (DEBUG) { System.out.println("AssignmentOperator ::= XOR_EQUAL"); }  //$NON-NLS-1$
 		    consumeAssignmentOperator(XOR);  
 			break;
  
-    case 624 : if (DEBUG) { System.out.println("AssignmentOperator ::= OR_EQUAL"); }  //$NON-NLS-1$
+    case 626 : if (DEBUG) { System.out.println("AssignmentOperator ::= OR_EQUAL"); }  //$NON-NLS-1$
 		    consumeAssignmentOperator(OR);  
 			break;
  
-    case 625 : if (DEBUG) { System.out.println("Expression ::= AssignmentExpression"); }  //$NON-NLS-1$
+    case 627 : if (DEBUG) { System.out.println("Expression ::= AssignmentExpression"); }  //$NON-NLS-1$
 		    consumeExpression();  
 			break;
  
-    case 628 : if (DEBUG) { System.out.println("Expressionopt ::="); }  //$NON-NLS-1$
+    case 630 : if (DEBUG) { System.out.println("Expressionopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyExpression();  
 			break;
  
-    case 631 : if (DEBUG) { System.out.println("ConstantExpressions ::= ConstantExpressions COMMA..."); }  //$NON-NLS-1$
+    case 633 : if (DEBUG) { System.out.println("ConstantExpressions ::= ConstantExpressions COMMA..."); }  //$NON-NLS-1$
 		    consumeConstantExpressions();  
 			break;
  
-    case 635 : if (DEBUG) { System.out.println("ClassBodyDeclarationsopt ::="); }  //$NON-NLS-1$
+    case 637 : if (DEBUG) { System.out.println("ClassBodyDeclarationsopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyClassBodyDeclarationsopt();  
 			break;
  
-    case 636 : if (DEBUG) { System.out.println("ClassBodyDeclarationsopt ::= NestedType..."); }  //$NON-NLS-1$
+    case 638 : if (DEBUG) { System.out.println("ClassBodyDeclarationsopt ::= NestedType..."); }  //$NON-NLS-1$
 		    consumeClassBodyDeclarationsopt();  
 			break;
  
-     case 637 : if (DEBUG) { System.out.println("Modifiersopt ::="); }  //$NON-NLS-1$
+     case 639 : if (DEBUG) { System.out.println("Modifiersopt ::="); }  //$NON-NLS-1$
 		    consumeDefaultModifiers();  
 			break;
  
-    case 638 : if (DEBUG) { System.out.println("Modifiersopt ::= Modifiers"); }  //$NON-NLS-1$
+    case 640 : if (DEBUG) { System.out.println("Modifiersopt ::= Modifiers"); }  //$NON-NLS-1$
 		    consumeModifiers();  
 			break;
  
-    case 639 : if (DEBUG) { System.out.println("BlockStatementsopt ::="); }  //$NON-NLS-1$
+    case 641 : if (DEBUG) { System.out.println("BlockStatementsopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyBlockStatementsopt();  
 			break;
  
-     case 641 : if (DEBUG) { System.out.println("Dimsopt ::="); }  //$NON-NLS-1$
+     case 643 : if (DEBUG) { System.out.println("Dimsopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyDimsopt();  
 			break;
  
-     case 643 : if (DEBUG) { System.out.println("ArgumentListopt ::="); }  //$NON-NLS-1$
+     case 645 : if (DEBUG) { System.out.println("ArgumentListopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyArgumentListopt();  
 			break;
  
-    case 647 : if (DEBUG) { System.out.println("FormalParameterListopt ::="); }  //$NON-NLS-1$
+    case 649 : if (DEBUG) { System.out.println("FormalParameterListopt ::="); }  //$NON-NLS-1$
 		    consumeFormalParameterListopt();  
 			break;
  
-     case 651 : if (DEBUG) { System.out.println("InterfaceMemberDeclarationsopt ::="); }  //$NON-NLS-1$
+     case 653 : if (DEBUG) { System.out.println("InterfaceMemberDeclarationsopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyInterfaceMemberDeclarationsopt();  
 			break;
  
-     case 652 : if (DEBUG) { System.out.println("InterfaceMemberDeclarationsopt ::= NestedType..."); }  //$NON-NLS-1$
+     case 654 : if (DEBUG) { System.out.println("InterfaceMemberDeclarationsopt ::= NestedType..."); }  //$NON-NLS-1$
 		    consumeInterfaceMemberDeclarationsopt();  
 			break;
  
-    case 653 : if (DEBUG) { System.out.println("NestedType ::="); }  //$NON-NLS-1$
+    case 655 : if (DEBUG) { System.out.println("NestedType ::="); }  //$NON-NLS-1$
 		    consumeNestedType();  
 			break;
 
-     case 654 : if (DEBUG) { System.out.println("ForInitopt ::="); }  //$NON-NLS-1$
+     case 656 : if (DEBUG) { System.out.println("ForInitopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyForInitopt();  
 			break;
  
-     case 656 : if (DEBUG) { System.out.println("ForUpdateopt ::="); }  //$NON-NLS-1$
+     case 658 : if (DEBUG) { System.out.println("ForUpdateopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyForUpdateopt();  
 			break;
  
-     case 660 : if (DEBUG) { System.out.println("Catchesopt ::="); }  //$NON-NLS-1$
+     case 662 : if (DEBUG) { System.out.println("Catchesopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyCatchesopt();  
 			break;
  
-     case 662 : if (DEBUG) { System.out.println("EnumDeclaration ::= EnumHeader EnumBody"); }  //$NON-NLS-1$
+     case 664 : if (DEBUG) { System.out.println("EnumDeclaration ::= EnumHeader EnumBody"); }  //$NON-NLS-1$
 		    consumeEnumDeclaration();  
 			break;
  
-     case 663 : if (DEBUG) { System.out.println("EnumHeader ::= EnumHeaderName ClassHeaderImplementsopt"); }  //$NON-NLS-1$
+     case 665 : if (DEBUG) { System.out.println("EnumHeader ::= EnumHeaderName ClassHeaderImplementsopt"); }  //$NON-NLS-1$
 		    consumeEnumHeader();  
 			break;
  
-     case 664 : if (DEBUG) { System.out.println("EnumHeaderName ::= Modifiersopt enum Identifier"); }  //$NON-NLS-1$
+     case 666 : if (DEBUG) { System.out.println("EnumHeaderName ::= Modifiersopt enum Identifier"); }  //$NON-NLS-1$
 		    consumeEnumHeaderName();  
 			break;
  
-     case 665 : if (DEBUG) { System.out.println("EnumHeaderName ::= Modifiersopt enum Identifier..."); }  //$NON-NLS-1$
+     case 667 : if (DEBUG) { System.out.println("EnumHeaderName ::= Modifiersopt enum Identifier..."); }  //$NON-NLS-1$
 		    consumeEnumHeaderNameWithTypeParameters();  
 			break;
  
-     case 666 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE EnumBodyDeclarationsopt RBRACE"); }  //$NON-NLS-1$
+     case 668 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE EnumBodyDeclarationsopt RBRACE"); }  //$NON-NLS-1$
 		    consumeEnumBodyNoConstants();  
 			break;
  
-     case 667 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE COMMA EnumBodyDeclarationsopt..."); }  //$NON-NLS-1$
+     case 669 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE COMMA EnumBodyDeclarationsopt..."); }  //$NON-NLS-1$
 		    consumeEnumBodyNoConstants();  
 			break;
  
-     case 668 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE EnumConstants COMMA..."); }  //$NON-NLS-1$
+     case 670 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE EnumConstants COMMA..."); }  //$NON-NLS-1$
 		    consumeEnumBodyWithConstants();  
 			break;
  
-     case 669 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE EnumConstants..."); }  //$NON-NLS-1$
+     case 671 : if (DEBUG) { System.out.println("EnumBody ::= LBRACE EnumConstants..."); }  //$NON-NLS-1$
 		    consumeEnumBodyWithConstants();  
 			break;
  
-    case 671 : if (DEBUG) { System.out.println("EnumConstants ::= EnumConstants COMMA EnumConstant"); }  //$NON-NLS-1$
+    case 673 : if (DEBUG) { System.out.println("EnumConstants ::= EnumConstants COMMA EnumConstant"); }  //$NON-NLS-1$
 		    consumeEnumConstants();  
 			break;
  
-    case 672 : if (DEBUG) { System.out.println("EnumConstantHeaderName ::= Modifiersopt Identifier"); }  //$NON-NLS-1$
+    case 674 : if (DEBUG) { System.out.println("EnumConstantHeaderName ::= Modifiersopt Identifier"); }  //$NON-NLS-1$
 		    consumeEnumConstantHeaderName();  
 			break;
  
-    case 673 : if (DEBUG) { System.out.println("EnumConstantHeader ::= EnumConstantHeaderName..."); }  //$NON-NLS-1$
+    case 675 : if (DEBUG) { System.out.println("EnumConstantHeader ::= EnumConstantHeaderName..."); }  //$NON-NLS-1$
 		    consumeEnumConstantHeader();  
 			break;
  
-    case 674 : if (DEBUG) { System.out.println("EnumConstant ::= EnumConstantHeader ForceNoDiet..."); }  //$NON-NLS-1$
+    case 676 : if (DEBUG) { System.out.println("EnumConstant ::= EnumConstantHeader ForceNoDiet..."); }  //$NON-NLS-1$
 		    consumeEnumConstantWithClassBody();  
 			break;
  
-    case 675 : if (DEBUG) { System.out.println("EnumConstant ::= EnumConstantHeader"); }  //$NON-NLS-1$
+    case 677 : if (DEBUG) { System.out.println("EnumConstant ::= EnumConstantHeader"); }  //$NON-NLS-1$
 		    consumeEnumConstantNoClassBody();  
 			break;
  
-    case 676 : if (DEBUG) { System.out.println("Arguments ::= LPAREN ArgumentListopt RPAREN"); }  //$NON-NLS-1$
+    case 678 : if (DEBUG) { System.out.println("Arguments ::= LPAREN ArgumentListopt RPAREN"); }  //$NON-NLS-1$
 		    consumeArguments();  
 			break;
  
-    case 677 : if (DEBUG) { System.out.println("Argumentsopt ::="); }  //$NON-NLS-1$
+    case 679 : if (DEBUG) { System.out.println("Argumentsopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyArguments();  
 			break;
  
-    case 679 : if (DEBUG) { System.out.println("EnumDeclarations ::= SEMICOLON ClassBodyDeclarationsopt"); }  //$NON-NLS-1$
+    case 681 : if (DEBUG) { System.out.println("EnumDeclarations ::= SEMICOLON ClassBodyDeclarationsopt"); }  //$NON-NLS-1$
 		    consumeEnumDeclarations();  
 			break;
  
-    case 680 : if (DEBUG) { System.out.println("EnumBodyDeclarationsopt ::="); }  //$NON-NLS-1$
+    case 682 : if (DEBUG) { System.out.println("EnumBodyDeclarationsopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyEnumDeclarations();  
 			break;
  
-    case 682 : if (DEBUG) { System.out.println("EnhancedForStatement ::= EnhancedForStatementHeader..."); }  //$NON-NLS-1$
+    case 684 : if (DEBUG) { System.out.println("EnhancedForStatement ::= EnhancedForStatementHeader..."); }  //$NON-NLS-1$
 		    consumeEnhancedForStatement();  
 			break;
  
-    case 683 : if (DEBUG) { System.out.println("EnhancedForStatementNoShortIf ::=..."); }  //$NON-NLS-1$
+    case 685 : if (DEBUG) { System.out.println("EnhancedForStatementNoShortIf ::=..."); }  //$NON-NLS-1$
 		    consumeEnhancedForStatement();  
 			break;
  
-    case 684 : if (DEBUG) { System.out.println("EnhancedForStatementHeaderInit ::= for LPAREN Type..."); }  //$NON-NLS-1$
+    case 686 : if (DEBUG) { System.out.println("EnhancedForStatementHeaderInit ::= for LPAREN Type..."); }  //$NON-NLS-1$
 		    consumeEnhancedForStatementHeaderInit(false);  
 			break;
  
-    case 685 : if (DEBUG) { System.out.println("EnhancedForStatementHeaderInit ::= for LPAREN Modifiers"); }  //$NON-NLS-1$
+    case 687 : if (DEBUG) { System.out.println("EnhancedForStatementHeaderInit ::= for LPAREN Modifiers"); }  //$NON-NLS-1$
 		    consumeEnhancedForStatementHeaderInit(true);  
 			break;
  
-    case 686 : if (DEBUG) { System.out.println("EnhancedForStatementHeader ::=..."); }  //$NON-NLS-1$
+    case 688 : if (DEBUG) { System.out.println("EnhancedForStatementHeader ::=..."); }  //$NON-NLS-1$
 		    consumeEnhancedForStatementHeader();  
 			break;
  
-    case 687 : if (DEBUG) { System.out.println("SingleStaticImportDeclaration ::=..."); }  //$NON-NLS-1$
+    case 689 : if (DEBUG) { System.out.println("SingleStaticImportDeclaration ::=..."); }  //$NON-NLS-1$
 		    consumeImportDeclaration();  
 			break;
  
-    case 688 : if (DEBUG) { System.out.println("SingleStaticImportDeclarationName ::= import static Name"); }  //$NON-NLS-1$
+    case 690 : if (DEBUG) { System.out.println("SingleStaticImportDeclarationName ::= import static Name"); }  //$NON-NLS-1$
 		    consumeSingleStaticImportDeclarationName();  
 			break;
  
-    case 689 : if (DEBUG) { System.out.println("StaticImportOnDemandDeclaration ::=..."); }  //$NON-NLS-1$
+    case 691 : if (DEBUG) { System.out.println("StaticImportOnDemandDeclaration ::=..."); }  //$NON-NLS-1$
 		    consumeImportDeclaration();  
 			break;
  
-    case 690 : if (DEBUG) { System.out.println("StaticImportOnDemandDeclarationName ::= import static..."); }  //$NON-NLS-1$
+    case 692 : if (DEBUG) { System.out.println("StaticImportOnDemandDeclarationName ::= import static..."); }  //$NON-NLS-1$
 		    consumeStaticImportOnDemandDeclarationName();  
 			break;
  
-    case 691 : if (DEBUG) { System.out.println("TypeArguments ::= LESS TypeArgumentList1"); }  //$NON-NLS-1$
+    case 693 : if (DEBUG) { System.out.println("TypeArguments ::= LESS TypeArgumentList1"); }  //$NON-NLS-1$
 		    consumeTypeArguments();  
 			break;
  
-    case 692 : if (DEBUG) { System.out.println("OnlyTypeArguments ::= LESS TypeArgumentList1"); }  //$NON-NLS-1$
+    case 694 : if (DEBUG) { System.out.println("OnlyTypeArguments ::= LESS TypeArgumentList1"); }  //$NON-NLS-1$
 		    consumeOnlyTypeArguments();  
 			break;
  
-    case 694 : if (DEBUG) { System.out.println("TypeArgumentList1 ::= TypeArgumentList COMMA..."); }  //$NON-NLS-1$
+    case 696 : if (DEBUG) { System.out.println("TypeArgumentList1 ::= TypeArgumentList COMMA..."); }  //$NON-NLS-1$
 		    consumeTypeArgumentList1();  
 			break;
  
-    case 696 : if (DEBUG) { System.out.println("TypeArgumentList ::= TypeArgumentList COMMA TypeArgument"); }  //$NON-NLS-1$
+    case 698 : if (DEBUG) { System.out.println("TypeArgumentList ::= TypeArgumentList COMMA TypeArgument"); }  //$NON-NLS-1$
 		    consumeTypeArgumentList();  
 			break;
  
-    case 697 : if (DEBUG) { System.out.println("TypeArgument ::= ReferenceType"); }  //$NON-NLS-1$
+    case 699 : if (DEBUG) { System.out.println("TypeArgument ::= ReferenceType"); }  //$NON-NLS-1$
 		    consumeTypeArgument();  
 			break;
  
-    case 701 : if (DEBUG) { System.out.println("ReferenceType1 ::= ReferenceType GREATER"); }  //$NON-NLS-1$
+    case 703 : if (DEBUG) { System.out.println("ReferenceType1 ::= ReferenceType GREATER"); }  //$NON-NLS-1$
 		    consumeReferenceType1();  
 			break;
  
-    case 702 : if (DEBUG) { System.out.println("ReferenceType1 ::= ClassOrInterface LESS..."); }  //$NON-NLS-1$
+    case 704 : if (DEBUG) { System.out.println("ReferenceType1 ::= ClassOrInterface LESS..."); }  //$NON-NLS-1$
 		    consumeTypeArgumentReferenceType1();  
 			break;
  
-    case 704 : if (DEBUG) { System.out.println("TypeArgumentList2 ::= TypeArgumentList COMMA..."); }  //$NON-NLS-1$
+    case 706 : if (DEBUG) { System.out.println("TypeArgumentList2 ::= TypeArgumentList COMMA..."); }  //$NON-NLS-1$
 		    consumeTypeArgumentList2();  
 			break;
  
-    case 707 : if (DEBUG) { System.out.println("ReferenceType2 ::= ReferenceType RIGHT_SHIFT"); }  //$NON-NLS-1$
+    case 709 : if (DEBUG) { System.out.println("ReferenceType2 ::= ReferenceType RIGHT_SHIFT"); }  //$NON-NLS-1$
 		    consumeReferenceType2();  
 			break;
  
-    case 708 : if (DEBUG) { System.out.println("ReferenceType2 ::= ClassOrInterface LESS..."); }  //$NON-NLS-1$
+    case 710 : if (DEBUG) { System.out.println("ReferenceType2 ::= ClassOrInterface LESS..."); }  //$NON-NLS-1$
 		    consumeTypeArgumentReferenceType2();  
 			break;
  
-    case 710 : if (DEBUG) { System.out.println("TypeArgumentList3 ::= TypeArgumentList COMMA..."); }  //$NON-NLS-1$
+    case 712 : if (DEBUG) { System.out.println("TypeArgumentList3 ::= TypeArgumentList COMMA..."); }  //$NON-NLS-1$
 		    consumeTypeArgumentList3();  
 			break;
  
-    case 713 : if (DEBUG) { System.out.println("ReferenceType3 ::= ReferenceType UNSIGNED_RIGHT_SHIFT"); }  //$NON-NLS-1$
+    case 715 : if (DEBUG) { System.out.println("ReferenceType3 ::= ReferenceType UNSIGNED_RIGHT_SHIFT"); }  //$NON-NLS-1$
 		    consumeReferenceType3();  
 			break;
  
-    case 714 : if (DEBUG) { System.out.println("Wildcard ::= TypeAnnotationsopt QUESTION"); }  //$NON-NLS-1$
+    case 716 : if (DEBUG) { System.out.println("Wildcard ::= TypeAnnotationsopt QUESTION"); }  //$NON-NLS-1$
 		    consumeWildcard();  
 			break;
  
-    case 715 : if (DEBUG) { System.out.println("Wildcard ::= TypeAnnotationsopt QUESTION WildcardBounds"); }  //$NON-NLS-1$
+    case 717 : if (DEBUG) { System.out.println("Wildcard ::= TypeAnnotationsopt QUESTION WildcardBounds"); }  //$NON-NLS-1$
 		    consumeWildcardWithBounds();  
 			break;
  
-    case 716 : if (DEBUG) { System.out.println("WildcardBounds ::= extends ReferenceType"); }  //$NON-NLS-1$
+    case 718 : if (DEBUG) { System.out.println("WildcardBounds ::= extends ReferenceType"); }  //$NON-NLS-1$
 		    consumeWildcardBoundsExtends();  
 			break;
  
-    case 717 : if (DEBUG) { System.out.println("WildcardBounds ::= super ReferenceType"); }  //$NON-NLS-1$
+    case 719 : if (DEBUG) { System.out.println("WildcardBounds ::= super ReferenceType"); }  //$NON-NLS-1$
 		    consumeWildcardBoundsSuper();  
 			break;
  
-    case 718 : if (DEBUG) { System.out.println("Wildcard1 ::= TypeAnnotationsopt QUESTION GREATER"); }  //$NON-NLS-1$
+    case 720 : if (DEBUG) { System.out.println("Wildcard1 ::= TypeAnnotationsopt QUESTION GREATER"); }  //$NON-NLS-1$
 		    consumeWildcard1();  
 			break;
  
-    case 719 : if (DEBUG) { System.out.println("Wildcard1 ::= TypeAnnotationsopt QUESTION..."); }  //$NON-NLS-1$
+    case 721 : if (DEBUG) { System.out.println("Wildcard1 ::= TypeAnnotationsopt QUESTION..."); }  //$NON-NLS-1$
 		    consumeWildcard1WithBounds();  
 			break;
  
-    case 720 : if (DEBUG) { System.out.println("WildcardBounds1 ::= extends ReferenceType1"); }  //$NON-NLS-1$
+    case 722 : if (DEBUG) { System.out.println("WildcardBounds1 ::= extends ReferenceType1"); }  //$NON-NLS-1$
 		    consumeWildcardBounds1Extends();  
 			break;
  
-    case 721 : if (DEBUG) { System.out.println("WildcardBounds1 ::= super ReferenceType1"); }  //$NON-NLS-1$
+    case 723 : if (DEBUG) { System.out.println("WildcardBounds1 ::= super ReferenceType1"); }  //$NON-NLS-1$
 		    consumeWildcardBounds1Super();  
 			break;
  
-    case 722 : if (DEBUG) { System.out.println("Wildcard2 ::= TypeAnnotationsopt QUESTION RIGHT_SHIFT"); }  //$NON-NLS-1$
+    case 724 : if (DEBUG) { System.out.println("Wildcard2 ::= TypeAnnotationsopt QUESTION RIGHT_SHIFT"); }  //$NON-NLS-1$
 		    consumeWildcard2();  
 			break;
  
-    case 723 : if (DEBUG) { System.out.println("Wildcard2 ::= TypeAnnotationsopt QUESTION..."); }  //$NON-NLS-1$
+    case 725 : if (DEBUG) { System.out.println("Wildcard2 ::= TypeAnnotationsopt QUESTION..."); }  //$NON-NLS-1$
 		    consumeWildcard2WithBounds();  
 			break;
  
-    case 724 : if (DEBUG) { System.out.println("WildcardBounds2 ::= extends ReferenceType2"); }  //$NON-NLS-1$
+    case 726 : if (DEBUG) { System.out.println("WildcardBounds2 ::= extends ReferenceType2"); }  //$NON-NLS-1$
 		    consumeWildcardBounds2Extends();  
 			break;
  
-    case 725 : if (DEBUG) { System.out.println("WildcardBounds2 ::= super ReferenceType2"); }  //$NON-NLS-1$
+    case 727 : if (DEBUG) { System.out.println("WildcardBounds2 ::= super ReferenceType2"); }  //$NON-NLS-1$
 		    consumeWildcardBounds2Super();  
 			break;
  
-    case 726 : if (DEBUG) { System.out.println("Wildcard3 ::= TypeAnnotationsopt QUESTION..."); }  //$NON-NLS-1$
+    case 728 : if (DEBUG) { System.out.println("Wildcard3 ::= TypeAnnotationsopt QUESTION..."); }  //$NON-NLS-1$
 		    consumeWildcard3();  
 			break;
  
-    case 727 : if (DEBUG) { System.out.println("Wildcard3 ::= TypeAnnotationsopt QUESTION..."); }  //$NON-NLS-1$
+    case 729 : if (DEBUG) { System.out.println("Wildcard3 ::= TypeAnnotationsopt QUESTION..."); }  //$NON-NLS-1$
 		    consumeWildcard3WithBounds();  
 			break;
  
-    case 728 : if (DEBUG) { System.out.println("WildcardBounds3 ::= extends ReferenceType3"); }  //$NON-NLS-1$
+    case 730 : if (DEBUG) { System.out.println("WildcardBounds3 ::= extends ReferenceType3"); }  //$NON-NLS-1$
 		    consumeWildcardBounds3Extends();  
 			break;
  
-    case 729 : if (DEBUG) { System.out.println("WildcardBounds3 ::= super ReferenceType3"); }  //$NON-NLS-1$
+    case 731 : if (DEBUG) { System.out.println("WildcardBounds3 ::= super ReferenceType3"); }  //$NON-NLS-1$
 		    consumeWildcardBounds3Super();  
 			break;
  
-    case 730 : if (DEBUG) { System.out.println("TypeParameterHeader ::= TypeAnnotationsopt Identifier"); }  //$NON-NLS-1$
+    case 732 : if (DEBUG) { System.out.println("TypeParameterHeader ::= TypeAnnotationsopt Identifier"); }  //$NON-NLS-1$
 		    consumeTypeParameterHeader();  
 			break;
  
-    case 731 : if (DEBUG) { System.out.println("TypeParameters ::= LESS TypeParameterList1"); }  //$NON-NLS-1$
+    case 733 : if (DEBUG) { System.out.println("TypeParameters ::= LESS TypeParameterList1"); }  //$NON-NLS-1$
 		    consumeTypeParameters();  
 			break;
  
-    case 733 : if (DEBUG) { System.out.println("TypeParameterList ::= TypeParameterList COMMA..."); }  //$NON-NLS-1$
+    case 735 : if (DEBUG) { System.out.println("TypeParameterList ::= TypeParameterList COMMA..."); }  //$NON-NLS-1$
 		    consumeTypeParameterList();  
 			break;
  
-    case 735 : if (DEBUG) { System.out.println("TypeParameter ::= TypeParameterHeader extends..."); }  //$NON-NLS-1$
+    case 737 : if (DEBUG) { System.out.println("TypeParameter ::= TypeParameterHeader extends..."); }  //$NON-NLS-1$
 		    consumeTypeParameterWithExtends();  
 			break;
  
-    case 736 : if (DEBUG) { System.out.println("TypeParameter ::= TypeParameterHeader extends..."); }  //$NON-NLS-1$
+    case 738 : if (DEBUG) { System.out.println("TypeParameter ::= TypeParameterHeader extends..."); }  //$NON-NLS-1$
 		    consumeTypeParameterWithExtendsAndBounds();  
 			break;
  
-    case 738 : if (DEBUG) { System.out.println("AdditionalBoundList ::= AdditionalBoundList..."); }  //$NON-NLS-1$
+    case 740 : if (DEBUG) { System.out.println("AdditionalBoundList ::= AdditionalBoundList..."); }  //$NON-NLS-1$
 		    consumeAdditionalBoundList();  
 			break;
  
-    case 739 : if (DEBUG) { System.out.println("AdditionalBound ::= AND ReferenceType"); }  //$NON-NLS-1$
+    case 741 : if (DEBUG) { System.out.println("AdditionalBound ::= AND ReferenceType"); }  //$NON-NLS-1$
 		    consumeAdditionalBound();  
 			break;
  
-    case 741 : if (DEBUG) { System.out.println("TypeParameterList1 ::= TypeParameterList COMMA..."); }  //$NON-NLS-1$
+    case 743 : if (DEBUG) { System.out.println("TypeParameterList1 ::= TypeParameterList COMMA..."); }  //$NON-NLS-1$
 		    consumeTypeParameterList1();  
 			break;
  
-    case 742 : if (DEBUG) { System.out.println("TypeParameter1 ::= TypeParameterHeader GREATER"); }  //$NON-NLS-1$
+    case 744 : if (DEBUG) { System.out.println("TypeParameter1 ::= TypeParameterHeader GREATER"); }  //$NON-NLS-1$
 		    consumeTypeParameter1();  
 			break;
  
-    case 743 : if (DEBUG) { System.out.println("TypeParameter1 ::= TypeParameterHeader extends..."); }  //$NON-NLS-1$
+    case 745 : if (DEBUG) { System.out.println("TypeParameter1 ::= TypeParameterHeader extends..."); }  //$NON-NLS-1$
 		    consumeTypeParameter1WithExtends();  
 			break;
  
-    case 744 : if (DEBUG) { System.out.println("TypeParameter1 ::= TypeParameterHeader extends..."); }  //$NON-NLS-1$
+    case 746 : if (DEBUG) { System.out.println("TypeParameter1 ::= TypeParameterHeader extends..."); }  //$NON-NLS-1$
 		    consumeTypeParameter1WithExtendsAndBounds();  
 			break;
  
-    case 746 : if (DEBUG) { System.out.println("AdditionalBoundList1 ::= AdditionalBoundList..."); }  //$NON-NLS-1$
+    case 748 : if (DEBUG) { System.out.println("AdditionalBoundList1 ::= AdditionalBoundList..."); }  //$NON-NLS-1$
 		    consumeAdditionalBoundList1();  
 			break;
  
-    case 747 : if (DEBUG) { System.out.println("AdditionalBound1 ::= AND ReferenceType1"); }  //$NON-NLS-1$
+    case 749 : if (DEBUG) { System.out.println("AdditionalBound1 ::= AND ReferenceType1"); }  //$NON-NLS-1$
 		    consumeAdditionalBound1();  
 			break;
  
-    case 753 : if (DEBUG) { System.out.println("UnaryExpression_NotName ::= PLUS PushPosition..."); }  //$NON-NLS-1$
+    case 755 : if (DEBUG) { System.out.println("UnaryExpression_NotName ::= PLUS PushPosition..."); }  //$NON-NLS-1$
 		    consumeUnaryExpression(OperatorIds.PLUS);  
 			break;
  
-    case 754 : if (DEBUG) { System.out.println("UnaryExpression_NotName ::= MINUS PushPosition..."); }  //$NON-NLS-1$
+    case 756 : if (DEBUG) { System.out.println("UnaryExpression_NotName ::= MINUS PushPosition..."); }  //$NON-NLS-1$
 		    consumeUnaryExpression(OperatorIds.MINUS);  
 			break;
  
-    case 757 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus_NotName ::= TWIDDLE..."); }  //$NON-NLS-1$
+    case 759 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus_NotName ::= TWIDDLE..."); }  //$NON-NLS-1$
 		    consumeUnaryExpression(OperatorIds.TWIDDLE);  
 			break;
  
-    case 758 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus_NotName ::= NOT PushPosition"); }  //$NON-NLS-1$
+    case 760 : if (DEBUG) { System.out.println("UnaryExpressionNotPlusMinus_NotName ::= NOT PushPosition"); }  //$NON-NLS-1$
 		    consumeUnaryExpression(OperatorIds.NOT);  
 			break;
  
-    case 761 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 763 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.MULTIPLY);  
 			break;
  
-    case 762 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::= Name MULTIPLY..."); }  //$NON-NLS-1$
+    case 764 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::= Name MULTIPLY..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.MULTIPLY);  
 			break;
  
-    case 763 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 765 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.DIVIDE);  
 			break;
  
-    case 764 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::= Name DIVIDE..."); }  //$NON-NLS-1$
+    case 766 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::= Name DIVIDE..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.DIVIDE);  
 			break;
  
-    case 765 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 767 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.REMAINDER);  
 			break;
  
-    case 766 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::= Name REMAINDER..."); }  //$NON-NLS-1$
+    case 768 : if (DEBUG) { System.out.println("MultiplicativeExpression_NotName ::= Name REMAINDER..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.REMAINDER);  
 			break;
  
-    case 768 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 770 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.PLUS);  
 			break;
  
-    case 769 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::= Name PLUS..."); }  //$NON-NLS-1$
+    case 771 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::= Name PLUS..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.PLUS);  
 			break;
  
-    case 770 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 772 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.MINUS);  
 			break;
  
-    case 771 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::= Name MINUS..."); }  //$NON-NLS-1$
+    case 773 : if (DEBUG) { System.out.println("AdditiveExpression_NotName ::= Name MINUS..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.MINUS);  
 			break;
  
-    case 773 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= ShiftExpression_NotName..."); }  //$NON-NLS-1$
+    case 775 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= ShiftExpression_NotName..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.LEFT_SHIFT);  
 			break;
  
-    case 774 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= Name LEFT_SHIFT..."); }  //$NON-NLS-1$
+    case 776 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= Name LEFT_SHIFT..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.LEFT_SHIFT);  
 			break;
  
-    case 775 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= ShiftExpression_NotName..."); }  //$NON-NLS-1$
+    case 777 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= ShiftExpression_NotName..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.RIGHT_SHIFT);  
 			break;
  
-    case 776 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= Name RIGHT_SHIFT..."); }  //$NON-NLS-1$
+    case 778 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= Name RIGHT_SHIFT..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.RIGHT_SHIFT);  
 			break;
  
-    case 777 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= ShiftExpression_NotName..."); }  //$NON-NLS-1$
+    case 779 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= ShiftExpression_NotName..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.UNSIGNED_RIGHT_SHIFT);  
 			break;
  
-    case 778 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= Name UNSIGNED_RIGHT_SHIFT..."); }  //$NON-NLS-1$
+    case 780 : if (DEBUG) { System.out.println("ShiftExpression_NotName ::= Name UNSIGNED_RIGHT_SHIFT..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.UNSIGNED_RIGHT_SHIFT);  
 			break;
  
-    case 780 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= ShiftExpression_NotName"); }  //$NON-NLS-1$
+    case 782 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= ShiftExpression_NotName"); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.LESS);  
 			break;
  
-    case 781 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name LESS..."); }  //$NON-NLS-1$
+    case 783 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name LESS..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.LESS);  
 			break;
  
-    case 782 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= ShiftExpression_NotName"); }  //$NON-NLS-1$
+    case 784 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= ShiftExpression_NotName"); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.GREATER);  
 			break;
  
-    case 783 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name GREATER..."); }  //$NON-NLS-1$
+    case 785 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name GREATER..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.GREATER);  
 			break;
  
-    case 784 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 786 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.LESS_EQUAL);  
 			break;
  
-    case 785 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name LESS_EQUAL..."); }  //$NON-NLS-1$
+    case 787 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name LESS_EQUAL..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.LESS_EQUAL);  
 			break;
  
-    case 786 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 788 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.GREATER_EQUAL);  
 			break;
  
-    case 787 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name GREATER_EQUAL..."); }  //$NON-NLS-1$
+    case 789 : if (DEBUG) { System.out.println("RelationalExpression_NotName ::= Name GREATER_EQUAL..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.GREATER_EQUAL);  
 			break;
  
-    case 789 : if (DEBUG) { System.out.println("InstanceofExpression_NotName ::= Name instanceof..."); }  //$NON-NLS-1$
+    case 791 : if (DEBUG) { System.out.println("InstanceofExpression_NotName ::= Name instanceof..."); }  //$NON-NLS-1$
 		    consumeInstanceOfExpressionWithName();  
 			break;
  
-    case 790 : if (DEBUG) { System.out.println("InstanceofExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 792 : if (DEBUG) { System.out.println("InstanceofExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeInstanceOfExpression();  
 			break;
  
-    case 792 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 794 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeEqualityExpression(OperatorIds.EQUAL_EQUAL);  
 			break;
  
-    case 793 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::= Name EQUAL_EQUAL..."); }  //$NON-NLS-1$
+    case 795 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::= Name EQUAL_EQUAL..."); }  //$NON-NLS-1$
 		    consumeEqualityExpressionWithName(OperatorIds.EQUAL_EQUAL);  
 			break;
  
-    case 794 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 796 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeEqualityExpression(OperatorIds.NOT_EQUAL);  
 			break;
  
-    case 795 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::= Name NOT_EQUAL..."); }  //$NON-NLS-1$
+    case 797 : if (DEBUG) { System.out.println("EqualityExpression_NotName ::= Name NOT_EQUAL..."); }  //$NON-NLS-1$
 		    consumeEqualityExpressionWithName(OperatorIds.NOT_EQUAL);  
 			break;
  
-    case 797 : if (DEBUG) { System.out.println("AndExpression_NotName ::= AndExpression_NotName AND..."); }  //$NON-NLS-1$
+    case 799 : if (DEBUG) { System.out.println("AndExpression_NotName ::= AndExpression_NotName AND..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.AND);  
 			break;
  
-    case 798 : if (DEBUG) { System.out.println("AndExpression_NotName ::= Name AND EqualityExpression"); }  //$NON-NLS-1$
+    case 800 : if (DEBUG) { System.out.println("AndExpression_NotName ::= Name AND EqualityExpression"); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.AND);  
 			break;
  
-    case 800 : if (DEBUG) { System.out.println("ExclusiveOrExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 802 : if (DEBUG) { System.out.println("ExclusiveOrExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.XOR);  
 			break;
  
-    case 801 : if (DEBUG) { System.out.println("ExclusiveOrExpression_NotName ::= Name XOR AndExpression"); }  //$NON-NLS-1$
+    case 803 : if (DEBUG) { System.out.println("ExclusiveOrExpression_NotName ::= Name XOR AndExpression"); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.XOR);  
 			break;
  
-    case 803 : if (DEBUG) { System.out.println("InclusiveOrExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 805 : if (DEBUG) { System.out.println("InclusiveOrExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.OR);  
 			break;
  
-    case 804 : if (DEBUG) { System.out.println("InclusiveOrExpression_NotName ::= Name OR..."); }  //$NON-NLS-1$
+    case 806 : if (DEBUG) { System.out.println("InclusiveOrExpression_NotName ::= Name OR..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.OR);  
 			break;
  
-    case 806 : if (DEBUG) { System.out.println("ConditionalAndExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 808 : if (DEBUG) { System.out.println("ConditionalAndExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.AND_AND);  
 			break;
  
-    case 807 : if (DEBUG) { System.out.println("ConditionalAndExpression_NotName ::= Name AND_AND..."); }  //$NON-NLS-1$
+    case 809 : if (DEBUG) { System.out.println("ConditionalAndExpression_NotName ::= Name AND_AND..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.AND_AND);  
 			break;
  
-    case 809 : if (DEBUG) { System.out.println("ConditionalOrExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 811 : if (DEBUG) { System.out.println("ConditionalOrExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeBinaryExpression(OperatorIds.OR_OR);  
 			break;
  
-    case 810 : if (DEBUG) { System.out.println("ConditionalOrExpression_NotName ::= Name OR_OR..."); }  //$NON-NLS-1$
+    case 812 : if (DEBUG) { System.out.println("ConditionalOrExpression_NotName ::= Name OR_OR..."); }  //$NON-NLS-1$
 		    consumeBinaryExpressionWithName(OperatorIds.OR_OR);  
 			break;
  
-    case 812 : if (DEBUG) { System.out.println("ConditionalExpression_NotName ::=..."); }  //$NON-NLS-1$
+    case 814 : if (DEBUG) { System.out.println("ConditionalExpression_NotName ::=..."); }  //$NON-NLS-1$
 		    consumeConditionalExpression(OperatorIds.QUESTIONCOLON) ;  
 			break;
  
-    case 813 : if (DEBUG) { System.out.println("ConditionalExpression_NotName ::= Name QUESTION..."); }  //$NON-NLS-1$
+    case 815 : if (DEBUG) { System.out.println("ConditionalExpression_NotName ::= Name QUESTION..."); }  //$NON-NLS-1$
 		    consumeConditionalExpressionWithName(OperatorIds.QUESTIONCOLON) ;  
 			break;
  
-    case 817 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= Modifiers AT..."); }  //$NON-NLS-1$
+    case 819 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= Modifiers AT..."); }  //$NON-NLS-1$
 		    consumeAnnotationTypeDeclarationHeaderName() ;  
 			break;
  
-    case 818 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= Modifiers AT..."); }  //$NON-NLS-1$
+    case 820 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= Modifiers AT..."); }  //$NON-NLS-1$
 		    consumeAnnotationTypeDeclarationHeaderNameWithTypeParameters() ;  
 			break;
  
-    case 819 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= AT..."); }  //$NON-NLS-1$
+    case 821 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= AT..."); }  //$NON-NLS-1$
 		    consumeAnnotationTypeDeclarationHeaderNameWithTypeParameters() ;  
 			break;
  
-    case 820 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= AT..."); }  //$NON-NLS-1$
+    case 822 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeaderName ::= AT..."); }  //$NON-NLS-1$
 		    consumeAnnotationTypeDeclarationHeaderName() ;  
 			break;
  
-    case 821 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeader ::=..."); }  //$NON-NLS-1$
+    case 823 : if (DEBUG) { System.out.println("AnnotationTypeDeclarationHeader ::=..."); }  //$NON-NLS-1$
 		    consumeAnnotationTypeDeclarationHeader() ;  
 			break;
  
-    case 822 : if (DEBUG) { System.out.println("AnnotationTypeDeclaration ::=..."); }  //$NON-NLS-1$
+    case 824 : if (DEBUG) { System.out.println("AnnotationTypeDeclaration ::=..."); }  //$NON-NLS-1$
 		    consumeAnnotationTypeDeclaration() ;  
 			break;
  
-    case 824 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclarationsopt ::="); }  //$NON-NLS-1$
+    case 826 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclarationsopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyAnnotationTypeMemberDeclarationsopt() ;  
 			break;
  
-    case 825 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclarationsopt ::= NestedType..."); }  //$NON-NLS-1$
+    case 827 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclarationsopt ::= NestedType..."); }  //$NON-NLS-1$
 		    consumeAnnotationTypeMemberDeclarationsopt() ;  
 			break;
  
-    case 827 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclarations ::=..."); }  //$NON-NLS-1$
+    case 829 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclarations ::=..."); }  //$NON-NLS-1$
 		    consumeAnnotationTypeMemberDeclarations() ;  
 			break;
  
-    case 828 : if (DEBUG) { System.out.println("AnnotationMethodHeaderName ::= Modifiersopt..."); }  //$NON-NLS-1$
+    case 830 : if (DEBUG) { System.out.println("AnnotationMethodHeaderName ::= Modifiersopt..."); }  //$NON-NLS-1$
 		    consumeMethodHeaderNameWithTypeParameters(true);  
 			break;
  
-    case 829 : if (DEBUG) { System.out.println("AnnotationMethodHeaderName ::= Modifiersopt Type..."); }  //$NON-NLS-1$
+    case 831 : if (DEBUG) { System.out.println("AnnotationMethodHeaderName ::= Modifiersopt Type..."); }  //$NON-NLS-1$
 		    consumeMethodHeaderName(true);  
 			break;
  
-    case 830 : if (DEBUG) { System.out.println("AnnotationMethodHeaderDefaultValueopt ::="); }  //$NON-NLS-1$
+    case 832 : if (DEBUG) { System.out.println("AnnotationMethodHeaderDefaultValueopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyMethodHeaderDefaultValue() ;  
 			break;
  
-    case 831 : if (DEBUG) { System.out.println("AnnotationMethodHeaderDefaultValueopt ::= DefaultValue"); }  //$NON-NLS-1$
+    case 833 : if (DEBUG) { System.out.println("AnnotationMethodHeaderDefaultValueopt ::= DefaultValue"); }  //$NON-NLS-1$
 		    consumeMethodHeaderDefaultValue();  
 			break;
  
-    case 832 : if (DEBUG) { System.out.println("AnnotationMethodHeader ::= AnnotationMethodHeaderName..."); }  //$NON-NLS-1$
+    case 834 : if (DEBUG) { System.out.println("AnnotationMethodHeader ::= AnnotationMethodHeaderName..."); }  //$NON-NLS-1$
 		    consumeMethodHeader();  
 			break;
  
-    case 833 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclaration ::=..."); }  //$NON-NLS-1$
+    case 835 : if (DEBUG) { System.out.println("AnnotationTypeMemberDeclaration ::=..."); }  //$NON-NLS-1$
 		    consumeAnnotationTypeMemberDeclaration() ;  
 			break;
  
-    case 841 : if (DEBUG) { System.out.println("AnnotationName ::= AT UnannotatableName"); }  //$NON-NLS-1$
+    case 843 : if (DEBUG) { System.out.println("AnnotationName ::= AT UnannotatableName"); }  //$NON-NLS-1$
 		    consumeAnnotationName() ;  
 			break;
  
-    case 842 : if (DEBUG) { System.out.println("NormalAnnotation ::= AnnotationName LPAREN..."); }  //$NON-NLS-1$
+    case 844 : if (DEBUG) { System.out.println("NormalAnnotation ::= AnnotationName LPAREN..."); }  //$NON-NLS-1$
 		    consumeNormalAnnotation(false) ;  
 			break;
  
-    case 843 : if (DEBUG) { System.out.println("MemberValuePairsopt ::="); }  //$NON-NLS-1$
+    case 845 : if (DEBUG) { System.out.println("MemberValuePairsopt ::="); }  //$NON-NLS-1$
 		    consumeEmptyMemberValuePairsopt() ;  
 			break;
  
-    case 846 : if (DEBUG) { System.out.println("MemberValuePairs ::= MemberValuePairs COMMA..."); }  //$NON-NLS-1$
+    case 848 : if (DEBUG) { System.out.println("MemberValuePairs ::= MemberValuePairs COMMA..."); }  //$NON-NLS-1$
 		    consumeMemberValuePairs() ;  
 			break;
  
-    case 847 : if (DEBUG) { System.out.println("MemberValuePair ::= SimpleName EQUAL EnterMemberValue..."); }  //$NON-NLS-1$
+    case 849 : if (DEBUG) { System.out.println("MemberValuePair ::= SimpleName EQUAL EnterMemberValue..."); }  //$NON-NLS-1$
 		    consumeMemberValuePair() ;  
 			break;
  
-    case 848 : if (DEBUG) { System.out.println("EnterMemberValue ::="); }  //$NON-NLS-1$
+    case 850 : if (DEBUG) { System.out.println("EnterMemberValue ::="); }  //$NON-NLS-1$
 		    consumeEnterMemberValue() ;  
 			break;
  
-    case 849 : if (DEBUG) { System.out.println("ExitMemberValue ::="); }  //$NON-NLS-1$
+    case 851 : if (DEBUG) { System.out.println("ExitMemberValue ::="); }  //$NON-NLS-1$
 		    consumeExitMemberValue() ;  
 			break;
  
-    case 851 : if (DEBUG) { System.out.println("MemberValue ::= Name"); }  //$NON-NLS-1$
+    case 853 : if (DEBUG) { System.out.println("MemberValue ::= Name"); }  //$NON-NLS-1$
 		    consumeMemberValueAsName() ;  
 			break;
  
-    case 854 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); }  //$NON-NLS-1$
-		    consumeMemberValueArrayInitializer() ;  
-			break;
- 
-    case 855 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); }  //$NON-NLS-1$
-		    consumeMemberValueArrayInitializer() ;  
-			break;
- 
     case 856 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); }  //$NON-NLS-1$
-		    consumeEmptyMemberValueArrayInitializer() ;  
+		    consumeMemberValueArrayInitializer() ;  
 			break;
  
     case 857 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); }  //$NON-NLS-1$
+		    consumeMemberValueArrayInitializer() ;  
+			break;
+ 
+    case 858 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); }  //$NON-NLS-1$
 		    consumeEmptyMemberValueArrayInitializer() ;  
 			break;
  
-    case 858 : if (DEBUG) { System.out.println("EnterMemberValueArrayInitializer ::="); }  //$NON-NLS-1$
+    case 859 : if (DEBUG) { System.out.println("MemberValueArrayInitializer ::=..."); }  //$NON-NLS-1$
+		    consumeEmptyMemberValueArrayInitializer() ;  
+			break;
+ 
+    case 860 : if (DEBUG) { System.out.println("EnterMemberValueArrayInitializer ::="); }  //$NON-NLS-1$
 		    consumeEnterMemberValueArrayInitializer() ;  
 			break;
  
-    case 860 : if (DEBUG) { System.out.println("MemberValues ::= MemberValues COMMA MemberValue"); }  //$NON-NLS-1$
+    case 862 : if (DEBUG) { System.out.println("MemberValues ::= MemberValues COMMA MemberValue"); }  //$NON-NLS-1$
 		    consumeMemberValues() ;  
 			break;
  
-    case 861 : if (DEBUG) { System.out.println("MarkerAnnotation ::= AnnotationName"); }  //$NON-NLS-1$
+    case 863 : if (DEBUG) { System.out.println("MarkerAnnotation ::= AnnotationName"); }  //$NON-NLS-1$
 		    consumeMarkerAnnotation(false) ;  
 			break;
  
-    case 862 : if (DEBUG) { System.out.println("SingleMemberAnnotationMemberValue ::= MemberValue"); }  //$NON-NLS-1$
+    case 864 : if (DEBUG) { System.out.println("SingleMemberAnnotationMemberValue ::= MemberValue"); }  //$NON-NLS-1$
 		    consumeSingleMemberAnnotationMemberValue() ;  
 			break;
  
-    case 863 : if (DEBUG) { System.out.println("SingleMemberAnnotation ::= AnnotationName LPAREN..."); }  //$NON-NLS-1$
+    case 865 : if (DEBUG) { System.out.println("SingleMemberAnnotation ::= AnnotationName LPAREN..."); }  //$NON-NLS-1$
 		    consumeSingleMemberAnnotation(false) ;  
 			break;
  
-    case 864 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= Modifiersopt TypeParameters"); }  //$NON-NLS-1$
+    case 866 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= Modifiersopt TypeParameters"); }  //$NON-NLS-1$
 		    consumeRecoveryMethodHeaderNameWithTypeParameters();  
 			break;
  
-    case 865 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= Modifiersopt Type..."); }  //$NON-NLS-1$
+    case 867 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= Modifiersopt Type..."); }  //$NON-NLS-1$
 		    consumeRecoveryMethodHeaderName();  
 			break;
  
-    case 866 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= ModifiersWithDefault..."); }  //$NON-NLS-1$
+    case 868 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= ModifiersWithDefault..."); }  //$NON-NLS-1$
 		    consumeRecoveryMethodHeaderNameWithTypeParameters();  
 			break;
  
-    case 867 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= ModifiersWithDefault Type"); }  //$NON-NLS-1$
+    case 869 : if (DEBUG) { System.out.println("RecoveryMethodHeaderName ::= ModifiersWithDefault Type"); }  //$NON-NLS-1$
 		    consumeRecoveryMethodHeaderName();  
 			break;
  
-    case 868 : if (DEBUG) { System.out.println("RecoveryMethodHeader ::= RecoveryMethodHeaderName..."); }  //$NON-NLS-1$
+    case 870 : if (DEBUG) { System.out.println("RecoveryMethodHeader ::= RecoveryMethodHeaderName..."); }  //$NON-NLS-1$
 		    consumeMethodHeader();  
 			break;
  
-    case 869 : if (DEBUG) { System.out.println("RecoveryMethodHeader ::= RecoveryMethodHeaderName..."); }  //$NON-NLS-1$
+    case 871 : if (DEBUG) { System.out.println("RecoveryMethodHeader ::= RecoveryMethodHeaderName..."); }  //$NON-NLS-1$
 		    consumeMethodHeader();  
 			break;
  
@@ -9108,22 +9118,18 @@
 			this.endStatementPosition));
 	this.identifierLengthPtr--;
 }
-protected void consumeStatementBreakWithExpressionOrLabel() {
-// add the compliance check
-	if (this.expressionLengthStack[this.expressionLengthPtr--] != 0) {
-		Expression expr = this.expressionStack[this.expressionPtr--];
-		char[] labelOrExpr = expr instanceof Literal ?
-				((Literal) expr).source() : expr instanceof SingleNameReference ? ((SingleNameReference) expr).token : null;
-		BreakStatement breakStatement = new BreakStatement(
-				labelOrExpr,
-				this.intStack[this.intPtr--],
-				this.endStatementPosition);
-		pushOnAstStack(breakStatement);
-		breakStatement.expression = expr; // need to figure out later whether this is a label or an expression.
-		if (expr instanceof SingleNameReference) {
-			((SingleNameReference) expr).isLabel = true;
+protected void consumeStatementYield() {
+	// YieldStatement ::= RestrictedIdentifierYield Expression ';'
+
+	// add the compliance check
+		if (this.expressionLengthStack[this.expressionLengthPtr--] != 0) {
+			Expression expr = this.expressionStack[this.expressionPtr--];
+			YieldStatement yieldStatement = new YieldStatement(
+					expr,
+					this.intStack[this.intPtr--],
+					this.endStatementPosition);
+			pushOnAstStack(yieldStatement);
 		}
-	}
 }
 protected void consumeStatementCatch() {
 	// CatchClause ::= 'catch' '(' FormalParameter ')'    Block
@@ -9301,8 +9307,8 @@
 		pushOnAstStack(new ReturnStatement(null, this.intStack[this.intPtr--], this.endStatementPosition));
 	}
 }
-private void createSwitchStatementOrExpression(boolean isStmt) {
-	
+private SwitchStatement createSwitchStatementOrExpression(boolean isStmt) {
+
 	//OpenBlock just makes the semantic action blockStart()
 	//the block is inlined but a scope need to be created
 	//if some declaration occurs.
@@ -9329,7 +9335,8 @@
 	switchStatement.sourceEnd = this.endStatementPosition;
 	if (length == 0 && !containsComment(switchStatement.blockStart, switchStatement.sourceEnd)) {
 		switchStatement.bits |= ASTNode.UndocumentedEmptyBlock;
-	}	
+	}
+	return switchStatement;
 }
 protected void consumeStatementSwitch() {
 	// SwitchStatement ::= 'switch' OpenBlock '(' Expression ')' SwitchBlock
@@ -9527,6 +9534,41 @@
 		this.recoveredStaticInitializerStart = this.intStack[this.intPtr]; // remember start position only for static initializers
 	}
 }
+protected void consumeTextBlock() {
+	if (!this.parsingJava13Plus) {
+		problemReporter().previewFeatureNotSupported(this.scanner.rawStart, this.scanner.currentPosition - 1, "Text Blocks", CompilerOptions.VERSION_13); //$NON-NLS-1$
+	} else if (!this.options.enablePreviewFeatures){
+		problemReporter().previewFeatureNotEnabled(this.scanner.rawStart, this.scanner.currentPosition - 1, "Text Blocks"); //$NON-NLS-1$
+	} else {
+		if (this.options.isAnyEnabled(IrritantSet.PREVIEW)) {
+			problemReporter().previewFeatureUsed(this.scanner.rawStart, this.scanner.currentPosition - 1);
+		}
+	}
+	char[] textBlock2 = this.scanner.getCurrentTextBlock();
+	TextBlock textBlock;
+	if (this.recordStringLiterals &&
+			!this.reparsingLambdaExpression &&
+			this.checkExternalizeStrings &&
+			this.lastPosistion < this.scanner.currentPosition &&
+			!this.statementRecoveryActivated) {
+		textBlock = 
+				new TextBlock(
+						textBlock2, 
+						this.scanner.startPosition,
+						this.scanner.currentPosition - 1,
+						Util.getLineNumber(this.scanner.startPosition, this.scanner.lineEnds, 0, this.scanner.linePtr));
+		// TODO
+		//this.compilationUnit.recordStringLiteral(stringLiteral, this.currentElement != null);
+	} else {
+		textBlock = new TextBlock(
+				textBlock2,
+			this.scanner.startPosition,
+			this.scanner.currentPosition - 1,
+			0);
+	}
+	pushOnExpressionStack(textBlock);
+	// Regardless of the error reported above, we have to push the ast node accordingly
+}
 protected void consumeSwitchBlock() {
 	// SwitchBlock ::= '{' SwitchBlockStatements SwitchLabels '}'
 	concatNodeLists();
@@ -9545,14 +9587,15 @@
 	optimizedConcatNodeLists();
 }
 protected void consumeSwitchLabelCaseLhs() {
-//	System.out.println("consumeSwitchLabelCaseLhs");
+	if (this.scanner.lookBack[1] == TerminalTokens.TokenNameCOLON) // kludge for yield :(
+		this.scanner.yieldColons = 1;
 }
 protected void consumeCaseLabelExpr() {
 //	SwitchLabelExpr ::= SwitchLabelCaseLhs BeginCaseExpr '->'
 	consumeCaseLabel();
 	CaseStatement caseStatement = (CaseStatement) this.astStack[this.astPtr];
-	if (!this.parsingJava12Plus) {
-		problemReporter().previewFeatureNotSupported(caseStatement.sourceStart, caseStatement.sourceEnd, "Case Labels with '->'", CompilerOptions.VERSION_12); //$NON-NLS-1$
+	if (!this.parsingJava13Plus) {
+		problemReporter().previewFeatureNotSupported(caseStatement.sourceStart, caseStatement.sourceEnd, "Case Labels with '->'", CompilerOptions.VERSION_13); //$NON-NLS-1$
 	} else if (!this.options.enablePreviewFeatures){
 		problemReporter().previewFeatureNotEnabled(caseStatement.sourceStart, caseStatement.sourceEnd, "Case Labels with '->'"); //$NON-NLS-1$
 	} else {
@@ -9566,8 +9609,8 @@
 //	SwitchLabelDefaultExpr ::= 'default' '->'
 	consumeDefaultLabel();
 	CaseStatement defaultStatement = (CaseStatement) this.astStack[this.astPtr];
-	if (!this.parsingJava12Plus) {
-		problemReporter().previewFeatureNotSupported(defaultStatement.sourceStart, defaultStatement.sourceEnd, "Case Labels with '->'", CompilerOptions.VERSION_12); //$NON-NLS-1$
+	if (!this.parsingJava13Plus) {
+		problemReporter().previewFeatureNotSupported(defaultStatement.sourceStart, defaultStatement.sourceEnd, "Case Labels with '->'", CompilerOptions.VERSION_13); //$NON-NLS-1$
 	} else if (!this.options.enablePreviewFeatures){
 		problemReporter().previewFeatureNotEnabled(defaultStatement.sourceStart, defaultStatement.sourceEnd, "Case Labels with '->'"); //$NON-NLS-1$
 	} else {
@@ -9577,7 +9620,7 @@
 	}
 	defaultStatement.isExpr = true;
 }
-/* package */ void collectResultExpressions(SwitchExpression s) {
+/* package */ void collectResultExpressionsYield(SwitchExpression s) {
 	if (s.resultExpressions != null)
 		return; // already calculated.
 
@@ -9600,34 +9643,18 @@
 			this.targetSwitchExpressions.pop();
 		}
 		@Override
-		public boolean visit(BreakStatement breakStatement, BlockScope blockScope) {
+		public boolean visit(YieldStatement yieldStatement, BlockScope blockScope) {
 			SwitchExpression targetSwitchExpression = this.targetSwitchExpressions.peek();
-			if (breakStatement.expression != null) {
-				targetSwitchExpression.resultExpressions.add(breakStatement.expression);
-				breakStatement.switchExpression = this.targetSwitchExpressions.peek();
-				breakStatement.label = null; // not a label, but an expression
-				if (breakStatement.expression instanceof SingleNameReference) {
-					((SingleNameReference) breakStatement.expression).isLabel = false;
-				}
+			if (yieldStatement.expression != null) {
+				targetSwitchExpression.resultExpressions.add(yieldStatement.expression);
+				yieldStatement.switchExpression = this.targetSwitchExpressions.peek();
 			} else {
 				// flag an error while resolving
-				breakStatement.switchExpression = targetSwitchExpression;
+				yieldStatement.switchExpression = targetSwitchExpression;
 			}
 			return true;
 		}
 		@Override
-		public boolean visit(DoStatement stmt, BlockScope blockScope) {
-			return false;
-		}
-		@Override
-		public boolean visit(ForStatement stmt, BlockScope blockScope) {
-			return false;
-		}
-		@Override
-		public boolean visit(ForeachStatement stmt, BlockScope blockScope) {
-			return false;
-		}
-		@Override
 		public boolean visit(SwitchStatement stmt, BlockScope blockScope) {
 			return false;
 		}
@@ -9635,14 +9662,6 @@
 		public boolean visit(TypeDeclaration stmt, BlockScope blockScope) {
 			return false;
 		}
-		@Override
-		public boolean visit(WhileStatement stmt, BlockScope blockScope) {
-			return false;
-		}
-		@Override
-		public boolean visit(CaseStatement caseStatement, BlockScope blockScope) {
-			return true; // do nothing by default, keep traversing
-		}
 	}
 	s.resultExpressions = new ArrayList<>(0); // indicates processed
 	int l = s.statements == null ? 0 : s.statements.length;
@@ -9671,8 +9690,8 @@
 	if (this.astLengthStack[this.astLengthPtr--] != 0) {
 		SwitchExpression s = (SwitchExpression) this.astStack[this.astPtr--];
 
-		if (!this.parsingJava12Plus) {
-			problemReporter().previewFeatureNotSupported(s.sourceStart, s.sourceEnd, "Switch Expressions", CompilerOptions.VERSION_12); //$NON-NLS-1$
+		if (!this.parsingJava13Plus) {
+			problemReporter().previewFeatureNotSupported(s.sourceStart, s.sourceEnd, "Switch Expressions", CompilerOptions.VERSION_13); //$NON-NLS-1$
 		} else if (!this.options.enablePreviewFeatures) {
 			problemReporter().previewFeatureNotEnabled(s.sourceStart, s.sourceEnd, "Switch Expressions"); //$NON-NLS-1$
 		} else {
@@ -9680,7 +9699,7 @@
 				problemReporter().previewFeatureUsed(s.sourceStart, s.sourceEnd);
 			}
 		}
-		collectResultExpressions(s);
+		collectResultExpressionsYield(s);
 		pushOnExpressionStack(s);
 	}
 }
@@ -9712,13 +9731,12 @@
 protected void consumeSwitchLabeledExpression() {
 	consumeExpressionStatement();
 	Expression expr = (Expression) this.astStack[this.astPtr];
-	BreakStatement breakStatement = new BreakStatement(
-			null,
+	YieldStatement yieldStatement = new YieldStatement(
+			expr,
 			expr.sourceStart,
 			this.endStatementPosition);
-	breakStatement.isImplicit = true;
-	breakStatement.expression = expr;
-	this.astStack[this.astPtr] = breakStatement;
+	yieldStatement.isImplicit = true;
+	this.astStack[this.astPtr] = yieldStatement;
 	concatNodeLists();
 } 
 protected void consumeSwitchLabeledBlock() {
@@ -9756,7 +9774,7 @@
 	//System.out.println(this.scanner.toStringAction(type));
 	switch (type) {
 		case TokenNameARROW:
-			if (!this.caseFlagSet  && this.scanner.lookBack[0] != TokenNamedefault)
+			if (!this.caseFlagSet && this.scanner.lookBack[0] != TokenNamedefault)
 				consumeLambdaHeader();
 			this.caseFlagSet = false;
 			break;
@@ -9950,6 +9968,9 @@
 			}
 			pushOnExpressionStack(stringLiteral);
 			break;
+		case TokenNameTextBlock :
+			consumeTextBlock();
+			break;
 		case TokenNamefalse :
 			pushOnExpressionStack(
 				new FalseLiteral(this.scanner.startPosition, this.scanner.currentPosition - 1));
@@ -9989,6 +10010,7 @@
 		case TokenNameopens:
 		case TokenNameuses:
 		case TokenNameprovides:
+		case TokenNameRestrictedIdentifierYield:
 			pushOnIntStack(this.scanner.startPosition);
 			break;
 		case TokenNameswitch :
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/ParserBasicInformation.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/ParserBasicInformation.java
index d8d8f26..65f2868 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/ParserBasicInformation.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/ParserBasicInformation.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
  *******************************************************************************/
@@ -19,22 +23,22 @@
 
 	public final static int
 
-	ERROR_SYMBOL = 130,
+	ERROR_SYMBOL = 131,
 					MAX_NAME_LENGTH = 41,
 					NUM_STATES = 1168,
 
-					NT_OFFSET = 130,
+					NT_OFFSET = 131,
 					SCOPE_UBOUND = 297,
 					SCOPE_SIZE = 298,
-					LA_STATE_OFFSET = 16968,
+					LA_STATE_OFFSET = 16962,
 					MAX_LA = 1,
-					NUM_RULES = 869,
-					NUM_TERMINALS = 130,
-					NUM_NON_TERMINALS = 397,
-					NUM_SYMBOLS = 527,
-					START_STATE = 1126,
-					EOFT_SYMBOL = 61,
-					EOLT_SYMBOL = 61,
-					ACCEPT_ACTION = 16967,
-					ERROR_ACTION = 16968;
+					NUM_RULES = 871,
+					NUM_TERMINALS = 131,
+					NUM_NON_TERMINALS = 398,
+					NUM_SYMBOLS = 529,
+					START_STATE = 1026,
+					EOFT_SYMBOL = 62,
+					EOLT_SYMBOL = 62,
+					ACCEPT_ACTION = 16961,
+					ERROR_ACTION = 16962;
 }
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Scanner.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Scanner.java
index 883f938..21b462d 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Scanner.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Scanner.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 186342 - [compiler][null] Using annotations for null checking
@@ -15,6 +19,9 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.compiler.parser;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.eclipse.jdt.core.compiler.CharOperation;
 import org.eclipse.jdt.core.compiler.InvalidInputException;
 import org.eclipse.jdt.internal.compiler.CompilationResult;
@@ -108,6 +115,7 @@
 
 	public boolean fakeInModule = false;
 	boolean inCase = false;
+	/* package */ int yieldColons = -1;
 	boolean breakPreviewAllowed = false;
 	/**
 	 * The current context of the scanner w.r.t restricted keywords
@@ -118,7 +126,6 @@
 	}
 	protected ScanContext scanContext = null;
 	protected boolean insideModuleInfo = false;
-
 	public static final String END_OF_SOURCE = "End_Of_Source"; //$NON-NLS-1$
 
 	public static final String INVALID_HEXA = "Invalid_Hexa_Literal"; //$NON-NLS-1$
@@ -126,6 +133,7 @@
 	public static final String INVALID_CHARACTER_CONSTANT = "Invalid_Character_Constant";  //$NON-NLS-1$
 	public static final String INVALID_ESCAPE = "Invalid_Escape"; //$NON-NLS-1$
 	public static final String INVALID_INPUT = "Invalid_Input"; //$NON-NLS-1$
+	public static final String INVALID_TEXTBLOCK = "Invalid_Textblock"; //$NON-NLS-1$
 	public static final String INVALID_UNICODE_ESCAPE = "Invalid_Unicode_Escape"; //$NON-NLS-1$
 	public static final String INVALID_FLOAT = "Invalid_Float_Literal"; //$NON-NLS-1$
 	public static final String INVALID_LOW_SURROGATE = "Invalid_Low_Surrogate"; //$NON-NLS-1$
@@ -133,6 +141,7 @@
 
 	public static final String NULL_SOURCE_STRING = "Null_Source_String"; //$NON-NLS-1$
 	public static final String UNTERMINATED_STRING = "Unterminated_String"; //$NON-NLS-1$
+	public static final String UNTERMINATED_TEXT_BLOCK = "Unterminated_Text_Block"; //$NON-NLS-1$
 	public static final String UNTERMINATED_COMMENT = "Unterminated_Comment"; //$NON-NLS-1$
 	public static final String INVALID_CHAR_IN_STRING = "Invalid_Char_In_String"; //$NON-NLS-1$
 	public static final String INVALID_DIGIT = "Invalid_Digit"; //$NON-NLS-1$
@@ -142,7 +151,7 @@
 	public static final String BINARY_LITERAL_NOT_BELOW_17 = "Binary_Literal_Not_Below_17"; //$NON-NLS-1$
 	public static final String ILLEGAL_HEXA_LITERAL = "Illegal_Hexa_Literal"; //$NON-NLS-1$
 	public static final String INVALID_UNDERSCORE = "Invalid_Underscore"; //$NON-NLS-1$
-	public static final String UNDERSCORES_IN_LITERALS_NOT_BELOW_17 = "Underscores_In_Literals_Not_Below_17"; //$NON-NLS-1$`
+	public static final String UNDERSCORES_IN_LITERALS_NOT_BELOW_17 = "Underscores_In_Literals_Not_Below_17"; //$NON-NLS-1$
 
 	//----------------optimized identifier managment------------------
 	static final char[] charArray_a = new char[] {'a'},
@@ -232,6 +241,9 @@
 	public static final int HIGH_SURROGATE_MAX_VALUE = 0xDBFF;
 	public static final int LOW_SURROGATE_MAX_VALUE = 0xDFFF;
 
+	// raw string support - 11
+	/* package */ int rawStart = -1;
+
 public Scanner() {
 	this(false /*comment*/, false /*whitespace*/, false /*nls*/, ClassFileConstants.JDK1_3 /*sourceLevel*/, null/*taskTag*/, null/*taskPriorities*/, true /*taskCaseSensitive*/);
 }
@@ -567,6 +579,133 @@
 	}
 	return result;
 }
+protected final boolean scanForTextBlockBeginning() {
+	if (!this.previewEnabled) {
+		return false;
+	}
+	try {
+		// Don't change the position and current character unless we are certain
+		// to be dealing with a text block. For producing all errors like before
+		// in case of a valid """ but missing \r or \n, just return false and not
+		// throw any error.
+		int temp = this.currentPosition;
+		if ((this.source[temp++] == '\"' && this.source[temp++] == '\"')) {
+			char c = this.source[temp++];
+			while (ScannerHelper.isWhitespace(c)) {
+				switch (c) {
+					case 10 : /* \ u000a: LINE FEED               */
+					case 13 : /* \ u000d: CARRIAGE RETURN         */
+						this.currentCharacter = c;
+						this.currentPosition = temp;
+						return true;
+					default:
+						break;
+				}
+				c = this.source[temp++];
+			}
+		}
+	} catch(IndexOutOfBoundsException e) {
+		//let it return false;
+	}
+	return false;
+}
+protected final boolean scanForTextBlockClose() throws InvalidInputException {
+	try {
+		if (this.source[this.currentPosition] == '\"' && this.source[this.currentPosition + 1] == '\"') {
+			return true;
+		}
+	} catch(IndexOutOfBoundsException e) {
+		//let it return false;
+	}
+	return false;
+}
+public char[] getCurrentTextBlock() {
+	// 1. Normalize, i.e. convert all CR CRLF to LF
+	char[] all;
+	if (this.withoutUnicodePtr != 0) {
+		all = CharOperation.subarray(this.withoutUnicodeBuffer, this.rawStart + 1, this.withoutUnicodePtr + 1 );
+	} else {
+		all = CharOperation.subarray(this.source, this.startPosition + this.rawStart, this.currentPosition - 3);
+		if (all == null) {
+			all = new char[0];
+		}
+	}
+	// 2. Split into lines. Consider both \n and \r as line separators
+	char[][] lines = CharOperation.splitOn('\n', all);
+	int size = lines.length;
+	List<char[]> list = new ArrayList<>(lines.length);
+	for(int i = 0; i < lines.length; i++) {
+		char[] line = lines[i];
+		char[][] sub = CharOperation.splitOn('\r', line);
+		for (char[] cs : sub) {
+			if (cs.length > 0) {
+				list.add(cs);
+			}
+		}
+	}
+	size = list.size();
+	lines = list.toArray(new char[size][]);
+
+	// 	3. Handle incidental white space
+	//  3.1. Split into lines and identify determining lines
+	int prefix = -1;
+	for(int i = 0; i < size; i++) {
+		char[] line = lines[i];
+		boolean blank = true;
+		int whitespaces = 0;
+ 		for (char c : line) {
+			if (blank) {
+				if (ScannerHelper.isWhitespace(c)) {
+					whitespaces++;
+				} else {
+					blank = false;
+				}
+			}
+		}
+		if (!blank) {
+			if (prefix < 0 || whitespaces < prefix) {
+ 				prefix = whitespaces;
+			}
+		}
+	}
+	// 3.2. Remove the common white space prefix
+	// 4. Handle escape sequences (already done while processing
+	if (prefix == -1)
+		prefix = 0;
+	char[] result = new char[0];
+	for(int i = 0; i < lines.length; i++) {
+		char[] l  = lines[i];
+		// Remove the common prefix from each line
+		// And remove all trailing whitespace
+		// Finally append the \n at the end of the line (except the last line)
+		int length = l.length;
+		int trail = length - 1;
+		for(int j = trail; j>0; j--) {
+			if (!ScannerHelper.isWhitespace(l[j])) {
+				trail = j;
+				break;
+			}
+		}
+		int newSize = (length == 0 || prefix > trail) ? 0 : (trail - prefix + 1);
+		char[] nl;
+		if (i >= (size - 1)) {
+			if (trail <= 0 || newSize == 0)
+				continue;
+			nl = new char[newSize];
+			System.arraycopy(l, prefix, nl, 0, newSize); 
+		} else {
+			newSize += 1;
+			nl = new char[newSize];
+			nl[newSize - 1] = '\n';
+			if (newSize > 1)
+				System.arraycopy(l, prefix, nl, 0, newSize - 1);
+		}
+		result = CharOperation.concat(result, nl);
+	}
+	//	get rid of all the cached values
+	this.rawStart = -1;
+	return result;
+}
 public final String getCurrentStringLiteral() {
 	//return the token REAL source (aka unicodes are precomputed).
 	//REMOVE the two " that are at the beginning and the end.
@@ -1194,8 +1333,7 @@
 	if (this.activeParser == null) { // anybody interested in the grammatical structure of the program should have registered.
 		return token;
 	}
-	if (token == TokenNameLPAREN || token == TokenNameLESS || token == TokenNameAT || token == TokenNameARROW
-			|| token == TokenNamebreak) {
+	if (token == TokenNameLPAREN || token == TokenNameLESS || token == TokenNameAT || token == TokenNameARROW) {
 		token = disambiguatedToken(token);
 	} else if (token == TokenNameELLIPSIS) {
 		this.consumingEllipsisAnnotations = false;
@@ -1433,6 +1571,7 @@
 				case ':' :
 					if (getNextChar(':'))
 						return TokenNameCOLON_COLON;
+					++this.yieldColons;
 					return TokenNameCOLON;
 				case '\'' :
 					{
@@ -1517,26 +1656,50 @@
 					}
 					throw new InvalidInputException(INVALID_CHARACTER_CONSTANT);
 				case '"' :
+					boolean isTextBlock = false;
+					int lastQuotePos = 0;
 					try {
 						// consume next character
 						this.unicodeAsBackSlash = false;
 						boolean isUnicode = false;
-						if (((this.currentCharacter = this.source[this.currentPosition++]) == '\\')
-							&& (this.source[this.currentPosition] == 'u')) {
-							getNextUnicodeChar();
-							isUnicode = true;
-						} else {
-							if (this.withoutUnicodePtr != 0) {
-								unicodeStore();
+						isTextBlock = scanForTextBlockBeginning();
+						if (!isTextBlock) {
+							if (((this.currentCharacter = this.source[this.currentPosition++]) == '\\')
+									&& (this.source[this.currentPosition] == 'u')) {
+								getNextUnicodeChar();
+								isUnicode = true;
+							} else {
+								if (this.withoutUnicodePtr != 0) {
+									unicodeStore();
+								}
 							}
 						}
-
-						while (this.currentCharacter != '"') {
-							if (this.currentPosition >= this.eofPosition) {
-								throw new InvalidInputException(UNTERMINATED_STRING);
+						this.rawStart = this.currentPosition - this.startPosition;
+						int terminators = 0;
+						while (this.currentPosition <= this.eofPosition) {
+							if (this.currentCharacter == '"') {
+								if (!isTextBlock) {
+									return TerminalTokens.TokenNameStringLiteral;
+								}
+								lastQuotePos = this.currentPosition;
+								// look for text block delimiter
+								if (scanForTextBlockClose()) {
+									if (this.source[this.currentPosition + 2] == '"') {
+										terminators++;
+										if (terminators > 2)
+											throw new InvalidInputException(UNTERMINATED_TEXT_BLOCK);
+									} else {
+										this.currentPosition += 2;
+										return TerminalTokens.TokenNameTextBlock;
+									}
+								}
+								if (this.withoutUnicodePtr != 0) {
+									unicodeStore();
+								}
+							} else {
+								terminators = 0;
 							}
-							/**** \r and \n are not valid in string literals ****/
-							if ((this.currentCharacter == '\n') || (this.currentCharacter == '\r')) {
+							if (!isTextBlock && (this.currentCharacter == '\n' || this.currentCharacter == '\r')) {
 								// relocate if finding another quote fairly close: thus unicode '/u000D' will be fully consumed
 								if (isUnicode) {
 									int start = this.currentPosition;
@@ -1597,15 +1760,29 @@
 								isUnicode = true;
 							} else {
 								isUnicode = false;
+								if (isTextBlock && this.currentCharacter == '"')
+									continue;
 								if (this.withoutUnicodePtr != 0) {
 									unicodeStore();
 								}
 							}
-
+						}
+						if (isTextBlock) {
+							if (lastQuotePos > 0)
+								this.currentPosition = lastQuotePos;
+							throw new InvalidInputException(UNTERMINATED_TEXT_BLOCK);
+						} else {
+							throw new InvalidInputException(UNTERMINATED_STRING);
 						}
 					} catch (IndexOutOfBoundsException e) {
-						this.currentPosition--;
-						throw new InvalidInputException(UNTERMINATED_STRING);
+						if (isTextBlock) {
+							if (lastQuotePos > 0)
+								this.currentPosition = lastQuotePos;
+							throw new InvalidInputException(UNTERMINATED_TEXT_BLOCK);
+						} else {
+							this.currentPosition--;
+							throw new InvalidInputException(UNTERMINATED_STRING);
+						}
 					} catch (InvalidInputException e) {
 						if (e.getMessage().equals(INVALID_ESCAPE)) {
 							// relocate if finding another quote fairly close: thus unicode '/u000D' will be fully consumed
@@ -1623,7 +1800,6 @@
 						}
 						throw e; // rethrow
 					}
-					return TokenNameStringLiteral;
 				case '/' :
 					if (!this.skipComments) {
 						int test = getNextChar('/', '*');
@@ -3713,6 +3889,19 @@
 					return TokenNameIdentifier;
 			}
 
+		case 'y' :
+			switch (length) {
+				case 5 :
+					if ((data[++index] == 'i')
+						&& (data[++index] == 'e')
+						&& (data[++index] == 'l')
+						&& (data[++index] == 'd'))
+						return disambiguatedRestrictedIdentifierYield(TokenNameRestrictedIdentifierYield);
+					//$FALL-THROUGH$
+				default :
+					return TokenNameIdentifier;
+			}
+
 		default :
 			return TokenNameIdentifier;
 	}
@@ -4053,6 +4242,7 @@
 	this.containsAssertKeyword = false;
 	this.linePtr = -1;
 	this.scanContext = null;
+	this.yieldColons = -1;
 	this.insideModuleInfo = false;
 }
 /*
@@ -4117,6 +4307,8 @@
 	switch (act) {
 		case TokenNameIdentifier :
 			return "Identifier(" + new String(getCurrentTokenSource()) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+		case TokenNameRestrictedIdentifierYield :
+			return "yield"; //$NON-NLS-1$
 		case TokenNameabstract :
 			return "abstract"; //$NON-NLS-1$
 		case TokenNameboolean :
@@ -4232,7 +4424,8 @@
 			return "Char(" + new String(getCurrentTokenSource()) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
 		case TokenNameStringLiteral :
 			return "String(" + new String(getCurrentTokenSource()) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
-
+		case TokenNameTextBlock :
+			return "String(" + new String(getCurrentTokenSource()) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
 		case TokenNamePLUS_PLUS :
 			return "++"; //$NON-NLS-1$
 		case TokenNameMINUS_MINUS :
@@ -4376,6 +4569,7 @@
 		case TerminalTokens.TokenNameFloatingPointLiteral:
 		case TerminalTokens.TokenNameDoubleLiteral:
 		case TerminalTokens.TokenNameStringLiteral:
+		case TerminalTokens.TokenNameTextBlock:
 		case TerminalTokens.TokenNameCharacterLiteral:
 			return true;
 		default:
@@ -4436,6 +4630,9 @@
 		case TerminalTokens.TokenNamevolatile:
 		case TerminalTokens.TokenNamewhile:
 			return true;
+		case TerminalTokens.TokenNameRestrictedIdentifierYield:
+			// making explicit - yield not a (restricted) keyword but restricted identifier.
+			//$FALL-THROUGH$
 		default:
 			return false;
 	}
@@ -4488,12 +4685,14 @@
 	static int ReferenceExpressionRule = 0;
 	static int VarargTypeAnnotationsRule  = 0;
 	static int BlockStatementoptRule = 0;
+	static int YieldStatementRule = 0;
 	
 	static Goal LambdaParameterListGoal;
 	static Goal IntersectionCastGoal;
 	static Goal VarargTypeAnnotationGoal;
 	static Goal ReferenceExpressionGoal;
 	static Goal BlockStatementoptGoal;
+	static Goal YieldStatementGoal;
 	
 	static {
 		
@@ -4512,6 +4711,9 @@
 			else
 			if ("BlockStatementopt".equals(Parser.name[Parser.non_terminal_index[Parser.lhs[i]]])) //$NON-NLS-1$
 				BlockStatementoptRule = i;
+			else
+			if ("YieldStatement".equals(Parser.name[Parser.non_terminal_index[Parser.lhs[i]]])) //$NON-NLS-1$
+				YieldStatementRule = i;
 					
 		}
 		
@@ -4520,6 +4722,7 @@
 		VarargTypeAnnotationGoal = new Goal(TokenNameAT, new int[] { TokenNameELLIPSIS }, VarargTypeAnnotationsRule);
 		ReferenceExpressionGoal =  new Goal(TokenNameLESS, new int[] { TokenNameCOLON_COLON }, ReferenceExpressionRule);
 		BlockStatementoptGoal =    new Goal(TokenNameLBRACE, new int [0], BlockStatementoptRule);
+		YieldStatementGoal =       new Goal(TokenNameARROW, new int [0], YieldStatementRule);
 	}
 
 
@@ -4548,7 +4751,7 @@
 	private static int [] followSetOfCast() {
 		return new int [] { TokenNameIdentifier, TokenNamenew, TokenNamesuper, TokenNamethis,
 				TokenNamefalse, TokenNametrue, TokenNamenull, 
-				TokenNameIntegerLiteral, TokenNameLongLiteral, TokenNameFloatingPointLiteral, TokenNameDoubleLiteral, TokenNameCharacterLiteral, TokenNameStringLiteral, 
+				TokenNameIntegerLiteral, TokenNameLongLiteral, TokenNameFloatingPointLiteral, TokenNameDoubleLiteral, TokenNameCharacterLiteral, TokenNameStringLiteral, TokenNameTextBlock,
 				TokenNameNOT, TokenNameTWIDDLE, TokenNameLPAREN
 		};
 	}
@@ -4663,6 +4866,7 @@
 		};
 		this.scanner.recordLineSeparator = false;
 		this.scanner.setActiveParser(this);
+		this.scanner.previewEnabled = this.options.enablePreviewFeatures;
 	}
 
 	@Override
@@ -4805,6 +5009,96 @@
 			return false;
 	}
 }
+private boolean mayBeAtAnYieldStatement() {
+	// preceded by ;, {, }, ), or -> [Ref: http://mail.openjdk.java.net/pipermail/amber-spec-experts/2019-May/001401.html]
+	// above comment is super-seded by http://mail.openjdk.java.net/pipermail/amber-spec-experts/2019-May/001414.html
+	switch (this.lookBack[1]) {
+		case TokenNameLBRACE:
+		case TokenNameRBRACE:
+		case TokenNameRPAREN:
+		case TokenNameSEMICOLON:
+		case TokenNameelse:
+		case TokenNamedo:
+			return true;
+		case TokenNameCOLON:
+			return this.lookBack[0] == TokenNamedefault || this.yieldColons == 1;
+		case TokenNameDOT:
+		case TokenNameARROW:
+		default:
+			return false;
+	}
+}
+private boolean disambiguateYieldWithLookAhead() {
+	getVanguardParser();
+	this.vanguardScanner.resetTo(this.currentPosition, this.eofPosition - 1);
+	try {
+		int lookAhead1 = this.vanguardScanner.getNextToken();
+		switch (lookAhead1) {
+			case TokenNameEQUAL_EQUAL :
+			case TokenNameLESS_EQUAL :
+			case TokenNameGREATER_EQUAL :
+			case TokenNameNOT_EQUAL :
+			case TokenNameLEFT_SHIFT :
+			case TokenNameRIGHT_SHIFT :
+			case TokenNameUNSIGNED_RIGHT_SHIFT :
+			case TokenNamePLUS_EQUAL :
+			case TokenNameMINUS_EQUAL :
+			case TokenNameMULTIPLY_EQUAL :
+			case TokenNameDIVIDE_EQUAL :
+			case TokenNameAND_EQUAL :
+			case TokenNameOR_EQUAL :
+			case TokenNameXOR_EQUAL :
+			case TokenNameREMAINDER_EQUAL :
+			case TokenNameLEFT_SHIFT_EQUAL :
+			case TokenNameRIGHT_SHIFT_EQUAL :
+			case TokenNameUNSIGNED_RIGHT_SHIFT_EQUAL :
+			case TokenNameOR_OR :
+			case TokenNameAND_AND :
+			case TokenNameREMAINDER :
+			case TokenNameXOR :
+			case TokenNameAND :
+			case TokenNameMULTIPLY :
+			case TokenNameOR :
+			case TokenNameTWIDDLE :
+			case TokenNameDIVIDE :
+			case TokenNameGREATER :
+			case TokenNameLESS :
+			case TokenNameLBRACE :
+			case TokenNameRBRACE :
+			case TokenNameLBRACKET :
+			case TokenNameRBRACKET :
+			case TokenNameSEMICOLON :
+			case TokenNameQUESTION :
+			case TokenNameCOLON :
+			case TokenNameCOMMA :
+			case TokenNameDOT :
+			case TokenNameEQUAL :
+			case TokenNameAT :
+			case TokenNameELLIPSIS :
+			case TokenNameARROW :
+			case TokenNameCOLON_COLON :
+				return false;
+			case TokenNameMINUS_MINUS :
+			case TokenNamePLUS_PLUS :
+				int lookAhead2 = this.vanguardScanner.getNextToken();
+				return lookAhead2 == TokenNameIdentifier;
+			default : return true;
+		}
+	} catch (InvalidInputException e) {
+		e.printStackTrace();
+	}
+	return false; // IIE event;
+}
+int disambiguatedRestrictedIdentifierYield(int restrictedIdentifierToken) {
+	// and here's the kludge
+	if (restrictedIdentifierToken != TokenNameRestrictedIdentifierYield)
+		return restrictedIdentifierToken;
+	if (this.sourceLevel < ClassFileConstants.JDK13 || !this.previewEnabled)
+		return TokenNameIdentifier;
+
+	return mayBeAtAnYieldStatement() && disambiguateYieldWithLookAhead() ?
+			restrictedIdentifierToken : TokenNameIdentifier;
+}
 int disambiguatedRestrictedKeyword(int restrictedKeywordToken) {
 	int token = restrictedKeywordToken;
 	if (this.scanContext == ScanContext.EXPECTING_IDENTIFIER)
@@ -4844,11 +5138,7 @@
 }
 int disambiguatedToken(int token) {
 	final VanguardParser parser = getVanguardParser();
-	if (token == TokenNamebreak  && this.sourceLevel == ClassFileConstants.JDK12 &&
-			this.previewEnabled && mayBeAtBreakPreview()) {
-		this.nextToken = TokenNameBreakPreviewMarker;
-		return token;
-	} else if (token == TokenNameARROW  && this.inCase) {
+	if (token == TokenNameARROW  && this.inCase) {
 		this.nextToken = TokenNameARROW;
 		this.inCase = false;
 		return TokenNameBeginCaseExpr;
@@ -4951,6 +5241,7 @@
 			case TokenNameDoubleLiteral:
 			case TokenNameCharacterLiteral:
 			case TokenNameStringLiteral:
+			case TokenNameTextBlock:
 			case TokenNamePLUS_PLUS:
 			case TokenNameMINUS_MINUS:
 			case TokenNameLESS:
@@ -4959,6 +5250,7 @@
 			case TokenNameAT:
 			case TokenNameBeginLambda:
 			case TokenNameAT308:
+			case TokenNameRestrictedIdentifierYield: // can be in FOLLOW of Block
 				if(getVanguardParser().parse(Goal.BlockStatementoptGoal) == VanguardParser.SUCCESS)
 					return token;
 				break;
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/ScannerHelper.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/ScannerHelper.java
index d82322a..59ec2cd 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/ScannerHelper.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/ScannerHelper.java
@@ -47,6 +47,7 @@
 	private static long[][][] Tables9;
 	private static long[][][] Tables11;
 	private static long[][][] Tables12;
+	private static long[][][] Tables13;
 
 	public final static int MAX_OBVIOUS = 128;
 	public final static int[] OBVIOUS_IDENT_CHAR_NATURES = new int[MAX_OBVIOUS];
@@ -154,6 +155,9 @@
 static void initializeTableJava12() {
 	Tables12 = initializeTables("unicode11"); //$NON-NLS-1$
 }
+static void initializeTableJava13() {
+	Tables13 = initializeTables("unicode12_1"); //$NON-NLS-1$
+}
 static long[][][] initializeTables(String unicode_path) {
 	long[][][] tempTable = new long[2][][];
 	tempTable[START_INDEX] = new long[3][];
@@ -285,12 +289,18 @@
 			initializeTableJava11();
 		}
 		return isJavaIdentifierPart0(codePoint, Tables11);
-	} else {
+	} else if (complianceLevel <= ClassFileConstants.JDK12) {
 		// java 12 supports Unicode 11
 		if (Tables12 == null) {
 			initializeTableJava12();
 		}
 		return isJavaIdentifierPart0(codePoint, Tables12);
+	} else {
+		// java 13 supports Unicode 12.1
+		if (Tables13 == null) {
+			initializeTableJava13();
+		}
+		return isJavaIdentifierPart0(codePoint, Tables13);
 	}
 }
 public static boolean isJavaIdentifierPart(long complianceLevel, char high, char low) {
@@ -352,13 +362,18 @@
 			initializeTableJava11();
 		}
 		return isJavaIdentifierStart0(codePoint, Tables11);
-	} else {
-		
+	} else if (complianceLevel <= ClassFileConstants.JDK12) {
 		// java 12 supports Unicode 11
 		if (Tables12 == null) {
 			initializeTableJava12();
 		}
 		return isJavaIdentifierStart0(codePoint, Tables12);
+	} else {
+		// java 13 supports Unicode 12.1
+		if (Tables13 == null) {
+			initializeTableJava13();
+		}
+		return isJavaIdentifierStart0(codePoint, Tables13);
 	}
 }
 private static int toCodePoint(char high, char low) {
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/TerminalTokens.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/TerminalTokens.java
index 933a888..dcc010c 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/TerminalTokens.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/TerminalTokens.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
  *******************************************************************************/
@@ -39,74 +43,75 @@
 
 	int TokenNameIdentifier = 22,
 							TokenNameabstract = 52,
-							TokenNameassert = 76,
-							TokenNameboolean = 99,
-							TokenNamebreak = 77,
-							TokenNamebyte = 100,
-							TokenNamecase = 101,
-							TokenNamecatch = 102,
-							TokenNamechar = 103,
-							TokenNameclass = 67,
-							TokenNamecontinue = 78,
-							TokenNameconst = 128,
-							TokenNamedefault = 73,
-							TokenNamedo = 79,
-							TokenNamedouble = 104,
-							TokenNameelse = 112,
-							TokenNameenum = 71,
-							TokenNameextends = 86,
+							TokenNameassert = 78,
+							TokenNameboolean = 101,
+							TokenNamebreak = 79,
+							TokenNamebyte = 102,
+							TokenNamecase = 103,
+							TokenNamecatch = 104,
+							TokenNamechar = 105,
+							TokenNameclass = 68,
+							TokenNamecontinue = 80,
+							TokenNameconst = 129,
+							TokenNamedefault = 74,
+							TokenNamedo = 81,
+							TokenNamedouble = 106,
+							TokenNameelse = 114,
+							TokenNameenum = 72,
+							TokenNameextends = 88,
 							TokenNamefalse = 38,
 							TokenNamefinal = 53,
-							TokenNamefinally = 111,
-							TokenNamefloat = 105,
-							TokenNamefor = 80,
-							TokenNamegoto = 129,
-							TokenNameif = 81,
-							TokenNameimplements = 123,
-							TokenNameimport = 106,
+							TokenNamefinally = 113,
+							TokenNamefloat = 107,
+							TokenNamefor = 82,
+							TokenNamegoto = 130,
+							TokenNameif = 83,
+							TokenNameimplements = 125,
+							TokenNameimport = 108,
 							TokenNameinstanceof = 17,
-							TokenNameint = 107,
-							TokenNameinterface = 70,
-							TokenNamelong = 108,
+							TokenNameint = 109,
+							TokenNameinterface = 71,
+							TokenNamelong = 110,
 							TokenNamenative = 54,
 							TokenNamenew = 36,
 							TokenNamenull = 39,
-							TokenNamepackage = 85,
+							TokenNamepackage = 87,
 							TokenNameprivate = 55,
 							TokenNameprotected = 56,
 							TokenNamepublic = 57,
-							TokenNamereturn = 82,
-							TokenNameshort = 109,
-							TokenNamestatic = 48,
+							TokenNamereturn = 84,
+							TokenNameshort = 111,
+							TokenNamestatic = 40,
 							TokenNamestrictfp = 58,
 							TokenNamesuper = 34,
-							TokenNameswitch = 51,
-							TokenNamesynchronized = 50,
+							TokenNameswitch = 59,
+							TokenNamesynchronized = 51,
 							TokenNamethis = 35,
-							TokenNamethrow = 74,
-							TokenNamethrows = 120,
-							TokenNametransient = 59,
-							TokenNametrue = 40,
-							TokenNametry = 83,
-							TokenNamevoid = 110,
-							TokenNamevolatile = 60,
-							TokenNamewhile = 75,
-							TokenNamemodule = 113,
-							TokenNameopen = 114,
-							TokenNamerequires = 115,
-							TokenNametransitive = 121,
-							TokenNameexports = 116,
-							TokenNameopens = 117,
-							TokenNameto = 124,
-							TokenNameuses = 118,
-							TokenNameprovides = 119,
-							TokenNamewith = 125,
-							TokenNameIntegerLiteral = 41,
-							TokenNameLongLiteral = 42,
-							TokenNameFloatingPointLiteral = 43,
-							TokenNameDoubleLiteral = 44,
-							TokenNameCharacterLiteral = 45,
-							TokenNameStringLiteral = 46,
+							TokenNamethrow = 75,
+							TokenNamethrows = 122,
+							TokenNametransient = 60,
+							TokenNametrue = 41,
+							TokenNametry = 85,
+							TokenNamevoid = 112,
+							TokenNamevolatile = 61,
+							TokenNamewhile = 76,
+							TokenNamemodule = 115,
+							TokenNameopen = 116,
+							TokenNamerequires = 117,
+							TokenNametransitive = 123,
+							TokenNameexports = 118,
+							TokenNameopens = 119,
+							TokenNameto = 126,
+							TokenNameuses = 120,
+							TokenNameprovides = 121,
+							TokenNamewith = 127,
+							TokenNameIntegerLiteral = 42,
+							TokenNameLongLiteral = 43,
+							TokenNameFloatingPointLiteral = 44,
+							TokenNameDoubleLiteral = 45,
+							TokenNameCharacterLiteral = 46,
+							TokenNameStringLiteral = 47,
+							TokenNameTextBlock = 48,
 							TokenNamePLUS_PLUS = 2,
 							TokenNameMINUS_MINUS = 3,
 							TokenNameEQUAL_EQUAL = 19,
@@ -116,28 +121,28 @@
 							TokenNameLEFT_SHIFT = 18,
 							TokenNameRIGHT_SHIFT = 14,
 							TokenNameUNSIGNED_RIGHT_SHIFT = 16,
-							TokenNamePLUS_EQUAL = 87,
-							TokenNameMINUS_EQUAL = 88,
-							TokenNameMULTIPLY_EQUAL = 89,
-							TokenNameDIVIDE_EQUAL = 90,
-							TokenNameAND_EQUAL = 91,
-							TokenNameOR_EQUAL = 92,
-							TokenNameXOR_EQUAL = 93,
-							TokenNameREMAINDER_EQUAL = 94,
-							TokenNameLEFT_SHIFT_EQUAL = 95,
-							TokenNameRIGHT_SHIFT_EQUAL = 96,
-							TokenNameUNSIGNED_RIGHT_SHIFT_EQUAL = 97,
+							TokenNamePLUS_EQUAL = 89,
+							TokenNameMINUS_EQUAL = 90,
+							TokenNameMULTIPLY_EQUAL = 91,
+							TokenNameDIVIDE_EQUAL = 92,
+							TokenNameAND_EQUAL = 93,
+							TokenNameOR_EQUAL = 94,
+							TokenNameXOR_EQUAL = 95,
+							TokenNameREMAINDER_EQUAL = 96,
+							TokenNameLEFT_SHIFT_EQUAL = 97,
+							TokenNameRIGHT_SHIFT_EQUAL = 98,
+							TokenNameUNSIGNED_RIGHT_SHIFT_EQUAL = 99,
 							TokenNameOR_OR = 31,
 							TokenNameAND_AND = 30,
 							TokenNamePLUS = 4,
 							TokenNameMINUS = 5,
-							TokenNameNOT = 63,
+							TokenNameNOT = 64,
 							TokenNameREMAINDER = 9,
 							TokenNameXOR = 24,
 							TokenNameAND = 21,
 							TokenNameMULTIPLY = 8,
-							TokenNameOR = 28,
-							TokenNameTWIDDLE = 64,
+							TokenNameOR = 27,
+							TokenNameTWIDDLE = 65,
 							TokenNameDIVIDE = 10,
 							TokenNameGREATER = 15,
 							TokenNameLESS = 11,
@@ -146,25 +151,25 @@
 							TokenNameLBRACE = 49,
 							TokenNameRBRACE = 33,
 							TokenNameLBRACKET = 6,
-							TokenNameRBRACKET = 66,
+							TokenNameRBRACKET = 67,
 							TokenNameSEMICOLON = 25,
 							TokenNameQUESTION = 29,
-							TokenNameCOLON = 62,
+							TokenNameCOLON = 63,
 							TokenNameCOMMA = 32,
 							TokenNameDOT = 1,
-							TokenNameEQUAL = 72,
+							TokenNameEQUAL = 73,
 							TokenNameAT = 37,
-							TokenNameELLIPSIS = 122,
-							TokenNameARROW = 98,
+							TokenNameELLIPSIS = 124,
+							TokenNameARROW = 100,
 							TokenNameCOLON_COLON = 7,
-							TokenNameBeginLambda = 47,
-							TokenNameBeginIntersectionCast = 65,
-							TokenNameBeginTypeArguments = 84,
-							TokenNameElidedSemicolonAndRightBrace = 68,
-							TokenNameAT308 = 27,
-							TokenNameAT308DOTDOTDOT = 126,
-							TokenNameBeginCaseExpr = 69,
-							TokenNameBreakPreviewMarker = 127,
-							TokenNameEOF = 61,
-							TokenNameERROR = 130;
+							TokenNameBeginLambda = 50,
+							TokenNameBeginIntersectionCast = 66,
+							TokenNameBeginTypeArguments = 86,
+							TokenNameElidedSemicolonAndRightBrace = 69,
+							TokenNameAT308 = 28,
+							TokenNameAT308DOTDOTDOT = 128,
+							TokenNameBeginCaseExpr = 70,
+							TokenNameRestrictedIdentifierYield = 77,
+							TokenNameEOF = 62,
+							TokenNameERROR = 131;
 }
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/diagnose/DiagnoseParser.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/diagnose/DiagnoseParser.java
index 719f1aa..ca89a85 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/diagnose/DiagnoseParser.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/diagnose/DiagnoseParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2014 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
  *******************************************************************************/
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser1.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser1.rsc
index 4d51c7a..52334ae 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser1.rsc
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser1.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser10.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser10.rsc
index 4c4973b..b967ced 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser10.rsc
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser10.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser11.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser11.rsc
index 3a68740..a3846c0 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser11.rsc
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser11.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser12.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser12.rsc
index b347b62..df41dc1 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser12.rsc
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser12.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser13.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser13.rsc
index 0e96f31..5247d00 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser13.rsc
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser13.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser14.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser14.rsc
index 2861812..eb9a79c 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser14.rsc
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser14.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser15.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser15.rsc
index fa54266..9858fb8 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser15.rsc
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser15.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser16.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser16.rsc
index c3826f4..aa8fbda 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser16.rsc
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser16.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser17.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser17.rsc
index 97366ec..713085f 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser17.rsc
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser17.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser18.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser18.rsc
index b9ffe02..9f6e258 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser18.rsc
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser18.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser19.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser19.rsc
index 51dd3aa..62357ba 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser19.rsc
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser19.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser2.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser2.rsc
index ccce9df..3f3f04a 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser2.rsc
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser2.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser20.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser20.rsc
index b0029d5..59f8218 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser20.rsc
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser20.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser21.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser21.rsc
index c201d9b..851824b 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser21.rsc
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser21.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser22.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser22.rsc
index ad9e312..b54da0c 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser22.rsc
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser22.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser23.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser23.rsc
index 03b54e6..7b26950 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser23.rsc
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser23.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser24.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser24.rsc
index 5b4675f..12926e5 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser24.rsc
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser24.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser3.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser3.rsc
index 0ecda88..0133cd6 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser3.rsc
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser3.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser4.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser4.rsc
index 4ee5cbe..20dca0a 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser4.rsc
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser4.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser5.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser5.rsc
index 3a519c6..7c37f17 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser5.rsc
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser5.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser6.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser6.rsc
index ed603bb..9826ddd 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser6.rsc
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser6.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser7.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser7.rsc
index 6e1a63e..96f7f6d 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser7.rsc
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser7.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser8.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser8.rsc
index f29bb3c..0f46a22 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser8.rsc
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser8.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser9.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser9.rsc
index bb709b8..e73b7ac 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser9.rsc
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/parser9.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/readableNames.props b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/readableNames.props
index 64eb6d9..5859a30 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/readableNames.props
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/readableNames.props
@@ -365,3 +365,4 @@
 WildcardBounds2=WildcardBounds2
 WildcardBounds3=WildcardBound3
 WildcardBounds=WildcardBounds
+YieldStatement=YieldStatement
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/unicode12_1/part0.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/unicode12_1/part0.rsc
new file mode 100644
index 0000000..957b887
--- /dev/null
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/unicode12_1/part0.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/unicode12_1/part1.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/unicode12_1/part1.rsc
new file mode 100644
index 0000000..9ad9b09
--- /dev/null
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/unicode12_1/part1.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/unicode12_1/part14.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/unicode12_1/part14.rsc
new file mode 100644
index 0000000..c8241e8
--- /dev/null
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/unicode12_1/part14.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/unicode12_1/part2.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/unicode12_1/part2.rsc
new file mode 100644
index 0000000..ab6b33e
--- /dev/null
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/unicode12_1/part2.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/unicode12_1/start0.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/unicode12_1/start0.rsc
new file mode 100644
index 0000000..ce615fa
--- /dev/null
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/unicode12_1/start0.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/unicode12_1/start1.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/unicode12_1/start1.rsc
new file mode 100644
index 0000000..3ef6c46
--- /dev/null
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/unicode12_1/start1.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/unicode12_1/start2.rsc b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/unicode12_1/start2.rsc
new file mode 100644
index 0000000..ab6b33e
--- /dev/null
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/unicode12_1/start2.rsc
Binary files differ
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/DefaultProblem.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/DefaultProblem.java
index 047dd4f..2ea5460 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/DefaultProblem.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/DefaultProblem.java
@@ -178,6 +178,8 @@
 			return "restriction"; //$NON-NLS-1$
 		case CAT_MODULE:
 			return "module"; //$NON-NLS-1$
+		case CAT_PREVIEW_RELATED:
+			return "preview related"; //$NON-NLS-1$
 	}
 	return null;
 }
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java
index 6d95c7f..f0b386d 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.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
@@ -814,6 +818,8 @@
 				return CategorizedProblem.CAT_MODULE;
 			if ((problemID & IProblem.Compliance) != 0)
 				return CategorizedProblem.CAT_COMPLIANCE;
+			if ((problemID & IProblem.PreviewRelated) != 0)
+				return CategorizedProblem.CAT_PREVIEW_RELATED;
 	}
 	return CategorizedProblem.CAT_INTERNAL;
 }
@@ -830,6 +836,16 @@
 		location == null ? 0 : location.sourceStart,
 		location == null ? 0 : location.sourceEnd);
 }
+public void abortDueToPreviewEnablingNotAllowed(String sourceLevel, String expectedSourceLevel) {
+	String[] args = new String[] {sourceLevel, expectedSourceLevel};
+	this.handle(
+			IProblem.PreviewFeaturesNotAllowed,
+			args,
+			args,
+			ProblemSeverities.Error | ProblemSeverities.Abort | ProblemSeverities.Fatal,
+			0,
+			0);
+}
 public void abstractMethodCannotBeOverridden(SourceTypeBinding type, MethodBinding concreteMethod) {
 
 	this.handle(
@@ -1599,7 +1615,10 @@
 
 	switch (problemID) {
 		case IProblem.VarargsConflict :
-			return ProblemSeverities.Warning;
+ 		case IProblem.SwitchExpressionsYieldUnqualifiedMethodWarning:
+ 		case IProblem.SwitchExpressionsYieldRestrictedGeneralWarning:
+ 		case IProblem.SwitchExpressionsYieldTypeDeclarationWarning:
+ 			return ProblemSeverities.Warning;
  		case IProblem.TypeCollidesWithPackage :
 			return ProblemSeverities.Error;
 
@@ -5091,6 +5110,9 @@
 		case TerminalTokens.TokenNamevolatile:
 		case TerminalTokens.TokenNamewhile:
 			return true;
+		case TerminalTokens.TokenNameRestrictedIdentifierYield:
+			// making explicit - yield not a (restricted) keyword but restricted identifier.
+			//$FALL-THROUGH$
 		default:
 			return false;
 	}
@@ -6511,7 +6533,7 @@
 }
 private void missingSwitchExpressionEnumConstantCase(CaseStatement defaultCase, FieldBinding enumConstant, ASTNode expression) {
 	this.handle(
-			IProblem.SwitchExpressionMissingEnumConstantCase,
+			IProblem.SwitchExpressionsYieldMissingEnumConstantCase,
 			new String[] {new String(enumConstant.declaringClass.readableName()), new String(enumConstant.name) },
 			new String[] {new String(enumConstant.declaringClass.shortReadableName()), new String(enumConstant.name) },
 			expression.sourceStart,
@@ -6536,7 +6558,7 @@
 	} else {
 		this.handle(
 				switchStatement instanceof SwitchExpression ?
-						IProblem.SwitchExpressionMissingDefaultCase : IProblem.MissingDefaultCase,
+						IProblem.SwitchExpressionsYieldMissingDefaultCase : IProblem.MissingDefaultCase,
 				NoArgument,
 				NoArgument,
 				switchStatement.expression.sourceStart,
@@ -7904,6 +7926,8 @@
 		flag = IProblem.InvalidFloat;
 	else if (errorTokenName.equals(Scanner.UNTERMINATED_STRING))
 		flag = IProblem.UnterminatedString;
+	else if (errorTokenName.equals(Scanner.UNTERMINATED_TEXT_BLOCK))
+		flag = IProblem.UnterminatedTextBlock;
 	else if (errorTokenName.equals(Scanner.UNTERMINATED_COMMENT))
 		flag = IProblem.UnterminatedComment;
 	else if (errorTokenName.equals(Scanner.INVALID_CHAR_IN_STRING))
@@ -8129,6 +8153,8 @@
 		return "."; //$NON-NLS-1$
 	if (token.equals("BeginLambda")) //$NON-NLS-1$
 		return "("; //$NON-NLS-1$
+	if (token.equals("RestrictedIdentifierYield")) //$NON-NLS-1$
+		return "yield"; //$NON-NLS-1$
 	return token;
 }
 public void task(String tag, String message, String priority, int start, int end){
@@ -11066,7 +11092,7 @@
 		return;
 	TypeBinding type = expression.resultExpressions.get(0).resolvedType;
 	this.handle(
-		IProblem.SwitchExpressionsIncompatibleResultExpressionTypes,
+		IProblem.SwitchExpressionsYieldIncompatibleResultExpressionTypes,
 		new String[] {new String(type.readableName())},
 		new String[] {new String(type.shortReadableName())},
 		expression.sourceStart,
@@ -11076,7 +11102,7 @@
 	if (!this.options.enablePreviewFeatures)
 		return;
 	this.handle(
-		IProblem.SwitchExpressionsEmptySwitchBlock,
+		IProblem.SwitchExpressionsYieldEmptySwitchBlock,
 		NoArgument,
 		NoArgument,
 		expression.sourceStart,
@@ -11086,7 +11112,7 @@
 	if (!this.options.enablePreviewFeatures)
 		return;
 	this.handle(
-		IProblem.SwitchExpressionsNoResultExpression,
+		IProblem.SwitchExpressionsYieldNoResultExpression,
 		NoArgument,
 		NoArgument,
 		expression.sourceStart,
@@ -11096,7 +11122,7 @@
 	if (!this.options.enablePreviewFeatures)
 		return;
 	this.handle(
-		IProblem.SwitchExpressionSwitchLabeledBlockCompletesNormally,
+		IProblem.SwitchExpressionaYieldSwitchLabeledBlockCompletesNormally,
 		NoArgument,
 		NoArgument,
 		block.sourceStart,
@@ -11106,7 +11132,7 @@
 	if (!this.options.enablePreviewFeatures)
 		return;
 	this.handle(
-		IProblem.SwitchExpressionSwitchLabeledBlockCompletesNormally,
+		IProblem.SwitchExpressionaYieldSwitchLabeledBlockCompletesNormally,
 		NoArgument,
 		NoArgument,
 		stmt.sourceStart,
@@ -11116,7 +11142,7 @@
 	if (!this.options.enablePreviewFeatures)
 		return;
 	this.handle(
-		IProblem.SwitchExpressionIllegalLastStatement,
+		IProblem.SwitchExpressionsYieldIllegalLastStatement,
 		NoArgument,
 		NoArgument,
 		stmt.sourceStart,
@@ -11126,7 +11152,7 @@
 	if (!this.options.enablePreviewFeatures)
 		return;
 	this.handle(
-		IProblem.SwitchExpressionTrailingSwitchLabels,
+		IProblem.SwitchExpressionsYieldTrailingSwitchLabels,
 		NoArgument,
 		NoArgument,
 		stmt.sourceStart,
@@ -11136,17 +11162,83 @@
 	if (!this.options.enablePreviewFeatures)
 		return;
 	this.handle(
-		IProblem.switchMixedCase,
+		IProblem.SwitchPreviewMixedCase,
 		NoArgument,
 		NoArgument,
 		statement.sourceStart,
 		statement.sourceEnd);
 }
-public void switchExpressionBreakMissingValue(ASTNode statement) {
+public void switchExpressionBreakNotAllowed(ASTNode statement) {
 	if (!this.options.enablePreviewFeatures)
 		return;
 	this.handle(
-		IProblem.SwitchExpressionBreakMissingValue,
+		IProblem.SwitchExpressionsYieldBreakNotAllowed,
+		NoArgument,
+		NoArgument,
+		statement.sourceStart,
+		statement.sourceEnd);
+}
+public void switchExpressionsYieldUnqualifiedMethodWarning(ASTNode statement) {
+	this.handle(
+		IProblem.SwitchExpressionsYieldUnqualifiedMethodWarning,
+		NoArgument,
+		NoArgument,
+		statement.sourceStart,
+		statement.sourceEnd);
+}
+public void switchExpressionsYieldUnqualifiedMethodError(ASTNode statement) {
+	if (!this.options.enablePreviewFeatures)
+		return;
+	this.handle(
+		IProblem.SwitchExpressionsYieldUnqualifiedMethodError,
+		NoArgument,
+		NoArgument,
+		statement.sourceStart,
+		statement.sourceEnd);
+}
+public void switchExpressionsYieldOutsideSwitchExpression(ASTNode statement) {
+	if (!this.options.enablePreviewFeatures)
+		return;
+	this.handle(
+		IProblem.SwitchExpressionsYieldOutsideSwitchExpression,
+		NoArgument,
+		NoArgument,
+		statement.sourceStart,
+		statement.sourceEnd);
+}
+public void switchExpressionsYieldRestrictedGeneralWarning(ASTNode statement) {
+	if (!this.options.enablePreviewFeatures)
+		return;
+	this.handle(
+		IProblem.SwitchExpressionsYieldRestrictedGeneralWarning,
+		NoArgument,
+		NoArgument,
+		statement.sourceStart,
+		statement.sourceEnd);
+}
+public void switchExpressionsYieldIllegalStatement(ASTNode statement) {
+	if (!this.options.enablePreviewFeatures)
+		return;
+	this.handle(
+		IProblem.SwitchExpressionsYieldIllegalStatement,
+		NoArgument,
+		NoArgument,
+		statement.sourceStart,
+		statement.sourceEnd);
+}
+public void switchExpressionsYieldTypeDeclarationWarning(ASTNode statement) {
+	this.handle(
+		IProblem.SwitchExpressionsYieldTypeDeclarationWarning,
+		NoArgument,
+		NoArgument,
+		statement.sourceStart,
+		statement.sourceEnd);
+}
+public void switchExpressionsYieldTypeDeclarationError(ASTNode statement) {
+	if (!this.options.enablePreviewFeatures)
+		return;
+	this.handle(
+		IProblem.SwitchExpressionsYieldTypeDeclarationError,
 		NoArgument,
 		NoArgument,
 		statement.sourceStart,
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/messages.properties b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/messages.properties
index 33ac72c..10f878b 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/messages.properties
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/messages.properties
@@ -288,6 +288,7 @@
 268 = Underscores have to be located within digits
 269 = Underscores can only be used with source level 1.7 or greater
 271 = This lambda expression refers to the missing type {0}
+272 = Text block is not properly closed with the delimiter
 
 280 = Discouraged access: {0}
 
@@ -884,6 +885,7 @@
 1103 = {0} is a preview feature and disabled by default. Use --enable-preview to enable
 1104 = You are using a preview language feature that may or may not be supported in a future release
 1105 = The preview feature {0} is only available with source level {1} and above
+1106 = Preview features enabled at an invalid source release level {0}, preview can be enabled only at source level {1}
 
 # more programming problems:
 1200 = Unlikely argument type {0} for {1} on a {2}
@@ -973,7 +975,7 @@
 1511 = 'var' is not allowed here
 1512 = 'var' cannot be mixed with non-var parameters
 
-# Switch-Expressions
+# Switch-Expressions Java 12 Preview
 1600 = Incompatible switch results expressions {0}
 1601 = A switch expression should have a non-empty switch block
 1602 = A switch expression should have at least one result expression
@@ -988,6 +990,27 @@
 1611 = A Switch expression should cover all possible values
 1612 = 'continue' or 'return' cannot be the last statement in a Switch expression case body
 
+# Switch-Expressions Java 13 Preview
+1700 = Incompatible switch results expressions {0}
+1701 = A switch expression should have a non-empty switch block
+1702 = A switch expression should have at least one result expression
+1703 = A switch labeled block in a switch expression should not complete normally
+1704 = The last statement of a switch block in a switch expression should not complete normally
+1705 = Trailing switch labels are not allowed in a switch expression.
+1706 = Mixing of different kinds of case statements '->' and  ':' is not allowed within a switch
+1707 = A switch expression should have a default case
+1708 = yield of a switch expression should have a value
+1709 = A Switch expression should cover all possible values
+1710 = 'continue' or 'return' cannot be the last statement in a Switch expression case body
+1711 = break out of switch expression not allowed
+1712 = yield may be disallowed in future - qualify method calls to avoid this message
+1713 = restricted identifier yield not allowed here - method calls need to be qualified
+1714 = yield outside of switch expression
+1715 = yield is a restricted keyword and may be disallowed in future
+1716 = yield statement is illegal here
+1717 = yield may be a restricted identifier in future and may be disallowed as a type name
+1718 = yield is a restricted identifier and cannot be used as type name
+
 ### ELABORATIONS
 ## Access restrictions
 78592 = The type ''{1}'' is not API (restriction on classpath entry ''{0}'')
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/util/Messages.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/util/Messages.java
index 53169bf..0f4885d 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/util/Messages.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/util/Messages.java
@@ -116,6 +116,7 @@
 	public static String ast_missingCode;
 	public static String constant_cannotCastedInto;
 	public static String constant_cannotConvertedTo;
+	public static String abort_againstPreviewNotAllowed;
 
 	static {
 		initializeMessages(BUNDLE_NAME, Messages.class);
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AST.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AST.java
index 44a12d8..8b28470 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AST.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AST.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
  *******************************************************************************/
@@ -17,6 +21,8 @@
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.StringTokenizer;
@@ -119,7 +125,7 @@
      * </p>
      *
 	 * @since 3.0
-	 * @deprecated Clients should use the {@link #JLS11} AST API instead.
+	 * @deprecated Clients should use the  {@link #JLS_Latest} AST API instead.
 	 */
 	public static final int JLS2 = 2;
 
@@ -143,7 +149,7 @@
      * </p>
      *
 	 * @since 3.1
-	 * @deprecated Clients should use the {@link #JLS11} AST API instead.
+	 * @deprecated Clients should use the {@link #JLS_Latest} AST API instead.
 	 */
 	public static final int JLS3 = 3;
 	
@@ -167,7 +173,7 @@
 	 * </p>
 	 *
 	 * @since 3.7.1
-	 * @deprecated Clients should use the {@link #JLS11} AST API instead.
+	 * @deprecated Clients should use the {@link #JLS_Latest} AST API instead.
 	 */
 	public static final int JLS4 = 4;
 	
@@ -191,7 +197,7 @@
 	 * </p>
 	 *
 	 * @since 3.10
-	 * @deprecated Clients should use the {@link #JLS11} AST API instead.
+	 * @deprecated Clients should use the {@link #JLS_Latest} AST API instead.
 	 */
 	public static final int JLS8 = 8;
 
@@ -215,7 +221,7 @@
 	 * </p>
 	 *
 	 * @since 3.14
-	 * @deprecated Clients should use the {@link #JLS11} AST API instead.
+	 * @deprecated Clients should use the {@link #JLS_Latest} AST API instead.
 	 */
 	public static final int JLS9 = 9;
 
@@ -239,7 +245,7 @@
 	 * </p>
 	 *
 	 * @since 3.14
-	 * @deprecated Clients should use the {@link #JLS11} AST API instead.
+	 * @deprecated Clients should use the {@link #JLS_Latest} AST API instead.
 	 */
 	public static final int JLS10 = 10;
 
@@ -262,6 +268,7 @@
 	 * up to and including Java SE 11 (aka JDK 11).
 	 * </p>
 	 *
+	 * @deprecated Clients should use the {@link #JLS_Latest} AST API instead.
 	 * @since 3.16
 	 */
 	public static final int JLS11 = 11;
@@ -284,7 +291,7 @@
 	 * programs written in all versions of the Java language
 	 * up to and including Java SE 12 (aka JDK 12).
 	 * </p>
-	 *
+	 * @deprecated Clients should use the {@link #JLS_Latest} AST API instead.
 	 * @since 3.18
 	 */
 	public static final int JLS12 = 12;
@@ -294,12 +301,43 @@
 	 * @since 3.18 
 	 */
 	static final int JLS12_INTERNAL = JLS12;
+	
+	/**
+	 * Constant for indicating the AST API that handles JLS13.
+	 * <p>
+	 * This API is capable of handling all constructs in the
+	 * Java language as described in the Java Language
+	 * Specification, Java SE 13 Edition (JLS13).
+	 * JLS13 is a superset of all earlier versions of the
+	 * Java language, and the JLS13 API can be used to manipulate
+	 * programs written in all versions of the Java language
+	 * up to and including Java SE 13 (aka JDK 13).
+	 * </p>
+	 *
+	 * @since 3.19 BETA_JAVA13
+	 */
+	public static final int JLS13 = 13;
+	
+	/**
+	 * Internal synonym for {@link #JLS13}. Use to alleviate
+	 * deprecation warnings once JLS13 is deprecated
+	 * @since 3.19 BETA_JAVA13 
+	 */
+	static final int JLS13_INTERNAL = JLS13;
 
+	@SuppressWarnings("unused")
+	/* Used for Java doc only*/
+	private static final int JLS_Latest = JLS13;
+	
 	/*
 	 * Must not collide with a value for ICompilationUnit constants
 	 */
 	static final int RESOLVED_BINDINGS = 0x80000000;
 
+	private static Map<String, Long> jdkLevelMap = getLevelMapTable();
+
+	private static Map<String, Integer> apiLevelMap = getApiLevelMapTable();
+
 	/**
 	 * Internal method.
 	 * <p>
@@ -440,6 +478,38 @@
 	}
 
 	/**
+	 * Creates a new Java abstract syntax tree
+	 * <p>
+	 * Following option keys are significant:
+	 * <ul>
+	 * <li><code>"org.eclipse.jdt.core.compiler.source"</code>
+	 *    indicates the api level and source compatibility mode (as per <code>JavaCore</code>) - defaults to 1.3
+	 *    <ul>
+	 *    	<li>
+	 *    	<code>"1.3"</code> means the source code is as per JDK 1.3 and api level {@link #JLS3}.</li>
+	 *    	<li><code>"1.4", "1.5", "1.6", "1.7" "1.8"</code> implies the respective source JDK levels 1.4, 1.5, 1.6, 1.7 and api level {@link #JLS4}.</li>
+	 *    	<li><code>"1.8"</code> implies the respective source JDK level 1.8 and api level {@link #JLS8}.</li>
+	 *    	<li><code>"9", "10", "11" "12"</code> implies the respective JDK levels 9, 10, 11 and 12
+	 *     	and api levels {@link #JLS9}, {@link #JLS10}, {@link #JLS11}, and {@link #JLS12}.</li>
+	 *    	Additional legal values may be added later.
+	 *    	</li>
+	 *    </ul>
+	 * <li><code>"org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures"</code> -
+	 *    indicates whether the preview is enabled or disabled
+	 *    legal values are <code>"enabled"</code> and  <code>"disabled"</code> implying preview enabled and disabled respectively.
+	 *    preview enabling has an effect only with the latest ast level.
+	 * </ul>
+	 * <p>
+	 * </p>
+	 *
+	 * @param options the table of options
+	 * @see JavaCore#getDefaultOptions()
+     * @since 3.19 BETA_JAVA13
+	 */
+	public static AST newAST(Map<String, String> options) {
+		return new AST(options);
+	}
+	/**
 	 * Parses the given string as a Java compilation unit and creates and
 	 * returns a corresponding abstract syntax tree.
 	 * <p>
@@ -922,57 +992,75 @@
 						true/*taskCaseSensitive*/,
 						previewEnabled);
 				break;
+			case JLS13_INTERNAL :
+				this.apiLevel = level;
+				// initialize a scanner
+				compliance = ClassFileConstants.getComplianceLevelForJavaVersion(ClassFileConstants.MAJOR_VERSION_13);
+				this.scanner = new Scanner(
+						true /*comment*/,
+						true /*whitespace*/,
+						false /*nls*/,
+						compliance /*sourceLevel*/,
+						compliance /*complianceLevel*/,
+						null/*taskTag*/,
+						null/*taskPriorities*/,
+						true/*taskCaseSensitive*/,
+						previewEnabled);
+				break;
 			default:
 				throw new IllegalArgumentException("Unsupported JLS level"); //$NON-NLS-1$
 		}
 	}
 
 	/**
-	 * Creates a new, empty abstract syntax tree using the given options.
+	 * Creates a new Java abstract syntax tree
 	 * <p>
 	 * Following option keys are significant:
 	 * <ul>
-	 * <li><code>"org.eclipse.jdt.core.compiler.source"</code> -
-	 *    indicates source compatibility mode (as per <code>JavaCore</code>);
-	 *    <code>"1.3"</code> means the source code is as per JDK 1.3;
-	 *    <code>"1.4"</code> means the source code is as per JDK 1.4
-	 *    (<code>"assert"</code> is now a keyword);
-	 *    <code>"1.5"</code> means the source code is as per JDK 1.5
-	 *    (<code>"enum"</code> is now a keyword);
-	 *    <code>"1.7"</code> means the source code is as per JDK 1.7;
-	 *    additional legal values may be added later. </li>
+	 * <li><code>"org.eclipse.jdt.core.compiler.source"</code>
+	 *    indicates the api level and source compatibility mode (as per <code>JavaCore</code>) - defaults to 1.3
+	 *    <ul>
+	 *    	<li>
+	 *    	<code>"1.3"</code> means the source code is as per JDK 1.3 and api level {@link #JLS3}.</li>
+	 *    	<li><code>"1.4", "1.5", "1.6", "1.7" "1.8"</code> implies the respective source JDK levels 1.4, 1.5, 1.6, 1.7 and api level {@link #JLS4}.</li>
+	 *    	<li><code>"1.8"</code> implies the respective source JDK level 1.8 and api level {@link #JLS8}.</li>
+	 *    	<li><code>"9", "10", "11" "12"</code> implies the respective JDK levels 9, 10, 11 and 12
+	 *     	and api levels {@link #JLS9}, {@link #JLS10}, {@link #JLS11}, and {@link #JLS12}.</li>
+	 *    	Additional legal values may be added later.
+	 *    	</li>
+	 *    </ul>
+	 * <li><code>"org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures"</code> -
+	 *    indicates whether the preview is enabled or disabled
+	 *    legal values are <code>"enabled"</code> and  <code>"disabled"</code> implying preview enabled and disabled respectively.
+	 *    preview enabling has an effect only with the latest ast level.
 	 * </ul>
 	 * <p>
-	 * Options other than the above are ignored.
 	 * </p>
 	 *
 	 * @param options the table of options (key type: <code>String</code>;
 	 *    value type: <code>String</code>)
 	 * @see JavaCore#getDefaultOptions()
-	 * @deprecated Clients should port their code to use the latest JLS* AST API and call
-	 *    {@link #newAST(int, boolean) AST.newAST(AST.JLS12, false)} instead of using this constructor.
 	 */
 	public AST(Map options) {
-		this(JLS2, false);
-		Object sourceLevelOption = options.get(JavaCore.COMPILER_SOURCE);
-		long sourceLevel = ClassFileConstants.JDK1_3;
-		if (JavaCore.VERSION_1_4.equals(sourceLevelOption)) {
-			sourceLevel = ClassFileConstants.JDK1_4;
-		} else if (JavaCore.VERSION_1_5.equals(sourceLevelOption)) {
-			sourceLevel = ClassFileConstants.JDK1_5;
-		} else if (JavaCore.VERSION_1_7.equals(sourceLevelOption)) {
-			sourceLevel = ClassFileConstants.JDK1_7;
+		this(apiLevelMap.get(options.get(JavaCore.COMPILER_SOURCE)),
+				JavaCore.ENABLED.equals(options.get(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES)));
+
+		long sourceLevel;
+		long complianceLevel;
+		switch(this.apiLevel) {
+			case JLS2_INTERNAL :
+			case JLS3_INTERNAL :
+				sourceLevel = ClassFileConstants.JDK1_3;
+				complianceLevel = ClassFileConstants.JDK1_5;
+				break;
+			case JLS4_INTERNAL :
+				sourceLevel = ClassFileConstants.JDK1_7;
+				complianceLevel = ClassFileConstants.JDK1_7;
+				break;
+			default :
+				sourceLevel = AST.jdkLevelMap.get(options.get(JavaCore.COMPILER_SOURCE));
+				complianceLevel = sourceLevel;
 		}
-		Object complianceLevelOption = options.get(JavaCore.COMPILER_COMPLIANCE);
-		long complianceLevel = ClassFileConstants.JDK1_3;
-		if (JavaCore.VERSION_1_4.equals(complianceLevelOption)) {
-			complianceLevel = ClassFileConstants.JDK1_4;
-		} else if (JavaCore.VERSION_1_5.equals(complianceLevelOption)) {
-			complianceLevel = ClassFileConstants.JDK1_5;
-		} else if (JavaCore.VERSION_1_7.equals(complianceLevelOption)) {
-			complianceLevel = ClassFileConstants.JDK1_7;
-		}
-		// override scanner if 1.4 or 1.5 asked for
 		this.scanner = new Scanner(
 			true /*comment*/,
 			true /*whitespace*/,
@@ -982,9 +1070,43 @@
 			null/*taskTag*/,
 			null/*taskPriorities*/,
 			true/*taskCaseSensitive*/,
-			JavaCore.ENABLED.equals(options.get(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES)));
+			this.previewEnabled /* isPreviewEnabled*/);
 	}
 
+	private static Map<String, Long> getLevelMapTable() {
+        Map<String, Long> t = new HashMap<>();
+        t.put(null, ClassFileConstants.JDK1_2);
+        t.put(JavaCore.VERSION_1_2, ClassFileConstants.JDK1_2);
+        t.put(JavaCore.VERSION_1_3, ClassFileConstants.JDK1_3);
+        t.put(JavaCore.VERSION_1_4, ClassFileConstants.JDK1_4);
+        t.put(JavaCore.VERSION_1_5, ClassFileConstants.JDK1_5);
+        t.put(JavaCore.VERSION_1_6, ClassFileConstants.JDK1_6);
+        t.put(JavaCore.VERSION_1_7, ClassFileConstants.JDK1_7);
+        t.put(JavaCore.VERSION_1_8, ClassFileConstants.JDK1_8);
+        t.put(JavaCore.VERSION_9, ClassFileConstants.JDK9);
+        t.put(JavaCore.VERSION_10, ClassFileConstants.JDK10);
+        t.put(JavaCore.VERSION_11, ClassFileConstants.JDK11);
+        t.put(JavaCore.VERSION_12, ClassFileConstants.JDK12);
+        t.put(JavaCore.VERSION_13, ClassFileConstants.JDK13);
+        return Collections.unmodifiableMap(t);
+	}
+	private static Map<String, Integer> getApiLevelMapTable() {
+        Map<String, Integer> t = new HashMap<>();
+        t.put(null, JLS2_INTERNAL);
+        t.put(JavaCore.VERSION_1_2, JLS2_INTERNAL);
+        t.put(JavaCore.VERSION_1_3, JLS3_INTERNAL);
+        t.put(JavaCore.VERSION_1_4, JLS4_INTERNAL);
+        t.put(JavaCore.VERSION_1_5, JLS4_INTERNAL);
+        t.put(JavaCore.VERSION_1_6, JLS4_INTERNAL);
+        t.put(JavaCore.VERSION_1_7, JLS4_INTERNAL);
+        t.put(JavaCore.VERSION_1_8, JLS8_INTERNAL);
+        t.put(JavaCore.VERSION_9, JLS9_INTERNAL);
+        t.put(JavaCore.VERSION_10, JLS10_INTERNAL);
+        t.put(JavaCore.VERSION_11, JLS11_INTERNAL);
+        t.put(JavaCore.VERSION_12, JLS12_INTERNAL);
+        t.put(JavaCore.VERSION_13, JLS13_INTERNAL);
+        return Collections.unmodifiableMap(t);
+	}
 	/**
 	 * Return the API level supported by this AST.
 	 *
@@ -2663,6 +2785,18 @@
 		TagElement result = new TagElement(this);
 		return result;
 	}
+	 
+	/**
+	 * Creates an unparented yield statement node owned by this AST. The yield statement has no
+	 * label/identifier/expression and is not implicit.
+	 *
+	 * @return a new unparented yield statement node
+	 * @since 3.19 BETA_JAVA13
+	 * @noreference This method is not intended to be referenced by clients.
+	 */
+	public TextBlock newTextBlock() {
+		return new TextBlock(this);
+	}
 
 	/**
 	 * Creates and returns a new text element node.
@@ -2965,6 +3099,18 @@
 	}
 
 	/**
+	 * Creates an unparented yield statement node owned by this AST. The yield statement has no
+	 * label/identifier/expression and is not implicit.
+	 *
+	 * @return a new unparented yield statement node
+	 * @since 3.19 BETA_JAVA13
+	 * @noreference This method is not intended to be referenced by clients.
+	 */
+	public YieldStatement newYieldStatement() {
+		return new YieldStatement(this);
+	}
+
+	/**
 	 * Reports that the given node has just gained a child.
 	 *
 	 * @param node the node that was modified
@@ -3460,10 +3606,13 @@
 
 	/**
 	 * 
-	 * @return previewEnabled
+	 * @return If preview is enabled and apiLevel is latest, return <code>true</code> else <code>false</code>
 	 * @since 3.19
 	 */
 	public boolean isPreviewEnabled() {
-		return this.previewEnabled;
+		if (this.apiLevel == AST.JLS13_INTERNAL && this.previewEnabled) {
+			return true;
+		}
+		return false;
 	}
 }
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java
index 2c38bc8..3aaae49 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java
@@ -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
@@ -1287,39 +1291,19 @@
 
 	public BreakStatement convert(org.eclipse.jdt.internal.compiler.ast.BreakStatement statement)  {
 		BreakStatement breakStatement = new BreakStatement(this.ast);
-		if (this.ast.apiLevel == AST.JLS12_INTERNAL && this.ast.isPreviewEnabled()) {
-			breakStatement.setImplicit(statement.isImplicit);
-			if (statement.isImplicit) {
-				breakStatement.setSourceRange(statement.sourceEnd -1, 0);
-			} else {
-				breakStatement.setSourceRange(statement.sourceStart, statement.sourceEnd - statement.sourceStart + 1);
-			}
-		}
-		else {
-			breakStatement.setSourceRange(statement.sourceStart, statement.sourceEnd - statement.sourceStart + 1);
-		}
+		breakStatement.setSourceRange(statement.sourceStart, statement.sourceEnd - statement.sourceStart + 1);
 		if (statement.label != null) {
 			final SimpleName name = new SimpleName(this.ast);
 			name.internalSetIdentifier(new String(statement.label));
 			retrieveIdentifierAndSetPositions(statement.sourceStart, statement.sourceEnd, name);
 			breakStatement.setLabel(name);
 		}
-		else if (statement.expression != null && this.ast.apiLevel == AST.JLS12_INTERNAL && this.ast.isPreviewEnabled()) {
-			final Expression expression= convert(statement.expression);
-			breakStatement.setExpression(expression);
-			int sourceEnd = statement.sourceEnd;
-			if (sourceEnd == -1) {
-				breakStatement.setSourceRange(statement.sourceStart, statement.sourceEnd - statement.sourceStart + 2);
-			} else {
-				breakStatement.setSourceRange(statement.sourceStart, sourceEnd - statement.sourceStart + 1);
-			}
-		}
 		return breakStatement;
 	}
 
 	public SwitchCase convert(org.eclipse.jdt.internal.compiler.ast.CaseStatement statement) {
 		SwitchCase switchCase = new SwitchCase(this.ast);
-		if (this.ast.apiLevel == AST.JLS12_INTERNAL && this.ast.isPreviewEnabled()) {
+		if (this.ast.isPreviewEnabled()) {
 			org.eclipse.jdt.internal.compiler.ast.Expression[] expressions = statement.constantExpressions;
 			if (expressions == null || expressions.length == 0) {
 				switchCase.expressions().clear();
@@ -1336,7 +1320,7 @@
 				internalSetExpression(switchCase, convert(constantExpression));
 			}
 		}
-		if (this.ast.apiLevel == AST.JLS12_INTERNAL && this.ast.isPreviewEnabled()) {
+		if (this.ast.isPreviewEnabled()) {
 			switchCase.setSwitchLabeledRule(statement.isExpr);
 		}
 		switchCase.setSourceRange(statement.sourceStart, statement.sourceEnd - statement.sourceStart + 1);
@@ -1849,6 +1833,9 @@
 		if (expression instanceof org.eclipse.jdt.internal.compiler.ast.ExtendedStringLiteral) {
 			return convert((org.eclipse.jdt.internal.compiler.ast.ExtendedStringLiteral) expression);
 		}
+		if (expression instanceof org.eclipse.jdt.internal.compiler.ast.TextBlock) {
+			return convert((org.eclipse.jdt.internal.compiler.ast.TextBlock) expression);
+		}
 		if (expression instanceof org.eclipse.jdt.internal.compiler.ast.StringLiteral) {
 			return convert((org.eclipse.jdt.internal.compiler.ast.StringLiteral) expression);
 		}
@@ -2850,6 +2837,9 @@
 		if (statement instanceof org.eclipse.jdt.internal.compiler.ast.WhileStatement) {
 			return convert((org.eclipse.jdt.internal.compiler.ast.WhileStatement) statement);
 		}
+		if (statement instanceof org.eclipse.jdt.internal.compiler.ast.YieldStatement) {
+			return convert((org.eclipse.jdt.internal.compiler.ast.YieldStatement) statement);
+		}
 		if (statement instanceof org.eclipse.jdt.internal.compiler.ast.Expression &&
 				((org.eclipse.jdt.internal.compiler.ast.Expression) statement).isTrulyExpression()) {
 			org.eclipse.jdt.internal.compiler.ast.Expression statement2 = (org.eclipse.jdt.internal.compiler.ast.Expression) statement;
@@ -2878,9 +2868,9 @@
 		literal.setSourceRange(expression.sourceStart, expression.sourceEnd - expression.sourceStart + 1);
 		return literal;
 	}
-
+	
 	public Expression convert(org.eclipse.jdt.internal.compiler.ast.SwitchExpression expression) {
-		if (this.ast.apiLevel < AST.JLS12_INTERNAL || !this.ast.isPreviewEnabled()) {
+		if (!this.ast.isPreviewEnabled()) {
 			return createFakeNullLiteral(expression);		
 		}
 		SwitchExpression switchExpression = new SwitchExpression(this.ast);
@@ -2935,6 +2925,18 @@
 		return synchronizedStatement;
 	}
 
+	public Expression convert(org.eclipse.jdt.internal.compiler.ast.TextBlock expression) {
+		int length = expression.sourceEnd - expression.sourceStart + 1;
+		int sourceStart = expression.sourceStart;
+		TextBlock literal = new TextBlock(this.ast);
+		if (this.resolveBindings) {
+			this.recordNodes(literal, expression);
+		}
+		literal.internalSetEscapedValue(new String(this.compilationUnitSource, sourceStart, length));
+		literal.setSourceRange(expression.sourceStart, expression.sourceEnd - expression.sourceStart + 1);
+		return literal;
+	}
+	
 	public Expression convert(org.eclipse.jdt.internal.compiler.ast.ThisReference reference) {
 		if (reference.isImplicitThis()) {
 			// There is no source associated with an implicit this
@@ -3217,6 +3219,18 @@
 		return whileStatement;
 	}
 
+	public Statement convert(org.eclipse.jdt.internal.compiler.ast.YieldStatement statement) {
+		if (this.ast.apiLevel != AST.JLS13_INTERNAL) {
+			return createFakeEmptyStatement(statement);		
+		}
+		YieldStatement yieldStatement = new YieldStatement(this.ast);
+		// We don't need to record Nodes
+		yieldStatement.setExpression(convert(statement.expression));
+		yieldStatement.setImplicit(statement.isImplicit);
+		yieldStatement.setSourceRange(statement.sourceStart, statement.sourceEnd - statement.sourceStart + 1);
+		return yieldStatement;
+	}
+	
 	public ImportDeclaration convertImport(org.eclipse.jdt.internal.compiler.ast.ImportReference importReference) {
 		final ImportDeclaration importDeclaration = new ImportDeclaration(this.ast);
 		Name name = getImportName(importReference);
@@ -6136,4 +6150,5 @@
 			}
 		}
 	}
+
 }
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTMatcher.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTMatcher.java
index 2bfe6be..6bb8db3 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTMatcher.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTMatcher.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
  *******************************************************************************/
@@ -484,9 +488,7 @@
 			return false;
 		}
 		BreakStatement o = (BreakStatement) other;
-		return ( node.getAST().apiLevel == AST.JLS12_INTERNAL && node.getAST().isPreviewEnabled() && node.getExpression() != null
-				? safeSubtreeMatch(node.getExpression(), o.getExpression()) && node.isImplicit() == o.isImplicit()
-						: safeSubtreeMatch(node.getLabel(), o.getLabel()));
+		return (safeSubtreeMatch(node.getLabel(), o.getLabel()));
 	}
 
 	/**
@@ -2269,7 +2271,7 @@
 			return false;
 		}
 		SwitchCase o = (SwitchCase) other;
-		return ( node.getAST().apiLevel == AST.JLS12_INTERNAL && node.getAST().isPreviewEnabled()
+		return ( node.getAST().isPreviewEnabled()
 				? safeSubtreeListMatch(node.expressions(), o.expressions())
 						: compareDeprecatedSwitchExpression(node, o));
 	}
@@ -2394,6 +2396,31 @@
 	 * @return <code>true</code> if the subtree matches, or
 	 *   <code>false</code> if they do not match or the other object has a
 	 *   different node type or is <code>null</code>
+	 * @noreference This method is not intended to be referenced by clients as it is a part of Java preview feature.
+	 * @nooverride This method is not intended to be re-implemented or extended by clients as it is a part of Java preview feature.
+	 * @since 3.19 BETA_JAVA13
+	 */
+	public boolean match(TextBlock node, Object other) {
+		if (!(other instanceof TextBlock)) {
+			return false;
+		}
+		TextBlock o = (TextBlock) other;
+		return safeEquals(node.getEscapedValue(), o.getEscapedValue());
+	}
+	
+	/**
+	 * Returns whether the given node and the other object match.
+	 * <p>
+	 * The default implementation provided by this class tests whether the
+	 * other object is a node of the same type with structurally isomorphic
+	 * child subtrees. Subclasses may override this method as needed.
+	 * </p>
+	 *
+	 * @param node the node
+	 * @param other the other object, or <code>null</code>
+	 * @return <code>true</code> if the subtree matches, or
+	 *   <code>false</code> if they do not match or the other object has a
+	 *   different node type or is <code>null</code>
 	 * @since 3.0
 	 */
 	public boolean match(TextElement node, Object other) {
@@ -2816,5 +2843,30 @@
 				&& node.isUpperBound() == o.isUpperBound()
 				&& safeSubtreeMatch(node.getBound(), o.getBound());
 	}
+	
+	/**
+	 * Returns whether the given node and the other object match.
+	 * <p>
+	 * The default implementation provided by this class tests whether the
+	 * other object is a node of the same type with structurally isomorphic
+	 * child subtrees. Subclasses may override this method as needed.
+	 * </p>
+	 *
+	 * @param node the node
+	 * @param other the other object, or <code>null</code>
+	 * @return <code>true</code> if the subtree matches, or
+	 *   <code>false</code> if they do not match or the other object has a
+	 *   different node type or is <code>null</code>
+	 * @noreference This method is not intended to be referenced by clients as it is a part of Java preview feature.
+	 * @nooverride This method is not intended to be re-implemented or extended by clients as it is a part of Java preview feature.
+	 * @since 3.19 BETA_JAVA13
+	 */
+	public boolean match(YieldStatement node, Object other) {
+		if (!(other instanceof YieldStatement)) {
+			return false;
+		}
+		YieldStatement o = (YieldStatement) other;
+		return	safeSubtreeMatch(node.getExpression(), o.getExpression());
+	}
 
 }
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTNode.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTNode.java
index f9193e2..8b4a4fd 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTNode.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTNode.java
@@ -7,6 +7,10 @@
  * 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
@@ -961,6 +965,22 @@
 	 * @since 3.18
 	 */
 	public static final int SWITCH_EXPRESSION = 100;
+	
+	/**
+	 * Node type constant indicating a node of type
+	 * <code>YieldStatement</code>.
+	 * @see YieldStatement
+	 * @since 3.19 BETA_JAVA13
+	 */
+	public static final int YIELD_STATEMENT = 10;
+	
+	/**
+	 * Node type constant indicating a node of type
+	 * <code>TextBlock</code>.
+	 * @see TextBlock
+	 * @since 3.19 BETA_JAVA13
+	 */
+	public static final int TEXT_BLOCK = 101;
 
 	/**
 	 * Returns the node class for the corresponding node type.
@@ -1142,6 +1162,8 @@
 				return SynchronizedStatement.class;
 			case TAG_ELEMENT :
 				return TagElement.class;
+			case TEXT_BLOCK :
+				return TextBlock.class;
 			case TEXT_ELEMENT :
 				return TextElement.class;
 			case THIS_EXPRESSION :
@@ -2108,6 +2130,7 @@
      * </p>
      *
 	 * @exception UnsupportedOperationException if this operation is used below JLS12
+	 * @deprecated
 	 * @since 3.16 
 	 */
 	final void unsupportedBelow12() {
@@ -2167,6 +2190,38 @@
 	}
 	
 	/**
+     * Checks that this AST operation is only used when
+     * building JLS12 level ASTs.
+     * <p>
+     * Use this method to prevent access to properties available only in JLS12.
+     * </p>
+     *
+	 * @exception UnsupportedOperationException if this operation is is not used in JLS12
+	 * @since 3.19 BETA_JAVA13
+     */
+	// In API Javadocs, add: * @deprecated In the JLS13 API, this method is replaced by {@link #replacement()}.
+	final void supportedOnlyIn12() {
+	  if (this.ast.apiLevel != AST.JLS12_INTERNAL) {
+	  	throw new UnsupportedOperationException("Operation only supported in JLS12 AST"); //$NON-NLS-1$
+	  }
+	}
+	
+	/**
+ 	 * Checks that this AST operation is only used when
+     * building JLS13 level ASTs.
+     * <p>
+     * Use this method to prevent access to new properties available only in JLS13.
+     * </p>
+     *
+	 * @exception UnsupportedOperationException if this operation is not used in JLS13
+	 * @since 3.19 BETA_JAVA13
+	 */
+	final void supportedOnlyIn13() {
+		if (this.ast.apiLevel != AST.JLS13_INTERNAL) {
+			throw new UnsupportedOperationException("Operation only supported in JLS13 AST"); //$NON-NLS-1$
+		}
+	}
+	/**
 	 * Sets or clears this node's parent node and location.
 	 * <p>
 	 * Note that this method is package-private. The pointer from a node
@@ -3137,11 +3192,4 @@
 	 * @return the size of this node in bytes
 	 */
 	abstract int memSize();
-	
-	boolean isPreviewEnabled() {
-		if (this.ast.apiLevel == AST.JLS12_INTERNAL && this.ast.isPreviewEnabled()) {
-			return true;
-		}
-		return false;
-	}
 }
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTParser.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTParser.java
index 66d1215..a5ed060 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTParser.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTParser.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:
@@ -235,6 +239,7 @@
 			case AST.JLS10_INTERNAL:
 			case AST.JLS11_INTERNAL:
 			case AST.JLS12_INTERNAL:
+			case AST.JLS13_INTERNAL:
 				break;
 			default:
 				throw new IllegalArgumentException();
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTVisitor.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTVisitor.java
index a7eb1fc..7c5acd2 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTVisitor.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTVisitor.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
  *******************************************************************************/
@@ -1533,6 +1537,8 @@
 	 * @return <code>true</code> if the children of this node should be
 	 * visited, and <code>false</code> if the children of this node should
 	 * be skipped
+	 * @noreference This method is not intended to be referenced by clients as it is a part of Java preview feature.
+	 * @nooverride This method is not intended to be re-implemented or extended by clients as it is a part of Java preview feature.
 	 * @since 3.18
 	 */
 	public boolean visit(SwitchExpression node) {
@@ -1593,6 +1599,25 @@
 	/**
 	 * Visits the given type-specific AST node.
 	 * <p>
+	 * The default implementation does nothing and returns true.
+	 * Subclasses may reimplement.
+	 * </p>
+	 *
+	 * @param node the node to visit
+	 * @return <code>true</code> if the children of this node should be
+	 * visited, and <code>false</code> if the children of this node should
+	 * be skipped
+	 * @noreference This method is not intended to be referenced by clients as it is a part of Java preview feature.
+	 * @nooverride This method is not intended to be re-implemented or extended by clients as it is a part of Java preview feature.
+	 * @since 3.19 BETA_JAVA13
+	 */
+	public boolean visit(TextBlock node) {
+		return true;
+	}
+	
+	/**
+	 * Visits the given type-specific AST node.
+	 * <p>
 	 * The default implementation does nothing and return true.
 	 * Subclasses may reimplement.
 	 * </p>
@@ -1854,6 +1879,25 @@
 	}
 
 	/**
+	 * Visits the given type-specific AST node.
+	 * <p>
+	 * The default implementation does nothing and returns true.
+	 * Subclasses may reimplement.
+	 * </p>
+	 *
+	 * @param node the node to visit
+	 * @return <code>true</code> if the children of this node should be
+	 * visited, and <code>false</code> if the children of this node should
+	 * be skipped
+	 * @noreference This method is not intended to be referenced by clients as it is a part of Java preview feature.
+	 * @nooverride This method is not intended to be re-implemented or extended by clients as it is a part of Java preview feature.
+	 * @since 3.19 BETA_JAVA13
+	 */
+	public boolean visit(YieldStatement node) {
+		return true;
+	}
+	
+	/**
 	 * End of visit the given type-specific AST node.
 	 * <p>
 	 * The default implementation does nothing. Subclasses may reimplement.
@@ -2897,6 +2941,21 @@
 	 * </p>
 	 *
 	 * @param node the node to visit
+	 * @noreference This method is not intended to be referenced by clients as it is a part of Java preview feature.
+	 * @nooverride This method is not intended to be re-implemented or extended by clients as it is a part of Java preview feature.
+	 * @since 3.19 BETA_JAVA13
+	 */
+	public void endVisit(TextBlock node) {
+		// default implementation: do nothing
+	}
+	
+	/**
+	 * End of visit the given type-specific AST node.
+	 * <p>
+	 * The default implementation does nothing. Subclasses may reimplement.
+	 * </p>
+	 *
+	 * @param node the node to visit
 	 * @since 3.0
 	 */
 	public void endVisit(TextElement node) {
@@ -3100,4 +3159,19 @@
 	public void endVisit(WildcardType node) {
 		// default implementation: do nothing
 	}
+	
+	/**
+	 * End of visit the given type-specific AST node.
+	 * <p>
+	 * The default implementation does nothing. Subclasses may reimplement.
+	 * </p>
+	 *
+	 * @param node the node to visit
+	 * @noreference This method is not intended to be referenced by clients as it is a part of Java preview feature.
+	 * @nooverride This method is not intended to be re-implemented or extended by clients as it is a part of Java preview feature.
+	 * @since 3.19 BETA_JAVA13
+	 */
+	public void endVisit(YieldStatement node) {
+		// default implementation: do nothing
+	}
 }
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/BreakStatement.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/BreakStatement.java
index 46afdc1..869f83f 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/BreakStatement.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/BreakStatement.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
  *******************************************************************************/
@@ -43,6 +47,8 @@
 	
 	/**
 	 * The "expression" structural property of this node type (child type: {@link Expression}). (added in JEP 325).
+	 * @noreference This property is not intended to be referenced by clients as it is a part of Java preview feature.
+	 * @deprecated
 	 * @since 3.18
 	 */
 	public static final ChildPropertyDescriptor EXPRESSION_PROPERTY =
@@ -56,13 +62,6 @@
 	private static final List PROPERTY_DESCRIPTORS;
 	
 	/**
-	 * A list of property descriptors (element type:
-	 * {@link StructuralPropertyDescriptor}),
-	 * or null if uninitialized.
-	 */
-	private static final List PROPERTY_DESCRIPTORS_12;
-	
-	/**
 	 * <code>true</code> indicates implicit and <code>false</code> indicates not implicit.
 	 */
 	private boolean isImplicit = false;
@@ -72,12 +71,6 @@
 		createPropertyList(BreakStatement.class, properyList);
 		addProperty(LABEL_PROPERTY, properyList);
 		PROPERTY_DESCRIPTORS = reapPropertyList(properyList);
-		
-		List properyList_12 = new ArrayList(2);
-		createPropertyList(BreakStatement.class, properyList_12);
-		addProperty(LABEL_PROPERTY, properyList_12);
-		addProperty(EXPRESSION_PROPERTY, properyList_12);
-		PROPERTY_DESCRIPTORS_12 = reapPropertyList(properyList_12);
 	}
 
 	/**
@@ -96,12 +89,20 @@
 	}
 	
 	/**
-	 * @since 3.19 BETA_JAVA13
+	 * Returns a list of structural property descriptors for this node type.
+	 * Clients must not modify the result.
+	 *
+	 * @param apiLevel the API level; one of the
+	 * <code>AST.JLS*</code> constants
+	 * @param previewEnabled the previewEnabled flag
+
+	 * @return a list of property descriptors (element type:
+	 * {@link StructuralPropertyDescriptor})
+	 * @noreference This method is not intended to be referenced by clients as it is a part of Java preview feature.
+	 * @deprecated
+	 * @since 3.19
 	 */
 	public static List propertyDescriptors(int apiLevel, boolean previewEnabled) {
-		if (apiLevel == AST.JLS12_INTERNAL && previewEnabled) {
-			return PROPERTY_DESCRIPTORS_12;
-		}
 		return PROPERTY_DESCRIPTORS;
 	}
 
@@ -171,7 +172,7 @@
 		result.setSourceRange(getStartPosition(), getLength());
 		result.copyLeadingComment(this);
 		result.setLabel((SimpleName) ASTNode.copySubtree(target, getLabel()));
-		if (isPreviewEnabled()) {
+		if (this.ast.apiLevel == AST.JLS12_INTERNAL) {
 			result.setExpression((Expression) ASTNode.copySubtree(target, getExpression()));
 		}
 		return result;
@@ -187,7 +188,7 @@
 	void accept0(ASTVisitor visitor) {
 		boolean visitChildren = visitor.visit(this);
 		if (visitChildren) {
-			if (isPreviewEnabled()) {
+			if (this.ast.apiLevel == AST.JLS12_INTERNAL) {
 				acceptChild(visitor, getExpression());
 			} 
 			acceptChild(visitor, getLabel());
@@ -228,14 +229,15 @@
 	 * there is none.
 	 *
 	 * @return the expression, or <code>null</code> if there is none
-	 * @exception UnsupportedOperationException if this operation is used below JLS12
-	 * @exception UnsupportedOperationException if this expression is used with previewEnabled flag as false
+	 * @exception UnsupportedOperationException if this operation is used other than JLS12
+	 * @noreference This method is not intended to be referenced by clients as it is a part of Java preview feature.
+	 * @nooverride This method is not intended to be re-implemented or extended by clients as it is a part of Java preview feature.
+	 * @deprecated
 	 * @since 3.18
 	 */
 	public Expression getExpression() {
 		// optionalExpression can be null
-		unsupportedBelow12();
-		unsupportedWithoutPreviewError();
+		supportedOnlyIn12();
 		return this.optionalExpression;
 	}
 
@@ -249,13 +251,14 @@
 	 * <li>the node belongs to a different AST</li>
 	 * <li>the node already has a parent</li>
 	 * </ul>
-	 * @exception UnsupportedOperationException if this operation is used below JLS12
-	 * @exception UnsupportedOperationException if this expression is used with previewEnabled flag as false
+	 * @exception UnsupportedOperationException if this operation is used other than JLS12
+	 * @noreference This method is not intended to be referenced by clients as it is a part of Java preview feature.
+	 * @nooverride This method is not intended to be re-implemented or extended by clients as it is a part of Java preview feature.
+	 * @deprecated
 	 * @since 3.18
 	 */
 	public void setExpression(Expression expression) {
-		unsupportedBelow12();
-		unsupportedWithoutPreviewError();
+		supportedOnlyIn12();
 		ASTNode oldChild = this.optionalExpression;
 		preReplaceChild(oldChild, expression, EXPRESSION_PROPERTY);
 		this.optionalExpression = expression;
@@ -267,13 +270,14 @@
 	 *<code>true</code> indicates implicit and <code>false</code> indicates not implicit.
 	 *
 	 * @return isImplicit <code>true</code> or <code>false</code>
-	 * @exception UnsupportedOperationException if this operation is used below JLS12
-	 * @exception UnsupportedOperationException if this expression is used with previewEnabled flag as false
+	 * @exception UnsupportedOperationException if this operation is used other than JLS12
+	 * @noreference This method is not intended to be referenced by clients as it is a part of Java preview feature.
+	 * @nooverride This method is not intended to be re-implemented or extended by clients as it is a part of Java preview feature.
+	 * @deprecated
 	 * @since 3.18
 	 */
 	public boolean isImplicit() {
-		unsupportedBelow12();
-		unsupportedWithoutPreviewError();
+		supportedOnlyIn12();
 		return this.isImplicit;
 	}
 
@@ -283,13 +287,12 @@
 	 * generated by compiler and is not expected to be set by client.
 
 	 * @param isImplicit <code>true</code> or <code>false</code>
-	 * @exception UnsupportedOperationException if this operation is used below JLS12
-	 * @exception UnsupportedOperationException if this expression is used with previewEnabled flag as false
+	 * @exception UnsupportedOperationException if this operation is used other than JLS12
+	 * @deprecated
 	 * @since 3.18
 	 */
 	void setImplicit(boolean isImplicit) {
-		unsupportedBelow12();
-		unsupportedWithoutPreviewError();
+		supportedOnlyIn12();
 		this.isImplicit = isImplicit;
 	}
 
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultASTVisitor.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultASTVisitor.java
index 749fa7c..5b78c57 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultASTVisitor.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/DefaultASTVisitor.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
@@ -353,6 +357,10 @@
 		endVisitNode(node);
 	}
 	@Override
+	public void endVisit(TextBlock node) {
+		endVisitNode(node);
+	}
+	@Override
 	public void endVisit(TextElement node) {
 		endVisitNode(node);
 	}
@@ -413,6 +421,10 @@
 	public void endVisit(WildcardType node) {
 		endVisitNode(node);
 	}
+	@Override
+	public void endVisit(YieldStatement node) {
+		endVisitNode(node);
+	}
 	protected void endVisitNode(ASTNode node) {
 		// do nothing
 	}
@@ -756,6 +768,11 @@
 	}
 
 	@Override
+	public boolean visit(TextBlock node) {
+		return visitNode(node);
+	}
+	
+	@Override
 	public boolean visit(TextElement node) {
 		return visitNode(node);
 	}
@@ -829,6 +846,11 @@
 	public boolean visit(WildcardType node) {
 		return visitNode(node);
 	}
+	
+	@Override
+	public boolean visit(YieldStatement node) {
+		return visitNode(node);
+	}
 
 	protected boolean visitNode(ASTNode node) {
 		return true;
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SwitchCase.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SwitchCase.java
index 55c3129..17135c6 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SwitchCase.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SwitchCase.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
  *******************************************************************************/
@@ -46,6 +50,7 @@
 
 	/**
 	 * The "expression" structural property of this node type (child type: {@link Expression}). (added in JEP 325).
+	 * @noreference This property is not intended to be referenced by clients as it is a part of Java preview feature.
 	 * @since 3.18
 	 */
 	public static final ChildListPropertyDescriptor EXPRESSIONS2_PROPERTY  =
@@ -53,6 +58,7 @@
 	
 	/**
 	 * The "switchLabeledRule" structural property of this node type (type: {@link Boolean}).
+	 * @noreference This property is not intended to be referenced by clients as it is a part of Java preview feature.
 	 * @since 3.18
 	 */
 	public static final SimplePropertyDescriptor SWITCH_LABELED_RULE_PROPERTY =
@@ -70,7 +76,7 @@
 	 * {@link StructuralPropertyDescriptor}),
 	 * or null if uninitialized.
 	 */
-	private static final List PROPERTY_DESCRIPTORS_12;
+	private static final List PROPERTY_DESCRIPTORS_13;
 
 	static {
 		List propertyList = new ArrayList(2);
@@ -82,7 +88,7 @@
 		createPropertyList(SwitchCase.class, propertyList);
 		addProperty(EXPRESSIONS2_PROPERTY , propertyList);
 		addProperty(SWITCH_LABELED_RULE_PROPERTY, propertyList);
-		PROPERTY_DESCRIPTORS_12 = reapPropertyList(propertyList);
+		PROPERTY_DESCRIPTORS_13 = reapPropertyList(propertyList);
 	}
 
 	/**
@@ -112,8 +118,8 @@
 	 * @since 3.19
 	 */
 	public static List propertyDescriptors(int apiLevel, boolean previewEnabled) {
-		if (apiLevel == AST.JLS12_INTERNAL && previewEnabled) {
-			return PROPERTY_DESCRIPTORS_12;
+		if (apiLevel == AST.JLS13_INTERNAL && previewEnabled) {
+			return PROPERTY_DESCRIPTORS_13;
 		}
 		return PROPERTY_DESCRIPTORS;
 	}
@@ -150,7 +156,7 @@
 	 */
 	SwitchCase(AST ast) {
 		super(ast);
-		if (isPreviewEnabled()) {
+		if (ast.isPreviewEnabled()) {
 			this.expressions = new ASTNode.NodeList(EXPRESSIONS2_PROPERTY );
 		}
 	}
@@ -213,7 +219,7 @@
 		SwitchCase result = new SwitchCase(target);
 		result.setSourceRange(getStartPosition(), getLength());
 		result.copyLeadingComment(this);
-		if (isPreviewEnabled()) {
+		if (this.ast.isPreviewEnabled()) {
 			result.expressions().addAll(
 				ASTNode.copySubtrees(target, expressions()));
 		} else {
@@ -233,7 +239,7 @@
 	void accept0(ASTVisitor visitor) {
 		boolean visitChildren = visitor.visit(this);
 		if (visitChildren) {
-			if (isPreviewEnabled()) {
+			if (this.ast.isPreviewEnabled()) {
 				acceptChildren(visitor, this.expressions);
 			} else {
 				acceptChild(visitor, getExpression());
@@ -271,13 +277,15 @@
 	 *
 	 *  @return the list of expression nodes
 	 *    (element type: {@link Expression})
-	 * @exception UnsupportedOperationException if this operation is used below JLS12
+	 * @exception UnsupportedOperationException if this operation is used other than JLS13
 	 * @exception UnsupportedOperationException if this expression is used with previewEnabled flag as false
+	 * @noreference This method is not intended to be referenced by clients as it is a part of Java preview feature.
+	 * @nooverride This method is not intended to be re-implemented or extended by clients as it is a part of Java preview feature.
 	 * @since 3.18
 	 */
 	public List expressions() {
 		if (this.expressions == null) {
-			unsupportedBelow12();
+			supportedOnlyIn13();
 			unsupportedWithoutPreviewError();
 		}
 		return this.expressions;
@@ -310,12 +318,14 @@
 	 * <code>true</code> indicates "->" and <code>false</code> indicates ":".
 
 	 * @param switchLabeledRule <code>true</code> or <code>false</code>
-	 * @exception UnsupportedOperationException if this operation is used below JLS12
+	 * @exception UnsupportedOperationException if this operation is used other than JLS13
 	 * @exception UnsupportedOperationException if this expression is used with previewEnabled flag as false
+	 * @noreference This method is not intended to be referenced by clients as it is a part of Java preview feature.
+	 * @nooverride This method is not intended to be re-implemented or extended by clients as it is a part of Java preview feature.
 	 * @since 3.18
 	 */
 	public void setSwitchLabeledRule(boolean switchLabeledRule) {
-		unsupportedBelow12();
+		supportedOnlyIn13();
 		unsupportedWithoutPreviewError();
 		preValueChange(SWITCH_LABELED_RULE_PROPERTY);
 		this.switchLabeledRule = switchLabeledRule;
@@ -327,12 +337,14 @@
 	 *<code>true</code> indicates "->" and <code>false</code> indicates ":".
 	 *
 	 * @return switchLabeledRule <code>true</code> or <code>false</code>
-	 * @exception UnsupportedOperationException if this operation is used below JLS12
+	 * @exception UnsupportedOperationException if this operation is used other than JLS13
 	 * @exception UnsupportedOperationException if this expression is used with previewEnabled flag as false
+	 * @noreference This method is not intended to be referenced by clients as it is a part of Java preview feature.
+	 * @nooverride This method is not intended to be re-implemented or extended by clients as it is a part of Java preview feature.
 	 * @since 3.18
 	 */
 	public boolean isSwitchLabeledRule() {
-		unsupportedBelow12();
+		supportedOnlyIn13();
 		unsupportedWithoutPreviewError();
 		return this.switchLabeledRule;
 	}
@@ -348,7 +360,7 @@
 	 *    <code>false</code> if this is a non-default switch case
 	 */
 	public boolean isDefault()  {
-		if (isPreviewEnabled()) {
+		if (this.ast.isPreviewEnabled()) {
 			return expressions().isEmpty();
 		}
 		return getExpression() == null;
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SwitchExpression.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SwitchExpression.java
index de55fbf..dcfd886 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SwitchExpression.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/SwitchExpression.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
  *******************************************************************************/
@@ -32,6 +36,7 @@
  *
  * @since 3.18
  * @noinstantiate This class is not intended to be instantiated by clients.
+ * @noreference This method is not intended to be referenced by clients as it is a part of Java preview feature.
  */
 @SuppressWarnings({"rawtypes", "unchecked"})
 public class SwitchExpression extends Expression {
@@ -55,14 +60,14 @@
 	 * {@link StructuralPropertyDescriptor}),
 	 * or null if uninitialized.
 	 */
-	private static final List PROPERTY_DESCRIPTORS_12_0;
+	private static final List PROPERTY_DESCRIPTORS;
 
 	static {
 		List propertyList = new ArrayList(3);
 		createPropertyList(SwitchExpression.class, propertyList);
 		addProperty(EXPRESSION_PROPERTY, propertyList);
 		addProperty(STATEMENTS_PROPERTY, propertyList);
-		PROPERTY_DESCRIPTORS_12_0 = reapPropertyList(propertyList);
+		PROPERTY_DESCRIPTORS = reapPropertyList(propertyList);
 	}
 
 	/**
@@ -88,11 +93,12 @@
 	 * @param previewEnabled previewEnabled flag
 	 * @return a list of property descriptors (element type:
 	 * {@link StructuralPropertyDescriptor})
+	 * @noreference This method is not intended to be referenced by clients.
 	 * @since 3.19
 	 */
 	public static List propertyDescriptors(int apiLevel, boolean previewEnabled) {
-		if (previewEnabled) {
-			return PROPERTY_DESCRIPTORS_12_0;
+		if (apiLevel == AST.JLS13_INTERNAL && previewEnabled) {
+			return PROPERTY_DESCRIPTORS;
 		}
 		return null;
 	}
@@ -120,11 +126,12 @@
 	 * </p>
 	 *
 	 * @param ast the AST that is to own this node
-	 * @exception UnsupportedOperationException if this operation is used below JLS12
+	 * @exception UnsupportedOperationException if this operation is used other than JLS13
+	 * @exception UnsupportedOperationException if this expression is used with previewEnabled flag as false
 	 */
 	SwitchExpression(AST ast) {
 		super(ast);
-		unsupportedBelow12();
+		supportedOnlyIn13();
 		unsupportedWithoutPreviewError();
 	}
 
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TextBlock.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TextBlock.java
new file mode 100644
index 0000000..93b984b
--- /dev/null
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TextBlock.java
@@ -0,0 +1,300 @@
+/*******************************************************************************
+ * 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.dom;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jdt.core.compiler.InvalidInputException;
+import org.eclipse.jdt.internal.compiler.parser.Scanner;
+import org.eclipse.jdt.internal.compiler.parser.ScannerHelper;
+import org.eclipse.jdt.internal.compiler.parser.TerminalTokens;
+
+/**
+ * TextBolck  AST node type.
+ *
+ * These are block of String literal nodes. 
+ *
+ * @since 3.19 BETA_JAVA13
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ * @noreference This class is not intended to be referenced by clients as it is a part of Java preview feature.
+ */
+@SuppressWarnings("rawtypes")
+public class TextBlock extends Expression {
+
+	/**
+	 * The "escapedValue" structural property of this node type (type: {@link String}).
+	 * @since 3.0
+	 */
+	public static final SimplePropertyDescriptor ESCAPED_VALUE_PROPERTY =
+		new SimplePropertyDescriptor(TextBlock.class, "escapedValue", String.class, MANDATORY); //$NON-NLS-1$
+
+	/**
+	 * A list of property descriptors (element type:
+	 * {@link StructuralPropertyDescriptor}),
+	 * or null if uninitialized.
+	 */
+	private static final List PROPERTY_DESCRIPTORS;
+
+	static {
+		List propertyList = new ArrayList(2);
+		createPropertyList(TextBlock.class, propertyList);
+		addProperty(ESCAPED_VALUE_PROPERTY, propertyList);
+		PROPERTY_DESCRIPTORS = reapPropertyList(propertyList);
+	}
+
+	/**
+	 * Returns a list of structural property descriptors for this node type.
+	 * Clients must not modify the result.
+	 *
+	 * @param apiLevel the API level; one of the
+	 * <code>AST.JLS*</code> constants
+
+	 * @return a list of property descriptors (element type:
+	 * {@link StructuralPropertyDescriptor})
+	 * @since 3.0
+	 */
+	public static List propertyDescriptors(int apiLevel) {
+		return propertyDescriptors(apiLevel, false);
+	}
+
+	/**
+	 * Returns a list of structural property descriptors for this node type.
+	 * Clients must not modify the result.
+	 *
+	 * @param apiLevel the API level; one of the
+	 * <code>AST.JLS*</code> constants
+	 * @param previewEnabled the previewEnabled flag
+	 * @return a list of property descriptors (element type:
+	 * {@link StructuralPropertyDescriptor})
+	 * @noreference This method is not intended to be referenced by clients.
+	 * @since 3.19 BETA_JAVA13
+	 */
+	public static List propertyDescriptors(int apiLevel, boolean previewEnabled) {
+		if (apiLevel == AST.JLS13_INTERNAL && previewEnabled) {
+			return PROPERTY_DESCRIPTORS;
+		}
+		return null;
+	}
+	/**
+	 * The literal string, including quotes and escapes; defaults to the
+	 * literal for the empty string.
+	 */
+	private String escapedValue = "\"\"";//$NON-NLS-1$
+
+	/**
+	 * Creates a new unparented TextBlock node owned by the given AST.
+	 * By default, the TextBlock denotes the empty string.
+	 * <p>
+	 * N.B. This constructor is package-private.
+	 * </p>
+	 *
+	 * @param ast the AST that is to own this node
+	 * @exception UnsupportedOperationException if this operation is used other than JLS13
+	 * @exception UnsupportedOperationException if this expression is used with previewEnabled flag as false
+	 */
+	TextBlock(AST ast) {
+		super(ast);
+		supportedOnlyIn13();
+		unsupportedWithoutPreviewError();
+	}
+
+	@Override
+	final List internalStructuralPropertiesForType(int apiLevel) {
+		return propertyDescriptors(apiLevel);
+	}
+	
+	@Override
+	final List internalStructuralPropertiesForType(int apiLevel, boolean previewEnabled) {
+		return propertyDescriptors(apiLevel, previewEnabled);
+	}
+
+	@Override
+	final Object internalGetSetObjectProperty(SimplePropertyDescriptor property, boolean get, Object value) {
+		if (property == ESCAPED_VALUE_PROPERTY) {
+			if (get) {
+				return getEscapedValue();
+			} else {
+				setEscapedValue((String) value);
+				return null;
+			}
+		}
+		// allow default implementation to flag the error
+		return super.internalGetSetObjectProperty(property, get, value);
+	}
+
+	@Override
+	final int getNodeType0() {
+		return TEXT_BLOCK;
+	}
+
+	@Override
+	ASTNode clone0(AST target) {
+		TextBlock result = new TextBlock(target);
+		result.setSourceRange(getStartPosition(), getLength());
+		result.setEscapedValue(getEscapedValue());
+		return result;
+	}
+
+	@Override
+	final boolean subtreeMatch0(ASTMatcher matcher, Object other) {
+		// dispatch to correct overloaded match method
+		return matcher.match(this, other);
+	}
+
+	@Override
+	void accept0(ASTVisitor visitor) {
+		visitor.visit(this);
+		visitor.endVisit(this);
+	}
+
+	/**
+	 * Returns the string value of this literal node to the given string
+	 * literal token. The token is the sequence of characters that would appear
+	 * in the source program, including enclosing double quotes and embedded
+	 * escapes.
+	 *
+	 * @return the string literal token, including enclosing double
+	 *    quotes and embedded escapes
+	 */
+	public String getEscapedValue() {
+		return this.escapedValue;
+	}
+
+	/**
+	 * Sets the string value of this literal node to the given string literal
+	 * token. The token is the sequence of characters that would appear in the
+	 * source program, including enclosing double quotes and embedded escapes.
+	 * For example,
+	 * <ul>
+	 * <li><code>""</code> <code>setLiteral("\"\"")</code></li>
+	 * <li><code>"hello world"</code> <code>setLiteral("\"hello world\"")</code></li>
+	 * <li><code>"boo\nhoo"</code> <code>setLiteral("\"boo\\nhoo\"")</code></li>
+	 * </ul>
+	 *
+	 * @param token the string literal token, including enclosing double
+	 *    quotes and embedded escapes
+	 * @exception IllegalArgumentException if the argument is incorrect
+	 */
+	public void setEscapedValue(String token) {
+		// update internalSetEscapedValue(String) if this is changed
+		if (token == null) {
+			throw new IllegalArgumentException("Token cannot be null"); //$NON-NLS-1$
+		}
+		Scanner scanner = this.ast.scanner;
+		char[] source = token.toCharArray();
+		scanner.setSource(source);
+		scanner.resetTo(0, source.length);
+		try {
+			int tokenType = scanner.getNextToken();
+			switch(tokenType) {
+				case TerminalTokens.TokenNameTextBlock:
+					break;
+				default:
+					throw new IllegalArgumentException("Invalid Text Block : >" + token + "<"); //$NON-NLS-1$//$NON-NLS-2$
+			}
+		} catch(InvalidInputException e) {
+			throw new IllegalArgumentException("Invalid Text Block : >" + token + "<");//$NON-NLS-1$//$NON-NLS-2$
+		}
+		preValueChange(ESCAPED_VALUE_PROPERTY);
+		this.escapedValue = token;
+		postValueChange(ESCAPED_VALUE_PROPERTY);
+	}
+
+	/* (omit javadoc for this method)
+	 * This method is a copy of setEscapedValue(String) that doesn't do any validation.
+	 */
+	void internalSetEscapedValue(String token) {
+		preValueChange(ESCAPED_VALUE_PROPERTY);
+		this.escapedValue = token;
+		postValueChange(ESCAPED_VALUE_PROPERTY);
+	}
+
+	/**
+	 * Returns the value of this literal node.
+	 * <p>
+	 * For example,
+	 * <pre>
+	 * TextBlock s;
+	 * s.setEscapedValue("\"\"\"  \n hello\\n world\"");
+	 * assert s.getLiteralValue().equals("hello\n world");
+	 * </pre>
+	 * <p>
+	 * Note that this is a convenience method that converts from the stored
+	 * TextBlock token returned by <code>getEscapedLiteral</code>.
+	 * </p>
+	 *
+	 * @return the string value without enclosing triple quotes
+	 * @exception IllegalArgumentException if the literal value cannot be converted
+	 */
+	public String getLiteralValue() {
+		String s = getEscapedValue();
+		int len = s.length();
+		if (len < 2 || s.indexOf("\"\"\"") != 0 || !s.substring(len-3, len).equals("\"\"\"") ) { //$NON-NLS-1$ //$NON-NLS-2$
+			throw new IllegalArgumentException();
+		}
+		
+		boolean newLineFound = false;
+		for (int i = 3; i < s.length(); i++) {
+			char c = s.charAt(i);
+			while (ScannerHelper.isWhitespace(c)) {
+				switch (c) {
+					case 10 : /* \ u000a: LINE FEED               */
+					case 13 : /* \ u000d: CARRIAGE RETURN         */
+						newLineFound =  true;
+						break;
+					default:
+						break;
+				}
+			}
+		}
+		if (!newLineFound) {
+			throw new IllegalArgumentException();
+		}
+		
+		Scanner scanner = this.ast.scanner;
+		char[] source = s.toCharArray();
+		scanner.setSource(source);
+		scanner.resetTo(0, source.length);
+		try {
+			int tokenType = scanner.getNextToken();
+			switch(tokenType) {
+				case TerminalTokens.TokenNameTextBlock:
+					return scanner.getCurrentStringLiteral();
+				default:
+					throw new IllegalArgumentException();
+			}
+		} catch(InvalidInputException e) {
+			throw new IllegalArgumentException();
+		}
+	}
+
+
+	@Override
+	int memSize() {
+		int size = BASE_NODE_SIZE + 1 * 4 + stringSize(this.escapedValue);
+		return size;
+	}
+
+	@Override
+	int treeSize() {
+		return memSize();
+	}
+}
+
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/YieldStatement.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/YieldStatement.java
new file mode 100644
index 0000000..51af55a
--- /dev/null
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/YieldStatement.java
@@ -0,0 +1,251 @@
+/*******************************************************************************
+ * 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.dom;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Yield statement AST node type.
+ *
+ * <pre>
+ * YieldStatement:
+ *		<b>Yield</b> <b>{ Identifier/Expression }</b>
+ * </pre>
+ *
+ * @since 3.19 BETA_JAVA13
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ * @noreference This class is not intended to be referenced by clients as it is a part of Java preview feature.
+ */
+@SuppressWarnings("rawtypes")
+public class YieldStatement extends Statement {
+
+	/**
+	 * The "expression" structural property of this node type (child type: {@link Expression}). (added in JEP 354).
+	 */
+	public static final ChildPropertyDescriptor EXPRESSION_PROPERTY =
+			new ChildPropertyDescriptor(YieldStatement.class, "expression", Expression.class, MANDATORY, NO_CYCLE_RISK); //$NON-NLS-1$);
+
+	/**
+	 * A list of property descriptors (element type:
+	 * {@link StructuralPropertyDescriptor}),
+	 * or null if uninitialized.
+	 */
+	private static final List PROPERTY_DESCRIPTORS;
+
+	/**
+	 * <code>true</code> indicates implicit and <code>false</code> indicates not implicit.
+	 */
+	private boolean isImplicit = false;
+	
+	static {
+		List properyList = new ArrayList(2);
+		createPropertyList(YieldStatement.class, properyList);
+		addProperty(EXPRESSION_PROPERTY, properyList);
+		PROPERTY_DESCRIPTORS = reapPropertyList(properyList);
+	}
+
+	/**
+	 * Returns a list of structural property descriptors for this node type.
+	 * Clients must not modify the result.
+	 *
+	 * @param apiLevel the API level; one of the
+	 * <code>AST.JLS*</code> constants
+
+	 * @return a list of property descriptors (element type:
+	 * {@link StructuralPropertyDescriptor})
+	 */
+	public static List propertyDescriptors(int apiLevel) {
+		return propertyDescriptors(apiLevel, false);
+	}
+
+	/**
+	 * Returns a list of structural property descriptors for this node type.
+	 * Clients must not modify the result.
+	 *
+	 * @param apiLevel the API level; one of the
+	 * <code>AST.JLS*</code> constants
+	 * @param previewEnabled the previewEnabled flag
+	 * @return a list of property descriptors (element type:
+	 * {@link StructuralPropertyDescriptor})
+	 * @noreference This method is not intended to be referenced by clients.
+	 * @since 3.19 BETA_JAVA13
+	 */
+	public static List propertyDescriptors(int apiLevel, boolean previewEnabled) {
+		if (apiLevel == AST.JLS13_INTERNAL && previewEnabled) {
+			return PROPERTY_DESCRIPTORS;
+		}
+		return null;
+	}
+	
+	/**
+	 * The expression
+	 */
+	private Expression expression = null;
+
+	/**
+	 * Creates a new unparented Yield statement node owned by the given
+	 * AST. By default, the Yield statement has identifier/expression.
+	 * <p>
+	 * N.B. This constructor is package-private.
+	 * </p>
+	 *
+	 * @param ast the AST that is to own this node
+	 * @exception UnsupportedOperationException if this operation is used other than JLS13
+	 * @exception UnsupportedOperationException if this expression is used with previewEnabled flag as false
+	 */
+	YieldStatement(AST ast) {
+		super(ast);
+		supportedOnlyIn13();
+		unsupportedWithoutPreviewError();
+	}
+
+	@Override
+	final List internalStructuralPropertiesForType(int apiLevel) {
+		return propertyDescriptors(apiLevel);
+	}
+
+	@Override
+	final List internalStructuralPropertiesForType(int apiLevel, boolean previewEnabled) {
+		return propertyDescriptors(apiLevel, previewEnabled);
+	}
+	
+	@Override
+	final ASTNode internalGetSetChildProperty(ChildPropertyDescriptor property, boolean get, ASTNode child) {
+		if (property == EXPRESSION_PROPERTY) {
+			if (get) {
+				return getExpression();
+			} else {
+				setExpression((Expression) child);
+				return null;
+			}
+		}
+		// allow default implementation to flag the error
+		return super.internalGetSetChildProperty(property, get, child);
+	}
+
+	@Override
+	final int getNodeType0() {
+		return YIELD_STATEMENT;
+	}
+
+	@Override
+	ASTNode clone0(AST target) {
+		YieldStatement result = new YieldStatement(target);
+		result.setSourceRange(getStartPosition(), getLength());
+		result.copyLeadingComment(this);
+		if (this.ast.apiLevel >= AST.JLS12_INTERNAL) {
+			result.setExpression((Expression) ASTNode.copySubtree(target, getExpression()));
+		}
+		return result;
+	}
+
+	@Override
+	final boolean subtreeMatch0(ASTMatcher matcher, Object other) {
+		// dispatch to correct overloaded match method
+		return matcher.match(this, other);
+	}
+
+	@Override
+	void accept0(ASTVisitor visitor) {
+		boolean visitChildren = visitor.visit(this);
+		if (visitChildren) {
+			if (this.ast.apiLevel >= AST.JLS13_INTERNAL) {
+				acceptChild(visitor, getExpression());
+			} 
+		}
+		visitor.endVisit(this);
+	}
+	
+	/**
+	 * Returns the expression of this Yield statement, or <code>null</code> if
+	 * there is none.
+	 *
+	 * @return the expression, or <code>null</code> if there is none
+	 * @exception UnsupportedOperationException if this operation is used other than JLS13
+	 * @noreference This method is not intended to be referenced by clients as it is a part of Java preview feature.
+	 * @nooverride This method is not intended to be re-implemented or extended by clients as it is a part of Java preview feature.
+	 */
+	public Expression getExpression() {
+		supportedOnlyIn13();
+		return this.expression;
+	}
+
+	/**
+	 * Sets or clears the expression of this Yield statement.
+	 *
+	 * @param expression the expression
+	 * @exception IllegalArgumentException if:
+	 * <ul>
+	 * <li>the node belongs to a different AST</li>
+	 * <li>the node already has a parent</li>
+	 * </ul>
+	 * @exception UnsupportedOperationException if this operation is used other than JLS13
+	 * @noreference This method is not intended to be referenced by clients as it is a part of Java preview feature.
+	 * @nooverride This method is not intended to be re-implemented or extended by clients as it is a part of Java preview feature.
+	 */
+	public void setExpression(Expression expression) {
+		supportedOnlyIn13();
+		ASTNode oldChild = this.expression;
+		preReplaceChild(oldChild, expression, EXPRESSION_PROPERTY);
+		this.expression = expression;
+		postReplaceChild(oldChild, expression, EXPRESSION_PROPERTY);
+	}
+
+	/**
+	 * Gets the isImplicit of this break statement as <code>true</code> or <code>false</code>.
+	 *<code>true</code> indicates implicit and <code>false</code> indicates not implicit.
+	 *
+	 * @return isImplicit <code>true</code> or <code>false</code>
+	 * @exception UnsupportedOperationException if this operation is used other than JLS13
+	 * @noreference This method is not intended to be referenced by clients as it is a part of Java preview feature.
+	 * @nooverride This method is not intended to be re-implemented or extended by clients as it is a part of Java preview feature.
+	 */
+	public boolean isImplicit() {
+		supportedOnlyIn13();
+		return this.isImplicit;
+	}
+
+	/**
+	 * Sets the isImplicit of this break statement as <code>true</code> or <code>false</code>.
+	 * <code>true</code> indicates implicit and <code>false</code> indicates not implicit. This flag is
+	 * generated by compiler and is not expected to be set by client.
+
+	 * @param isImplicit <code>true</code> or <code>false</code>
+	 * @exception UnsupportedOperationException if this operation is used other than JLS13
+	 */
+	void setImplicit(boolean isImplicit) {
+		supportedOnlyIn13();
+		this.isImplicit = isImplicit;
+	}
+
+	
+	@Override
+	int memSize() {
+		return super.memSize() + 2 * 4;
+	}
+
+	@Override
+	int treeSize() {
+		return
+			memSize()
+			+ (this.expression == null ? 0 : getExpression().treeSize());
+	}
+}
+
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java
index c9a89ed..ad8cd46 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.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
  *     John Glassmyer <jogl@google.com> - import group sorting is broken - https://bugs.eclipse.org/430303
@@ -1315,7 +1319,7 @@
 
 		CompilationUnit usedAstRoot= this.astRoot;
 		if (usedAstRoot == null) {
-			ASTParser parser= ASTParser.newParser(AST.JLS11);
+			ASTParser parser= ASTParser.newParser(AST.JLS13);
 			parser.setSource(this.compilationUnit);
 			parser.setFocalPosition(0); // reduced AST
 			parser.setResolveBindings(false);
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/NaiveASTFlattener.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/NaiveASTFlattener.java
index 42099a2..84cd625 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/NaiveASTFlattener.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/NaiveASTFlattener.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:
@@ -83,14 +87,6 @@
 	private static final int JLS9 = AST.JLS9;
 	
 	/**
-	 * Internal synonym for {@link AST#JLS12}. Use to alleviate
-	 * deprecation warnings.
-	 * @since 3.18
-	 */
-	private static final int JLS12 = AST.JLS12;
-	
-
-	/**
 	 * The string buffer into which the serialized representation of the AST is
 	 * written.
 	 */
@@ -460,21 +456,12 @@
 
 	@Override
 	public boolean visit(BreakStatement node) {
-		if (node.getAST().apiLevel() == JLS12 && node.getAST().isPreviewEnabled() && node.isImplicit()  && node.getExpression() == null) {
-			return false;
-		}
 		printIndent();
-		this.buffer.append("break"); //$NON-NLS-1$
+		this.buffer.append("break");//$NON-NLS-1$
 		if (node.getLabel() != null) {
 			this.buffer.append(" ");//$NON-NLS-1$
 			node.getLabel().accept(this);
 		}
-		if (node.getAST().apiLevel() == JLS12 && node.getAST().isPreviewEnabled()) {
-			if (node.getExpression() != null) {
-				this.buffer.append(" ");//$NON-NLS-1$
-				node.getExpression().accept(this);
-			}
-		}
 		this.buffer.append(";\n");//$NON-NLS-1$
 		return false;
 	}
@@ -1504,7 +1491,7 @@
 
 	@Override
 	public boolean visit(SwitchCase node) {
-		if (node.getAST().apiLevel() == JLS12 && node.getAST().isPreviewEnabled()) {
+		if ((node.getAST().isPreviewEnabled())) {
 			if (node.isDefault()) {
 				this.buffer.append("default");//$NON-NLS-1$
 				this.buffer.append(node.isSwitchLabeledRule() ? " ->" : ":");//$NON-NLS-1$ //$NON-NLS-2$
@@ -1630,6 +1617,12 @@
 	}
 
 	@Override
+	public boolean visit(TextBlock node) {
+		this.buffer.append(node.getEscapedValue());
+		return false;
+	}
+	
+	@Override
 	public boolean visit(TextElement node) {
 		this.buffer.append(node.getText());
 		return false;
@@ -1920,6 +1913,21 @@
 		}
 		return false;
 	}
+	
+	@Override
+	public boolean visit(YieldStatement node) {
+		if ((node.getAST().isPreviewEnabled()) && node.isImplicit()  && node.getExpression() == null) {
+			return false;
+		}
+		printIndent();
+		this.buffer.append("yield"); //$NON-NLS-1$
+		if (node.getExpression() != null) {
+			this.buffer.append(" ");//$NON-NLS-1$
+			node.getExpression().accept(this);
+		}
+		this.buffer.append(";\n");//$NON-NLS-1$
+		return false;
+	}
 
 	/**
 	 * @deprecated
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java
index 04f7245..0abadfd 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.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:
@@ -137,8 +141,6 @@
 	/** @deprecated using deprecated code */
 	private static final int JLS9_INTERNAL = AST.JLS9;
 	
-	private static final int JLS12_INTERNAL = AST.JLS12;
-
 
 	TextEdit currentEdit;
 	final RewriteEventStore eventStore; // used from inner classes
@@ -2576,9 +2578,6 @@
 		try {
 			int offset= getScanner().getTokenEndOffset(TerminalTokens.TokenNamebreak, node.getStartPosition());
 			rewriteNode(node, BreakStatement.LABEL_PROPERTY, offset, ASTRewriteFormatter.SPACE); // space between break and label
-			if (node.getAST().apiLevel() == JLS12_INTERNAL && node.getAST().isPreviewEnabled()) {
-				rewriteNode(node, BreakStatement.EXPRESSION_PROPERTY, offset, ASTRewriteFormatter.SPACE); // space between break and label
-			}
 		} catch (CoreException e) {
 			handleException(e);
 		}
@@ -3519,7 +3518,7 @@
 		}
 
 		// dont allow switching from case to default or back. New statements should be created.
-		if (node.getAST().apiLevel() == JLS12_INTERNAL && node.getAST().isPreviewEnabled()) {
+		if (node.getAST().isPreviewEnabled()) {
 			int pos = node.expressions().size() == 0 ? node.getStartPosition() :
 					rewriteNodeList(node, SwitchCase.EXPRESSIONS2_PROPERTY, node.getStartPosition(), Util.EMPTY_STRING, ", "); //$NON-NLS-1$
 			if (isChanged(node, SwitchCase.SWITCH_LABELED_RULE_PROPERTY)) {
@@ -3743,7 +3742,7 @@
 					insertIndent++;
 				}
 				ParagraphListRewriter listRewriter;
-				if (node.getAST().apiLevel() == JLS12_INTERNAL && node.getAST().isPreviewEnabled()) {
+				if ((node.getAST().isPreviewEnabled())) {
 					listRewriter= new SwitchListLabeledRuleRewriter(insertIndent);
 				} else {
 					listRewriter= new SwitchListRewriter(insertIndent);
@@ -4066,6 +4065,18 @@
 	}
 
 	@Override
+	public boolean visit(TextBlock node) {
+		if (!hasChildrenChanges(node)) {
+			return doVisitUnchangedChildren(node);
+		}
+		String escapedSeq= (String) getNewValue(node, TextBlock.ESCAPED_VALUE_PROPERTY);
+		TextEditGroup group = getEditGroup(node, TextBlock.ESCAPED_VALUE_PROPERTY);
+		doTextReplace(node.getStartPosition(), node.getLength(), escapedSeq, group);
+
+		return false;
+	}
+	
+	@Override
 	public boolean visit(TextElement node) {
 		if (!hasChildrenChanges(node)) {
 			return doVisitUnchangedChildren(node);
@@ -4469,6 +4480,23 @@
 		}
 		return false;
 	}
+	
+	@Override
+	public boolean visit(YieldStatement node) {
+		if (!hasChildrenChanges(node)) {
+			return doVisitUnchangedChildren(node);
+		}
+
+		try {
+			int offset= getScanner().getTokenEndOffset(TerminalTokens.TokenNamebreak, node.getStartPosition());
+			if ((node.getAST().isPreviewEnabled())) {
+				rewriteNode(node, YieldStatement.EXPRESSION_PROPERTY, offset, ASTRewriteFormatter.SPACE); // space between yield and label
+			}
+		} catch (CoreException e) {
+			handleException(e);
+		}
+		return false;
+	}
 
 	final void handleException(Throwable e) {
 		throw new IllegalArgumentException("Document does not match the AST", e); //$NON-NLS-1$
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteFlattener.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteFlattener.java
index f3b3101..41ed859 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteFlattener.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteFlattener.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:
@@ -94,14 +98,6 @@
 	/** @deprecated using deprecated code */
 	private static final int JLS9_INTERNAL = AST.JLS9;
 	
-	/**
-	 * Internal synonym for {@link AST#JLS12}. Use to alleviate
-	 * deprecation warnings.
-	 * @since 3.18
-	 */
-	private static final int JLS12 = AST.JLS12;
-
-
 	public static String asString(ASTNode node, RewriteEventStore store) {
 		ASTRewriteFlattener flattener= new ASTRewriteFlattener(store);
 		node.accept(flattener);
@@ -362,23 +358,12 @@
 
 	@Override
 	public boolean visit(BreakStatement node) {
-		if (node.getAST().apiLevel() == JLS12 && node.getAST().isPreviewEnabled() && node.isImplicit()  && node.getExpression() == null) {
-			return false;
-		}
-		
 		this.result.append("break"); //$NON-NLS-1$
 		ASTNode label= getChildNode(node, BreakStatement.LABEL_PROPERTY);
 		if (label != null) {
 			this.result.append(' ');
 			label.accept(this);
 		}
-		if (node.getAST().apiLevel() == JLS12 && node.getAST().isPreviewEnabled()) {
-			ASTNode expression = getChildNode(node, BreakStatement.EXPRESSION_PROPERTY);
-			if (expression != null ) {
-				this.result.append(' ');
-				expression.accept(this);
-			}
-		}
 		this.result.append(';');
 		return false;
 	}
@@ -981,7 +966,7 @@
 
 	@Override
 	public boolean visit(SwitchCase node) {
-		if (node.getAST().apiLevel() == JLS12 && node.getAST().isPreviewEnabled()) {
+		if ((node.getAST().isPreviewEnabled())) {
 			if (node.isDefault()) {
 				this.result.append("default");//$NON-NLS-1$
 				this.result.append(getBooleanAttribute(node, SwitchCase.SWITCH_LABELED_RULE_PROPERTY) ? " ->" : ":");//$NON-NLS-1$ //$NON-NLS-2$
@@ -1281,6 +1266,12 @@
 	}
 
 	@Override
+	public boolean visit(TextBlock node) {
+		this.result.append(getAttribute(node, TextBlock.ESCAPED_VALUE_PROPERTY));
+		return false;
+	}
+	
+	@Override
 	public boolean visit(TextElement node) {
 		this.result.append(getAttribute(node, TextElement.TEXT_PROPERTY));
 		return false;
@@ -1507,4 +1498,21 @@
 		}
 		return false;
 	}
+	
+	@Override
+	public boolean visit(YieldStatement node) {
+		if (node.getAST().isPreviewEnabled() && node.isImplicit()  && node.getExpression() == null) {
+			return false;
+		}
+		
+		this.result.append("yield"); //$NON-NLS-1$
+
+		ASTNode expression = getChildNode(node, YieldStatement.EXPRESSION_PROPERTY);
+		if (expression != null ) {
+			this.result.append(' ');
+			expression.accept(this);
+		}
+		this.result.append(';');
+		return false;
+	}
 }
diff --git a/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/DefaultCodeFormatter.java b/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/DefaultCodeFormatter.java
index 4c6e947..fbad711 100644
--- a/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/DefaultCodeFormatter.java
+++ b/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/DefaultCodeFormatter.java
@@ -127,14 +127,14 @@
 			this.workingOptions = new DefaultCodeFormatterOptions(options);
 			this.oldCommentFormatOption = getOldCommentFormatOption(options);
 			String compilerSource = options.get(CompilerOptions.OPTION_Source);
-			this.sourceLevel = compilerSource != null ? compilerSource : CompilerOptions.VERSION_12;
+			this.sourceLevel = compilerSource != null ? compilerSource : CompilerOptions.VERSION_13;
 			this.previewEnabled = JavaCore.ENABLED.equals(options.get(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES));
 		} else {
 			Map<String, String> settings = DefaultCodeFormatterConstants.getJavaConventionsSettings();
 			this.originalOptions = new DefaultCodeFormatterOptions(settings);
 			this.workingOptions = new DefaultCodeFormatterOptions(settings);
 			this.oldCommentFormatOption = DefaultCodeFormatterConstants.TRUE;
-			this.sourceLevel = CompilerOptions.VERSION_12;
+			this.sourceLevel = CompilerOptions.VERSION_13;
 		}
 		if (defaultCodeFormatterOptions != null) {
 			this.originalOptions.set(defaultCodeFormatterOptions.getMap());
@@ -334,7 +334,7 @@
 	}
 
 	private ASTParser createParser(int kind) {
-		ASTParser parser = ASTParser.newParser(AST.JLS12);
+		ASTParser parser = ASTParser.newParser(AST.JLS13);
 
 		if (kind == K_MODULE_INFO) {
 			parser.setSource(createDummyModuleInfoCompilationUnit());
diff --git a/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/LineBreaksPreparator.java b/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/LineBreaksPreparator.java
index e4767e4..eb1a900 100644
--- a/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/LineBreaksPreparator.java
+++ b/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/LineBreaksPreparator.java
@@ -6,12 +6,17 @@
  * 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:
  *     Mateusz Matela <mateusz.matela@gmail.com> - [formatter] Formatter does not format Java code correctly, especially when max line width is set - https://bugs.eclipse.org/303519
  *     Mateusz Matela <mateusz.matela@gmail.com> - [formatter] IndexOutOfBoundsException in TokenManager - https://bugs.eclipse.org/462945
  *     Mateusz Matela <mateusz.matela@gmail.com> - [formatter] follow up bug for comments - https://bugs.eclipse.org/458208
+ *     IBM Corporation - DOM AST changes for JEP 354
  *******************************************************************************/
 package org.eclipse.jdt.internal.formatter;
 
@@ -75,6 +80,7 @@
 import org.eclipse.jdt.core.dom.VariableDeclarationExpression;
 import org.eclipse.jdt.core.dom.VariableDeclarationStatement;
 import org.eclipse.jdt.core.dom.WhileStatement;
+import org.eclipse.jdt.core.dom.YieldStatement;
 import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants;
 
 public class LineBreaksPreparator extends ASTVisitor {
@@ -364,7 +370,8 @@
 						this.tm.get(nonBreakStatementEnd + 1).indent();
 						this.tm.firstTokenIn(statement, -1).unindent();
 					}
-				} else if (!(statement instanceof BreakStatement || statement instanceof Block)) {
+				} else if (!(statement instanceof BreakStatement || statement instanceof YieldStatement
+						|| statement instanceof Block)) {
 					indent(statement);
 				}
 				nonBreakStatementEnd = isBreaking ? -1 : this.tm.lastIndexIn(statement, -1);
@@ -377,7 +384,7 @@
 		}
 		if (this.options.indent_breaks_compare_to_cases) {
 			for (Statement statement : statements) {
-				if (statement instanceof BreakStatement)
+				if (statement instanceof BreakStatement || statement instanceof YieldStatement)
 					indent(statement);
 			}
 		}
@@ -403,7 +410,7 @@
 	private boolean isSwitchBreakingStatement(Statement statement) {
 		return statement instanceof BreakStatement || statement instanceof ReturnStatement
 				|| statement instanceof ContinueStatement || statement instanceof ThrowStatement
-				|| statement instanceof Block;
+				|| statement instanceof YieldStatement || statement instanceof Block;
 	}
 
 	@Override
diff --git a/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/SpacePreparator.java b/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/SpacePreparator.java
index 86a8afd..10200f1 100644
--- a/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/SpacePreparator.java
+++ b/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/SpacePreparator.java
@@ -6,12 +6,16 @@
  * 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:
  *     Mateusz Matela <mateusz.matela@gmail.com> - [formatter] Formatter does not format Java code correctly, especially when max line width is set - https://bugs.eclipse.org/303519
  *     Mateusz Matela <mateusz.matela@gmail.com> - [formatter] IndexOutOfBoundsException in TokenManager - https://bugs.eclipse.org/462945
  *     Mateusz Matela <mateusz.matela@gmail.com> - [formatter] follow up bug for comments - https://bugs.eclipse.org/458208
+ *     IBM Corporation - DOM AST changes for JEP 354
  *******************************************************************************/
 package org.eclipse.jdt.internal.formatter;
 
@@ -25,6 +29,7 @@
 import java.util.Map;
 import java.util.function.Predicate;
 
+import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTVisitor;
 import org.eclipse.jdt.core.dom.Annotation;
@@ -38,7 +43,6 @@
 import org.eclipse.jdt.core.dom.AssertStatement;
 import org.eclipse.jdt.core.dom.Assignment;
 import org.eclipse.jdt.core.dom.Block;
-import org.eclipse.jdt.core.dom.BreakStatement;
 import org.eclipse.jdt.core.dom.CastExpression;
 import org.eclipse.jdt.core.dom.CatchClause;
 import org.eclipse.jdt.core.dom.ClassInstanceCreation;
@@ -103,6 +107,7 @@
 import org.eclipse.jdt.core.dom.VariableDeclarationStatement;
 import org.eclipse.jdt.core.dom.WhileStatement;
 import org.eclipse.jdt.core.dom.WildcardType;
+import org.eclipse.jdt.core.dom.YieldStatement;
 import org.eclipse.jdt.internal.compiler.parser.ScannerHelper;
 
 public class SpacePreparator extends ASTVisitor {
@@ -396,7 +401,7 @@
 
 	@Override
 	public boolean visit(SwitchCase node) {
-		if (node.isSwitchLabeledRule()) {
+		if (node.getAST().apiLevel() == AST.JLS13 && node.isSwitchLabeledRule()) {
 			handleToken(this.tm.lastTokenIn(node, TokenNameARROW),
 					node.isDefault() ? this.options.insert_space_before_arrow_in_switch_default
 							: this.options.insert_space_before_arrow_in_switch_case,
@@ -410,16 +415,18 @@
 		}
 		if (!node.isDefault()) {
 			handleToken(node, TokenNamecase, false, true);
-			handleCommas(node.expressions(), this.options.insert_space_before_comma_in_switch_case_expressions,
+			if (node.getAST().apiLevel() == AST.JLS13) {
+				handleCommas(node.expressions(), this.options.insert_space_before_comma_in_switch_case_expressions,
 					this.options.insert_space_after_comma_in_switch_case_expressions);
+			}
 		}
 		return true;
 	}
 
 	@Override
-	public boolean visit(BreakStatement node) {
+	public boolean visit(YieldStatement node) {
 		if (node.getExpression() != null && !node.isImplicit()) {
-			this.tm.firstTokenIn(node, TokenNamebreak).spaceAfter();
+			this.tm.firstTokenIn(node, -1).spaceAfter();
 		}
 		return true;
 	}
diff --git a/org.eclipse.jdt.core/grammar/java.g b/org.eclipse.jdt.core/grammar/java.g
index b39cc92..2b12257 100644
--- a/org.eclipse.jdt.core/grammar/java.g
+++ b/org.eclipse.jdt.core/grammar/java.g
@@ -56,6 +56,7 @@
 	DoubleLiteral
 	CharacterLiteral
 	StringLiteral
+	TextBlock
 
 	PLUS_PLUS
 	MINUS_MINUS
@@ -114,7 +115,7 @@
 	AT308
 	AT308DOTDOTDOT
 	BeginCaseExpr
-	BreakPreviewMarker
+	RestrictedIdentifierYield
 
 --    BodyMarker
 
@@ -217,6 +218,8 @@
 Goal ::= '<' ReferenceExpressionTypeArgumentsAndTrunk
 -- JSR 308 Reconnaissance mission.
 Goal ::= '@' TypeAnnotations
+-- JSR 354 Reconnaissance mission.
+Goal ::= '->' YieldStatement
 /:$readableName Goal:/
 
 Literal -> IntegerLiteral
@@ -225,6 +228,7 @@
 Literal -> DoubleLiteral
 Literal -> CharacterLiteral
 Literal -> StringLiteral
+Literal -> TextBlock
 Literal -> null
 Literal -> BooleanLiteral
 /:$readableName Literal:/
@@ -1207,6 +1211,7 @@
 StatementWithoutTrailingSubstatement -> ThrowStatement
 StatementWithoutTrailingSubstatement -> TryStatement
 StatementWithoutTrailingSubstatement -> TryStatementWithResources
+StatementWithoutTrailingSubstatement -> YieldStatement
 /:$readableName Statement:/
 
 EmptyStatement ::= ';'
@@ -1327,6 +1332,10 @@
 
 -- END SwitchExpression (JEP 325) --
 
+YieldStatement ::= RestrictedIdentifierYield Expression ;
+/.$putCase consumeStatementYield() ; $break ./
+/:$readableName YieldStatement:/
+
 WhileStatement ::= 'while' '(' Expression ')' Statement
 /.$putCase consumeStatementWhile() ; $break ./
 /:$readableName WhileStatement:/
@@ -1378,15 +1387,6 @@
 /.$putCase consumeStatementBreakWithLabel() ; $break ./
 /:$readableName BreakStatement:/
 
-BreakStatement ::= 'break' BreakPreviewMarker ';'
-/.$putCase consumeStatementBreak() ; $break ./
-/:$compliance 12:/
-
-BreakStatement ::= 'break' BreakPreviewMarker Expression ';'
-/.$putCase consumeStatementBreakWithExpressionOrLabel() ; $break ./
-/:$readableName BreakStatement:/
-/:$compliance 12:/
-
 ContinueStatement ::= 'continue' ';'
 /.$putCase consumeStatementContinue() ; $break ./
 
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java
index a0a596d..2189052 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java
@@ -3059,12 +3059,18 @@
 	public static final String VERSION_12 = "12"; //$NON-NLS-1$
 	/**
 	 * Configurable option value: {@value}.
+	 * @since 3.19 BETA_JAVA13
+	 * @category OptionValue
+	 */
+	public static final String VERSION_13 = "13"; //$NON-NLS-1$
+	/**
+	 * Configurable option value: {@value}.
 	 * @since 3.4
 	 * @category OptionValue
 	 */
 	public static final String VERSION_CLDC_1_1 = "cldc1.1"; //$NON-NLS-1$
 	private static List<String> allVersions = Collections.unmodifiableList(Arrays.asList(VERSION_CLDC_1_1, VERSION_1_1, VERSION_1_2, VERSION_1_3, VERSION_1_4, VERSION_1_5,
-			VERSION_1_6, VERSION_1_7, VERSION_1_8, VERSION_9, VERSION_10, VERSION_11, VERSION_12));
+			VERSION_1_6, VERSION_1_7, VERSION_1_8, VERSION_9, VERSION_10, VERSION_11, VERSION_12, VERSION_13));
 
 	/**
 	 * Returns all {@link JavaCore}{@code #VERSION_*} levels in the order of their 
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CopyResourceElementsOperation.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CopyResourceElementsOperation.java
index a55bb95..dca2bce 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CopyResourceElementsOperation.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CopyResourceElementsOperation.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
  *******************************************************************************/
@@ -90,7 +94,7 @@
 		initializeASTParser();
 	}
 	private void initializeASTParser() {
-		this.parser = ASTParser.newParser(AST.JLS11);
+		this.parser = ASTParser.newParser(AST.JLS13);
 	}
 	/**
 	 * Returns the children of <code>source</code> which are affected by this operation.
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CreateElementInCUOperation.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CreateElementInCUOperation.java
index 02de1a2..bfb68c9 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CreateElementInCUOperation.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CreateElementInCUOperation.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
  *******************************************************************************/
@@ -267,7 +271,7 @@
 		// ensure cu is consistent (noop if already consistent)
 		cu.makeConsistent(this.progressMonitor);
 		// create an AST for the compilation unit
-		ASTParser parser = ASTParser.newParser(AST.JLS11);
+		ASTParser parser = ASTParser.newParser(AST.JLS13);
 		parser.setSource(cu);
 		return (CompilationUnit) parser.createAST(this.progressMonitor);
 	}
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CreateTypeMemberOperation.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CreateTypeMemberOperation.java
index 40b2454..25813ab 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CreateTypeMemberOperation.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CreateTypeMemberOperation.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
  *******************************************************************************/
@@ -83,7 +87,7 @@
 protected ASTNode generateElementAST(ASTRewrite rewriter, ICompilationUnit cu) throws JavaModelException {
 	if (this.createdNode == null) {
 		this.source = removeIndentAndNewLines(this.source, cu);
-		ASTParser parser = ASTParser.newParser(AST.JLS11);
+		ASTParser parser = ASTParser.newParser(AST.JLS13);
 		parser.setSource(this.source.toCharArray());
 		parser.setProject(getCompilationUnit().getJavaProject());
 		parser.setKind(ASTParser.K_CLASS_BODY_DECLARATIONS);
@@ -170,7 +174,7 @@
 	buff.append(lineSeparator + " public class A {" + lineSeparator); //$NON-NLS-1$
 	buff.append(this.source);
 	buff.append(lineSeparator).append('}');
-	ASTParser parser = ASTParser.newParser(AST.JLS11);
+	ASTParser parser = ASTParser.newParser(AST.JLS13);
 	parser.setSource(buff.toString().toCharArray());
 	CompilationUnit compilationUnit = (CompilationUnit) parser.createAST(null);
 	TypeDeclaration typeDeclaration = (TypeDeclaration) compilationUnit.types().iterator().next();
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/DeleteElementsOperation.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/DeleteElementsOperation.java
index 78fc71d..5206fd6 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/DeleteElementsOperation.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/DeleteElementsOperation.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
  *******************************************************************************/
@@ -84,7 +88,7 @@
 	}
 
 	private void initASTParser() {
-		this.parser = ASTParser.newParser(AST.JLS11);
+		this.parser = ASTParser.newParser(AST.JLS13);
 	}
 
 	/**
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/CommentRecorderParser.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/CommentRecorderParser.java
index 20582f6..968c7f8 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/CommentRecorderParser.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/CommentRecorderParser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2017 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
  *******************************************************************************/
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/PublicScanner.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/PublicScanner.java
index e22c9ae..e7084cd 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/PublicScanner.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/PublicScanner.java
@@ -106,6 +106,7 @@
 	public static final String INVALID_CHARACTER_CONSTANT = "Invalid_Character_Constant";  //$NON-NLS-1$
 	public static final String INVALID_ESCAPE = "Invalid_Escape"; //$NON-NLS-1$
 	public static final String INVALID_INPUT = "Invalid_Input"; //$NON-NLS-1$
+	public static final String INVALID_TEXTBLOCK = "Invalid_Textblock"; //$NON-NLS-1$
 	public static final String INVALID_UNICODE_ESCAPE = "Invalid_Unicode_Escape"; //$NON-NLS-1$
 	public static final String INVALID_FLOAT = "Invalid_Float_Literal"; //$NON-NLS-1$
 	public static final String INVALID_LOW_SURROGATE = "Invalid_Low_Surrogate"; //$NON-NLS-1$
diff --git a/org.eclipse.jdt.core/pom.xml b/org.eclipse.jdt.core/pom.xml
index 2fe996a..5a2bba3 100644
--- a/org.eclipse.jdt.core/pom.xml
+++ b/org.eclipse.jdt.core/pom.xml
@@ -18,7 +18,7 @@
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.core</artifactId>
-  <version>3.19.0-SNAPSHOT</version>
+  <version>3.19.50-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 
   <properties>
diff --git a/org.eclipse.jdt.tests.latestBREE/.classpath b/org.eclipse.jdt.tests.latestBREE/.classpath
new file mode 100644
index 0000000..9c30b5c
--- /dev/null
+++ b/org.eclipse.jdt.tests.latestBREE/.classpath
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-13">
+		<attributes>
+			<attribute name="module" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src">
+		<attributes>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.jdt.tests.latestBREE/.project b/org.eclipse.jdt.tests.latestBREE/.project
new file mode 100644
index 0000000..55a5e82
--- /dev/null
+++ b/org.eclipse.jdt.tests.latestBREE/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.jdt.tests.latestBREE</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.jdt.tests.latestBREE/.settings/org.eclipse.core.resources.prefs b/org.eclipse.jdt.tests.latestBREE/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..d0ef0d6
--- /dev/null
+++ b/org.eclipse.jdt.tests.latestBREE/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding//src/org/eclipse/jdt/core/tests/compiler/regression/latest/TextBlockTest.java=UTF-8
diff --git a/org.eclipse.jdt.tests.latestBREE/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.jdt.tests.latestBREE/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..edf1606
--- /dev/null
+++ b/org.eclipse.jdt.tests.latestBREE/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,115 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=13
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=13
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=enabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=13
diff --git a/org.eclipse.jdt.tests.latestBREE/META-INF/MANIFEST.MF b/org.eclipse.jdt.tests.latestBREE/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..527baf4
--- /dev/null
+++ b/org.eclipse.jdt.tests.latestBREE/META-INF/MANIFEST.MF
@@ -0,0 +1,22 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: LatestBREE
+Bundle-SymbolicName: org.eclipse.jdt.tests.latestBREE
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.jdt.tests.latestbree.Activator
+Require-Bundle: org.junit;bundle-version="3.8.1",
+ org.eclipse.jdt.debug;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.jdt.core;bundle-version="[3.10.0,4.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.test.performance;bundle-version="[3.10.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.jdt.annotation;bundle-version="[1.1.0,2.0.0)";resolution:=optional,
+ org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";resolution:=optional,
+ org.eclipse.jdt.core.tests.model;bundle-version="[3.10.0,4.0.0)",
+ org.eclipse.jdt.core.tests.compiler;bundle-version="[3.10.0,4.0.0)",
+ javax.annotation
+Bundle-RequiredExecutionEnvironment: JavaSE-13
+Automatic-Module-Name: org.eclipse.jdt.tests.latestBREE
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.jdt.core.tests.compiler.regression.latest,
+ org.eclipse.jdt.tests.latestbree
diff --git a/org.eclipse.jdt.tests.latestBREE/build.properties b/org.eclipse.jdt.tests.latestBREE/build.properties
new file mode 100644
index 0000000..34d2e4d
--- /dev/null
+++ b/org.eclipse.jdt.tests.latestBREE/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
diff --git a/org.eclipse.jdt.tests.latestBREE/pom.xml b/org.eclipse.jdt.tests.latestBREE/pom.xml
new file mode 100644
index 0000000..fbd00ad
--- /dev/null
+++ b/org.eclipse.jdt.tests.latestBREE/pom.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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 Distribution License v1.0
+  which accompanies this distribution, and is available at
+  http://www.eclipse.org/org/documents/edl-v10.php
+
+  Contributors:
+    IBM Corporation - initial API and implementation
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>tests-pom</artifactId>
+    <groupId>eclipse.jdt.core</groupId>
+    <version>4.13.0-SNAPSHOT</version>
+    <relativePath>../tests-pom/</relativePath>
+  </parent>
+  <groupId>org.eclipse.jdt</groupId>
+  <artifactId>org.eclipse.jdt.tests.latestBREE</artifactId>
+  <version>1.0.0-SNAPSHOT</version>
+  <packaging>eclipse-test-plugin</packaging>
+
+  <properties>
+    <defaultSigning-excludeInnerJars>true</defaultSigning-excludeInnerJars>
+  </properties>
+
+  <build>
+  	<plugins>
+  		<plugin>
+  			<groupId>org.eclipse.tycho</groupId>
+	  		<artifactId>tycho-surefire-plugin</artifactId>
+	  		<version>${tycho.version}</version>
+	  		<configuration>
+	  			<includes>
+	  				<include>org/eclipse/jdt/core/tests/compiler/regression//latest/TestAll.class</include>
+	  			</includes>
+	  			<argLine>${tycho.surefire.argLine}</argLine>
+	  		</configuration>
+  		</plugin>
+  	</plugins>
+  </build>
+
+  <profiles>
+	<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.tests.latestBREE/src/org/eclipse/jdt/core/tests/compiler/regression/latest/TestAll.java b/org.eclipse.jdt.tests.latestBREE/src/org/eclipse/jdt/core/tests/compiler/regression/latest/TestAll.java
new file mode 100644
index 0000000..cdf4712
--- /dev/null
+++ b/org.eclipse.jdt.tests.latestBREE/src/org/eclipse/jdt/core/tests/compiler/regression/latest/TestAll.java
@@ -0,0 +1,34 @@
+package org.eclipse.jdt.core.tests.compiler.regression.latest;
+
+import java.util.ArrayList;
+
+import org.eclipse.jdt.core.tests.junit.extension.TestCase;
+import org.eclipse.jdt.core.tests.model.CompletionTests13;
+import org.eclipse.jdt.core.tests.util.AbstractCompilerTest;
+import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+@SuppressWarnings({ "unchecked", "rawtypes" })
+public class TestAll extends junit.framework.TestCase {
+
+public TestAll(String testName) {
+	super(testName);
+}
+public static Test suite() {
+
+	// Common test suites
+	ArrayList standardTests = new ArrayList();
+	standardTests.add(TextBlockTest.class);
+	standardTests.add(CompletionTests13.class);
+	TestSuite all = new TestSuite(TestAll.class.getName());
+	int possibleComplianceLevels = AbstractCompilerTest.getPossibleComplianceLevels();
+	if ((possibleComplianceLevels & AbstractCompilerTest.F_13) != 0) {
+		ArrayList tests_13 = (ArrayList)standardTests.clone();
+		TestCase.resetForgottenFilters(tests_13);
+		all.addTest(AbstractCompilerTest.buildComplianceTestSuite(ClassFileConstants.getComplianceLevelForJavaVersion(ClassFileConstants.MAJOR_VERSION_13), tests_13));
+	}
+	return all;
+}
+}
diff --git a/org.eclipse.jdt.tests.latestBREE/src/org/eclipse/jdt/core/tests/compiler/regression/latest/TextBlockTest.java b/org.eclipse.jdt.tests.latestBREE/src/org/eclipse/jdt/core/tests/compiler/regression/latest/TextBlockTest.java
new file mode 100644
index 0000000..8f8e9e0
--- /dev/null
+++ b/org.eclipse.jdt.tests.latestBREE/src/org/eclipse/jdt/core/tests/compiler/regression/latest/TextBlockTest.java
@@ -0,0 +1,857 @@
+/*******************************************************************************
+ * 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.latest;
+
+import java.util.Map;
+
+import org.eclipse.jdt.core.tests.compiler.regression.AbstractRegressionTest;
+import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
+
+import junit.framework.Test;
+
+@SuppressWarnings("preview")
+public class TextBlockTest extends AbstractRegressionTest {
+
+	static {
+//		TESTS_NUMBERS = new int [] { 40 };
+//		TESTS_NAMES = new String[] { "test007" };
+	}
+	
+	public static Class<?> testClass() {
+		return TextBlockTest.class;
+	}
+	public static Test suite() {
+		return buildMinimalComplianceTestSuite(testClass(), F_13);
+	}
+	public TextBlockTest(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);
+		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, Map<String, String> customOptions) {
+		super.runConformTest(testFiles, "", null, true, new String[] {"--enable-preview"}, customOptions, null);
+	}
+
+	@Override
+	protected void runConformTest(String[] testFiles, String expectedOutput, Map<String, String> customOptions) {
+		super.runConformTest(testFiles, expectedOutput, null, true, new String[] {"--enable-preview"}, customOptions, null);
+	}
+	public void test001() {
+		runNegativeTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	public static String textb = \"\"\"\"\"\";\n" +
+						"	public static void main(String[] args) {\n" +
+						"		System.out.println(textb);\n" +
+						"	}\n" +
+						"}\n"
+				},
+				"----------\n" + 
+				"1. ERROR in X.java (at line 2)\n" + 
+				"	public static String textb = \"\"\"\"\"\";\n" + 
+				"	                               ^^\n" + 
+				"Syntax error on token \"\"\"\", invalid AssignmentOperator\n" + 
+				"----------\n");
+	}
+	public void test002() {
+		runNegativeTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	public static String textb = \"\"\" \"\"\";\n" +
+						"	public static void main(String[] args) {\n" +
+						"		System.out.println(textb);\n" +
+						"	}\n" +
+						"}\n"
+				},
+				"----------\n" + 
+				"1. ERROR in X.java (at line 2)\n" + 
+				"	public static String textb = \"\"\" \"\"\";\n" + 
+				"	                               ^^^\n" + 
+				"Syntax error on token \"\" \"\", invalid AssignmentOperator\n" + 
+				"----------\n");
+	}
+	public void test003() {
+		runNegativeTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	public static String textb = \"\"\"\n" + 
+						"\";\n" +
+						"	public static void main(String[] args) {\n" +
+						"		System.out.println(textb);\n" +
+						"	}\n" +
+						"}\n"
+				},
+				"----------\n" + 
+				"1. ERROR in X.java (at line 2)\n" + 
+				"	public static String textb = \"\"\"\n" + 
+				"\";\n" + 
+				"	                             ^^^^^\n" + 
+				"Text block is not properly closed with the delimiter\n" + 
+				"----------\n");
+	}
+	/*
+	 * negative - unescaped '\' in a text block
+	 */
+	public void test004() {
+		runNegativeTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	public static String textb = \"\"\"\n" + 
+						"abc\\def" + 
+						"\"\"\";\n" +
+						"	public static void main(String[] args) {\n" +
+						"		System.out.println(textb);\n" +
+						"	}\n" +
+						"}\n"
+				},
+				"----------\n" + 
+				"1. ERROR in X.java (at line 2)\n" + 
+				"	public static String textb = \"\"\"\n" + 
+				"abc\\def\"\"\";\n" + 
+				"	                             ^^^^^^^^^^^^\n" + 
+				"Invalid escape sequence (valid ones are  \\b  \\t  \\n  \\f  \\r  \\\"  \\\'  \\\\ )\n" + 
+				"----------\n");
+	}
+	/* empty text block */
+	public void test005() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	public static String textb = \"\"\"\n" + 
+						"\"\"\";\n" +
+						"	public static void main(String[] args) {\n" +
+						"		System.out.println(textb);\n" +
+						"	}\n" +
+						"}\n"
+				},
+				"",
+				null,
+				new String[] {"--enable-preview"});
+	}
+	/*
+	 * positive - escaped '\'
+	 */
+	public void test006() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	public static String textb = \"\"\"\n" + 
+						"abc\\\\def\"" + 
+						"\"\"\";\n" +
+						"	public static void main(String[] args) {\n" +
+						"		System.out.println(textb);\n" +
+						"	}\n" +
+						"}\n"
+				},
+				"abc\\def\"",
+				null,
+				new String[] {"--enable-preview"});
+	}
+	/*
+	 * Positive - Multi line text block with varying indentation
+	 * and \n 
+	 */
+	public void test007() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	public static String textb = \"\"\"\n" + 
+						"    line 1\n" + 
+						"    line 2\n" + 
+						"  \n" + 
+						"  line 3\"\"\";\n" +
+						"	public static void main(String[] args) {\n" +
+						"		System.out.print(textb);\n" +
+						"	}\n" +
+						"}\n"
+				},
+				"line 1\n" + // test framework trims the leading whitespace
+				"  line 2\n" + 
+				"\n" + 
+				"line 3", 
+				null,
+				new String[] {"--enable-preview"});
+	}
+	/*
+	 * Positive - Multi line text block with varying indentation
+	 * and \n and \r
+	 */
+	public void test008() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	public static String textb = \"\"\"\n" + 
+						"    line 1\n" + 
+						"    line 2\r" + 
+						"  \r" + 
+						"  line 3\n\"\"\";\n" +
+						"	public static void main(String[] args) {\n" +
+						"		System.out.println(textb);\n" +
+						"	}\n" +
+						"}\n"
+				},
+				"line 1\n" + 
+				"  line 2\n" + 
+				"\n" + 
+				"line 3", // the trailing whitespace is trimmed by the test framework
+				null,
+				new String[] {"--enable-preview"});
+	}
+	/*
+	 * positive - using unescaped '"' in text block
+	 */
+	public void test009() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	public static String textb = \"\"\"\n" + 
+						"\"abc-def\"" + 
+						"\"\"\";\n" +
+						"	public static void main(String[] args) {\n" +
+						"		System.out.println(textb);\n" +
+						"	}\n" +
+						"}\n"
+				},
+				"\"abc-def\"",
+				null,
+				new String[] {"--enable-preview"});
+	}
+	/*
+	 * positive - using escaped '"' in text block
+	 */
+	public void test010() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	public static String textb = \"\"\"\n" + 
+						"\"abc-def\\\"\"\"\";\n" +
+						"	public static void main(String[] args) {\n" +
+						"		System.out.println(textb);\n" +
+						"	}\n" +
+						"}\n"
+				},
+				"\"abc-def\"",
+				null,
+				new String[] {"--enable-preview"});
+	}
+	/*
+	 * positive - using escaped escaped \ and escaped " in text block
+	 */
+	public void test011() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	public static String textb = \"\"\"\n" + 
+						"\"abc\\\"\"\"def\"\"\"\";\n" +
+						"	public static void main(String[] args) {\n" +
+						"		System.out.println(textb);\n" +
+						"	}\n" +
+						"}\n"
+				},
+				"\"abc\"\"\"def\"",
+				null,
+				new String[] {"--enable-preview"});
+	}
+	/*
+	 * positive - using Unicode in text block
+	 * and compare with an equal String literal
+	 */
+	public void test012() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	public static String textb = \"\"\"\n" + 
+						"\\u0ba4\\u0bae\\u0bbf\\u0bb4\"\"\";\n" +
+						"	public static String str = \"\\u0ba4\\u0bae\\u0bbf\\u0bb4\";\n" +
+						"	public static void main(String[] args) {\n" +
+						"		System.out.println(str.equals(textb));\n" +
+						"	}\n" +
+						"}\n"
+				},
+				"true",
+				null,
+				new String[] {"--enable-preview"});
+	}
+	/*
+	 * positive - bigger piece of code as text block
+	 */
+	public void test013() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"static String code = \"\"\"\n" + 
+						"              public void print(Object o) {\n" + 
+						"                  System.out.println(Objects.toString(o));\n" + 
+						"              }\n" + 
+						"              \"\"\";\n" +
+						"	public static void main(String[] args) {\n" +
+						"		System.out.println(code);\n" +
+						"	}\n" +
+						"}\n"
+				},
+				"public void print(Object o) {\n" + 
+				"    System.out.println(Objects.toString(o));\n" + 
+				"}",
+				null,
+				new String[] {"--enable-preview"});
+	}
+	/*
+	 * positive - concatenation of string with text block
+	 */
+	public void test014() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	static String code = \"public void print(Object o) {\\n\" +\n" + 
+						"              \"\"\"\n" + 
+						"                  System.out.println(Objects.toString(o));\n" + 
+						"              }\n" + 
+						"              \"\"\";\n" +
+						"	public static void main(String[] args) {\n" +
+						"		System.out.println(code);\n" +
+						"	}\n" +
+						"}\n"
+				},
+				"public void print(Object o) {\n" + 
+				"    System.out.println(Objects.toString(o));\n" + 
+				"}",
+				null,
+				new String[] {"--enable-preview"});
+	}
+	/*
+	 * positive - freely using quotes
+	 */
+	public void test015() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	static String story = \"\"\"\n" + 
+						"    \"When I use a word,\" Humpty Dumpty said,\n" + 
+						"    in rather a scornful tone, \"it means just what I\n" + 
+						"    choose it to mean - neither more nor less.\"\n" + 
+						"    \"The question is,\" said Alice, \"whether you\n" + 
+						"    can make words mean so many different things.\"\n" + 
+						"    \"The question is,\" said Humpty Dumpty,\n" + 
+						"    \"which is to be master - that's all.\"\"\"\";\n" +
+						"	public static void main(String[] args) {\n" +
+						"		System.out.println(story);\n" +
+						"	}\n" +
+						"}\n"
+				},
+				"\"When I use a word,\" Humpty Dumpty said,\n" + 
+				"in rather a scornful tone, \"it means just what I\n" + 
+				"choose it to mean - neither more nor less.\"\n" + 
+				"\"The question is,\" said Alice, \"whether you\n" + 
+				"can make words mean so many different things.\"\n" + 
+				"\"The question is,\" said Humpty Dumpty,\n" + 
+				"\"which is to be master - that's all.\"",
+				null,
+				new String[] {"--enable-preview"});
+	}
+	/*
+	 * positive - html code with indentation
+	 */
+	public void test016() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	static String html = \"\"\"\n" + 
+						"              <html>\\r" + 
+						"                  <body>\\r" + 
+						"                      <p>Hello, world</p>\\r" + 
+						"                  </body>\\r" + 
+						"              </html>\\r" + 
+						"              \"\"\";\n" +
+						"	public static void main(String[] args) {\n" +
+						"		System.out.println(html);\n" +
+						"	}\n" +
+						"}\n"
+				},
+				"<html>\n" + 
+				"    <body>\n" + 
+				"        <p>Hello, world</p>\n" + 
+				"    </body>\n" + 
+				"</html>",
+				null,
+				new String[] {"--enable-preview"});
+	}
+	/*
+	 * positive - html code with indentation with empty lines
+	 */
+	public void test016a() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	static String html = \"\"\"\n" + 
+						"              <html>\\r\\n" + 
+						"                  <body>\\r\\n" + 
+						"                      <p>Hello, world</p>\\r\\n" + 
+						"                  </body>\\r\\n" + 
+						"              </html>\\r\\n" + 
+						"              \"\"\";\n" +
+						"	public static void main(String[] args) {\n" +
+						"		System.out.println(html);\n" +
+						"	}\n" +
+						"}\n"
+				},
+				"<html>\n" + 
+				"    <body>\n" + 
+				"        <p>Hello, world</p>\n" + 
+				"    </body>\n" + 
+				"</html>",
+				null,
+				new String[] {"--enable-preview"});
+	}
+	/*
+	 * positive - html code with indentation with empty lines
+	 * output compared with String API
+	 */
+	@SuppressWarnings("removal")
+	public void test016b() {
+		String text = "  <html>\n" + 
+					"    <body>\n" + 
+					"      <p>Hello, world</p>\n" + 
+					"    </body>\n" + 
+					"  </html>";
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	static String html = \"\"\"\n" + 
+						text + "\\n" +
+						"\"\"\";\n" +
+						"	public static void main(String[] args) {\n" +
+						"		System.out.println(html);\n" +
+						"	}\n" +
+						"}\n"
+				},
+				text.stripIndent().translateEscapes(),
+				null,
+				new String[] {"--enable-preview"});
+			
+	}
+	/*
+	 * positive - html code with indentation with \r as terminator
+	 */
+	public void test016c() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	static String html = \"\"\"\n" + 
+						"              <html>\\r" + 
+						"                  <body>\\r" + 
+						"                      <p>Hello, world</p>\\r" + 
+						"                  </body>\\r" + 
+						"              </html>\\r" + 
+						"              \"\"\";\n" +
+						"	public static void main(String[] args) {\n" +
+						"		System.out.println(html);\n" +
+						"	}\n" +
+						"}\n"
+				},
+				"<html>\n" + 
+				"    <body>\n" + 
+				"        <p>Hello, world</p>\n" + 
+				"    </body>\n" + 
+				"</html>",
+				null,
+				new String[] {"--enable-preview"});
+	}
+	/*
+	 * positive - html code with indentation and trailing whitespace
+	 */
+	public void test017() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	static String html = \"\"\"\n" + 
+						"              <html>  \\r" + 
+						"                  <body>    \\r" + 
+						"                      <p>Hello, world</p>      \\r" + 
+						"                  </body>    \\r" + 
+						"              </html>  \\r" + 
+						"                   \"\"\";\n" +
+						"	public static void main(String[] args) {\n" +
+						"		System.out.println(html);\n" +
+						"	}\n" +
+						"}\n"
+				},
+				"<html>\n" + 
+				"    <body>\n" + 
+				"        <p>Hello, world</p>\n" + 
+				"    </body>\n" + 
+				"</html>",
+				null,
+				new String[] {"--enable-preview"});
+	}
+	/*
+	 * positive - using octal escape char for trailing whitespace
+	 */
+	public void test018() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	static String html = \"\"\"\n" + 
+						"              <html>\\040\\040\\r" + 
+						"                  <body>\\040\\040\\r" + 
+						"                      <p>Hello, world</p>\\040\\040\\040\\r" + 
+						"                  </body>\\040\\040\\r" + 
+						"              </html>\\040\\040\\r" + 
+						"                   \"\"\";\n" +
+						"	public static void main(String[] args) {\n" +
+						"		System.out.println(html);\n" +
+						"	}\n" +
+						"}\n"
+				},
+				"<html>  \n" + 
+				"    <body>  \n" + 
+				"        <p>Hello, world</p>   \n" + 
+				"    </body>  \n" + 
+				"</html>  ",
+				null,
+				new String[] {"--enable-preview"});
+	}
+	/*
+	 * positive - using text block as a method argument
+	 */
+	public void test019() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	public static void main(String[] args) {\n" +
+						"		System.out.println(\"\"\"\n" + 
+						"              <html>\\n" + 
+						"                  <body>\\n" + 
+						"                      <p>Hello, world</p>\\n" + 
+						"                  </body>\\n" + 
+						"              </html>\\n" + 
+						"              \"\"\");\n" +
+						"	}\n" +
+						"}\n"
+				},
+				"<html>\n" + 
+				"    <body>\n" + 
+				"        <p>Hello, world</p>\n" + 
+				"    </body>\n" + 
+				"</html>",
+				null,
+				new String[] {"--enable-preview"});
+	}
+	/*
+	 * positive - using variable assigned with text block as a method argument
+	 */
+	public void test020() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	public static void main(String[] args) {\n" +
+						"		String html = \"\"\"\n" + 
+						"              <html>\n" + 
+						"                  <body>\n" + 
+						"                      <p>Hello, world</p>\n" + 
+						"                  </body>\n" + 
+						"              </html>\n" + 
+						"                  \"\"\";\n" +	
+						"		System.out.println(html);\n" +
+						"	}\n" +
+						"}\n"
+				},
+				"<html>\n" + 
+				"    <body>\n" + 
+				"        <p>Hello, world</p>\n" + 
+				"    </body>\n" + 
+				"</html>",
+				null,
+				new String[] {"--enable-preview"});
+	}
+	/*
+	 * positive - assigning strings and text blocks interchangeably.
+	 */
+	public void test021() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	public static void main(String[] args) {\n" +
+						"		String html = \"\"\"\n" + 
+						"              <html>\n" + 
+						"                  <body>\n" + 
+						"                      <p>Hello, world</p>\n" + 
+						"                  </body>\n" + 
+						"              </html>\n" + 
+						"                  \"\"\";\n" +	
+						"       String s = html;\n" +	
+						"		System.out.println(s);\n" +
+						"	}\n" +
+						"}\n"
+				},
+				"<html>\n" + 
+				"    <body>\n" + 
+				"        <p>Hello, world</p>\n" + 
+				"    </body>\n" + 
+				"</html>",
+				null,
+				new String[] {"--enable-preview"});
+	}
+	/*
+	 * positive - escaped '\', compare with String::translateEscapes
+	 */
+	@SuppressWarnings("removal")
+	public void test022() {
+		String text = "abc\\\\def\"";
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	public static String textb = \"\"\"\n" + 
+						text + 
+						"\"\"\";\n" +
+						"	public static void main(String[] args) {\n" +
+						"		System.out.println(textb);\n" +
+						"	}\n" +
+						"}\n"
+				},
+				text.translateEscapes(),
+				null,
+				new String[] {"--enable-preview"});
+	}
+	/*
+	 * positive - escaped """, compare output with 
+	 * 							String::translateEscapes
+	 * 							String::stripIndent
+	 */
+	@SuppressWarnings("removal")
+	public void test023() {
+		String text = "abc\\\"\"\"def\"  ";
+		System.out.println(text.translateEscapes().stripIndent());
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"	public static String textb = \"\"\"\n" + 
+						text + 
+						"\"\"\";\n" +
+						"	public static void main(String[] args) {\n" +
+						"		System.out.println(textb);\n" +
+						"	}\n" +
+						"}\n"
+				},
+				text.translateEscapes().stripIndent(),
+				null,
+				new String[] {"--enable-preview"});
+	}
+	public void test024() {
+		runConformTest(
+				new String[] {
+						"Main.java",
+						"@SuppressWarnings(\"preview\")\n" + 
+						"public class Main {\n" + 
+						"    public static void main(String[] args) {\n" + 
+						"		runConformTest(\n" + 
+						"				new String[] {\n" + 
+						"						\"XYZ.java\",\n" + 
+						"						\"\"\"\n" + 
+						"								public class XYZ {\n" + 
+						"									public static String textb = \\\"\"\"\n" + 
+						"											abc\\\\\\\"\"\"def\"  \n" + 
+						"												\\\"\"\";\n" + 
+						"									public static void main(String[] args) {\n" + 
+						"										System.out.println(textb);\n" + 
+						"									}\n" + 
+						"								} \n" + 
+						"						\"\"\"\n" + 
+						"				}, \n" + 
+						"				\"\",\n" + 
+						"				null,\n" + 
+						"				new String[] {\"--enable-preview\"});\n" + 
+						"    }\n" + 
+						"	private static void runConformTest(String[] strings, String text, Object object, String[] strings2) {\n" + 
+						"		System.out.println(strings[1]);\n" + 
+						"	}\n" + 
+						"}"
+				}, 
+				"public class XYZ {\n" + 
+				"	public static String textb = \"\"\"\n" + 
+				"			abc\\\"\"\"def\"\n" + 
+				"				\"\"\";\n" + 
+				"	public static void main(String[] args) {\n" + 
+				"		System.out.println(textb);\n" + 
+				"	}\n" + 
+				"}",
+				null,
+				new String[] {"--enable-preview"});
+	}
+	public void test025() {
+		runNegativeTest(
+				new String[] {
+						"""
+						X.java""",
+						"""
+						public class X {
+							public static String textb = \"""
+									abc\\def\""";
+							public static void main(String[] args) {
+								System.out.println(textb);
+							}
+						}
+						"""
+				}, 
+				"----------\n" + 
+				"1. ERROR in X.java (at line 2)\n" + 
+				"	public static String textb = \"\"\"\n" + 
+				"			abc\\def\"\"\";\n" + 
+				"	                             ^^^^^^^^^^^^^^^\n" + 
+				"Invalid escape sequence (valid ones are  \\b  \\t  \\n  \\f  \\r  \\\"  \\\'  \\\\ )\n" + 
+				"----------\n",
+				null,
+				true,
+				getCompilerOptions());
+	}
+	@SuppressWarnings("removal")
+	public void test026() {
+		String text = "abc\\\\def";
+		runConformTest(
+				new String[] {
+						"""
+						X.java""",
+						"""
+						public class X {
+							public static String textb = \"""
+									abc\\\\def\""";
+							public static void main(String[] args) {
+								System.out.println(textb);
+							}
+						}
+						"""
+				}, 
+				text.translateEscapes(),
+				getCompilerOptions(),
+				new String[] {"--enable-preview"});
+	}
+	public void test027() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"  public static void main (String[] args) {\n" +
+						"     String xyz = \n" + 
+						"       \"\"\"\n" + 
+						"         public class Switch {\n" + 
+						"           public static void bar(int arg0) {\n" + 
+						"             int arg1 = 0;\n" + 
+						"             pointer: foo(\n" + 
+						"               switch (0 + arg0) {\n" + 
+						"                 case 1 -> 1;\n" + 
+						"                 default -> {break p;}\\n\"\n" + 
+						"               }\n" + 
+						"             });\n" + 
+						"             public static void foo(int arg0) {\n" + 
+						"               bar(MyDay.SUNDAY);\n" + 
+						"               }\n" + 
+						"             }\\n\"\"\";  \n" + 
+						"    System.out.println(xyz);\n" +
+						"  }\n" +
+						"}"
+				}, 
+				"public class Switch {\n" + 
+				"           public static void bar(int arg0) {\n" + 
+				"             int arg1 = 0;\n" + 
+				"             pointer: foo(\n" + 
+				"               switch (0 + arg0) {\n" + 
+				"                 case 1 -> 1;\n" + 
+				"                 default -> {break p;}\n" + 
+				"\"\n" + 
+				"               }\n" + 
+				"             });\n" + 
+				"             public static void foo(int arg0) {\n" + 
+				"               bar(MyDay.SUNDAY);\n" + 
+				"               }\n" + 
+				"             }",
+				getCompilerOptions(),
+				new String[] {"--enable-preview"});
+	}
+	// An empty text block
+	public void test028() {
+		runConformTest(
+				new String[] {
+						"X.java",
+						"public class X {\n" +
+						"  public static void main (String[] args) {\n" +
+						"     String xyz = \n" + 
+						"       \"\"\"\n" + 
+						"         \\n\"\"\";  \n" + 
+						"    System.out.println(xyz);\n" +
+						"  }\n" +
+						"}"
+				}, 
+				"",
+				getCompilerOptions(),
+				new String[] {"--enable-preview"});
+	}
+	// An empty text block
+	public void test029() {
+		runConformTest(
+				new String[] {
+						"Cls2.java",
+						"public class Cls2 {\n" + 
+						"	public static String str = \"\"\"\n" + 
+						"			   Hello Guru	\n" + 
+						"				\n" + 
+						"			\"\"\";\n" + 
+						"  public static void main (String[] args) {\n" +
+						"    System.out.println(str);\n" +
+						"  }\n" +
+						"}"
+				}, 
+				"Hello Guru", // output comparison tool strips off all trailing whitespace
+				getCompilerOptions(),
+				new String[] {"--enable-preview"});
+	}
+}
diff --git a/org.eclipse.jdt.tests.latestBREE/src/org/eclipse/jdt/core/tests/model/CompletionTests13.java b/org.eclipse.jdt.tests.latestBREE/src/org/eclipse/jdt/core/tests/model/CompletionTests13.java
new file mode 100644
index 0000000..f940935
--- /dev/null
+++ b/org.eclipse.jdt.tests.latestBREE/src/org/eclipse/jdt/core/tests/model/CompletionTests13.java
@@ -0,0 +1,1607 @@
+/*******************************************************************************
+ * 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/
+ *
+ * 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
+ * 
+ *******************************************************************************/
+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 org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
+
+import junit.framework.Test;
+
+@SuppressWarnings("preview")
+public class CompletionTests13 extends AbstractJavaModelCompletionTests {
+
+	static {
+//		TESTS_NAMES = new String[]{"test034"};
+	}
+
+	public CompletionTests13(String name) {
+		super(name);
+	}
+	public void setUpSuite() throws Exception {
+		if (COMPLETION_PROJECT == null)  {
+			COMPLETION_PROJECT = setUpJavaProject("Completion", "13");
+		} else {
+			setUpProjectCompliance(COMPLETION_PROJECT, "13");
+		}
+		super.setUpSuite();
+	}
+	public static Test suite() {
+		return buildModelTestSuite(CompletionTests13.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 { 
+						public static void bar(MyDay day) {
+							switch (day.toS) {
+							case "SATURDAY" -> 
+								System.out.println(day.toString());
+							}
+						}
+						public static void main(String[] args) {
+							bar(MyDay.SUNDAY);
+						}
+					}
+					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 {
+					public static void bar(int arg0) {
+						pointer: foo(
+						switch (0 + arg0) {
+							case 1 -> {break ;}
+							default -> 0;
+						}
+					});
+					public static void foo(int arg0) {
+						bar(MyDay.SUNDAY);
+					}
+				}""");
+		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
+		requestor.allowAllRequiredProposals();
+		String str = this.workingCopies[0].getSource();
+		String completeBehind = "break ";
+		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
+		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
+		assertResults(
+				"pointer[LABEL_REF]{pointer, null, null, pointer, null, 49}",
+						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 {
+					public static void bar(int arg0) {
+						int arg1 = 0;
+						pointer: foo(
+						switch (0 + arg0) {
+						case 1 -> 1;
+						default -> {break p;}
+						}
+					});
+					public static void foo(int arg0) {
+						bar(MyDay.SUNDAY);
+					}
+				}""");
+		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
+		requestor.allowAllRequiredProposals();
+		String str = this.workingCopies[0].getSource();
+		String completeBehind = "break p";
+		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
+		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
+		assertResults(
+				"pointer[LABEL_REF]{pointer, null, null, pointer, null, 49}",
+						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(
+				"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());
+	}
+	/*
+	 * Try completion for break keyword inside switch expression - negative
+	 */
+	public void test022() 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" + 
+				"	@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 -> {br;}\n" + 
+				"	    default      -> {\n" + 
+				"	        int g = day.hashCode();\n" + 
+				"	        int result = f(g);\n" + 
+				"	        yield 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 = "case WEDNESDAY -> {br";
+		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
+		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
+		assertResults(
+				"break[KEYWORD]{break, null, null, break, null, 49}",
+						requestor.getResults());
+	}
+	/*
+	 * Try completion for yield keyword - positive
+	 */
+	public void test023() throws JavaModelException {
+		this.workingCopies = new ICompilationUnit[1];
+		this.workingCopies[0] = getWorkingCopy(
+				"/Completion/src/X.java",
+				"""
+					public class X {
+						@SuppressWarnings("preview")
+						public static void main(String[] args) {
+							String day = "MONDAY";
+							int k = switch (day) {
+						    case "M"  -> throw new NullPointerException();
+						    case "T" -> 1;
+						    case "W" -> {yi ;}
+						    default      -> {
+						        int g = day.hashCode();
+						        int result = f(g);
+						        yield result;
+						    }};
+						}
+						static int f(int k) {
+							return k*k;
+						}
+					}
+				""");
+		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
+		requestor.allowAllRequiredProposals();
+		String str = this.workingCopies[0].getSource();
+		String completeBehind = "case \"W\" -> {yi";
+		int cursorLocation = str.indexOf(completeBehind) + completeBehind.length();
+		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
+		assertResults(
+				"yield[KEYWORD]{yield, null, null, yield, null, 49}",
+						requestor.getResults());
+	}
+	/*
+	 * Try completion for yield with identifier - positive
+	 */
+	public void test024() throws JavaModelException {
+		String old = COMPLETION_PROJECT.getOption(CompilerOptions.OPTION_EnablePreviews, true);
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		this.workingCopies = new ICompilationUnit[1];
+		this.workingCopies[0] = getWorkingCopy(
+				"/Completion/src/X.java",
+				"public class X {\n" + 
+				"	@SuppressWarnings(\"preview\")\n" + 
+				"	public static void main(String day) {\n" + 
+				"		int k = switch (day) {\n" + 
+				"	    default      -> {\n" + 
+				"	        int g = day.hashCode();\n" + 
+				"	        int result = f(g);\n" + 
+				"	        yield res;\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 = "yield res";
+		int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
+		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
+		assertResults(
+				"result[LOCAL_VARIABLE_REF]{result, null, I, result, null, 52}",
+						requestor.getResults());
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, old);
+	}
+	/*
+	 * Try completion for yield with identifier with a preceding case with yield - positive
+	 */
+	public void test024a() throws JavaModelException {
+		String old = COMPLETION_PROJECT.getOption(CompilerOptions.OPTION_EnablePreviews, true);
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		this.workingCopies = new ICompilationUnit[1];
+		this.workingCopies[0] = getWorkingCopy(
+				"/Completion/src/X.java",
+				"public class X {\n" + 
+				"	@SuppressWarnings(\"preview\")\n" + 
+				"	public static void main(String day) {\n" + 
+				"		int k = switch (day) {\n" + 
+				"	    case TUESDAY -> { yield 1;}\n" + 
+				"	    default      -> {\n" + 
+				"	        int g = day.hashCode();\n" + 
+				"	        int result = f(g);\n" + 
+				"	        yield res;\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 = "yield res";
+		int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
+		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
+		assertResults(
+				"result[LOCAL_VARIABLE_REF]{result, null, I, result, null, 52}",
+						requestor.getResults());
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, old);
+	}
+	/*
+	 * Try completion for yield with identifier with a preceding case with yield - positive
+	 */
+	public void test024b() throws JavaModelException {
+		String old = COMPLETION_PROJECT.getOption(CompilerOptions.OPTION_EnablePreviews, true);
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		this.workingCopies = new ICompilationUnit[1];
+		this.workingCopies[0] = getWorkingCopy(
+				"/Completion/src/X.java",
+				"public class X {\n" + 
+				"	@SuppressWarnings(\"preview\")\n" + 
+				"	public static void main(String day) {\n" + 
+				"		int k = switch (day) {\n" + 
+				"	    case TUESDAY -> { yield 1;}\n" + 
+				"	    default      -> {\n" + 
+				"	        int g = day.hashCode();\n" + 
+				"	        int result = f(g);\n" + 
+				"	        yield 0 + res;\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 = "yield 0 + res";
+		int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
+		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
+		assertResults(
+				"result[LOCAL_VARIABLE_REF]{result, null, I, result, null, 52}",
+						requestor.getResults());
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, old);
+	}
+	/*
+	 * Try completion in a switch expression case block without any assist keyword
+	 */
+	public void test024c() throws JavaModelException {
+		String old = COMPLETION_PROJECT.getOption(CompilerOptions.OPTION_EnablePreviews, true);
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		this.workingCopies = new ICompilationUnit[1];
+		this.workingCopies[0] = getWorkingCopy(
+				"/Completion/src/X.java",
+				"public class X {\n" + 
+				"	@SuppressWarnings(\"preview\")\n" + 
+				"	public static void main(String day) {\n" + 
+				"		int k = switch (day) {\n" + 
+				"	    case TUESDAY -> { yield 1;}\n" + 
+				"	    default      -> {\n" + 
+				"	        int[] g = new int[0];\n" + 
+				"	        yield g.;\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 = "yield g.";
+		int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
+		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
+		assertResults(
+				"length[FIELD_REF]{length, [I, I, length, null, 49}\n" + 
+				"clone[METHOD_REF]{clone(), [I, ()[I, clone, null, 60}\n" + 
+				"equals[METHOD_REF]{equals(), Ljava.lang.Object;, (Ljava.lang.Object;)Z, equals, (obj), 60}\n" + 
+				"finalize[METHOD_REF]{finalize(), Ljava.lang.Object;, ()V, finalize, null, 60}\n" + 
+				"getClass[METHOD_REF]{getClass(), Ljava.lang.Object;, ()Ljava.lang.Class<+Ljava.lang.Object;>;, getClass, null, 60}\n" + 
+				"hashCode[METHOD_REF]{hashCode(), Ljava.lang.Object;, ()I, hashCode, null, 60}\n" + 
+				"notify[METHOD_REF]{notify(), Ljava.lang.Object;, ()V, notify, null, 60}\n" + 
+				"notifyAll[METHOD_REF]{notifyAll(), Ljava.lang.Object;, ()V, notifyAll, null, 60}\n" + 
+				"toString[METHOD_REF]{toString(), Ljava.lang.Object;, ()Ljava.lang.String;, toString, null, 60}\n" + 
+				"wait[METHOD_REF]{wait(), Ljava.lang.Object;, ()V, wait, null, 60}\n" + 
+				"wait[METHOD_REF]{wait(), Ljava.lang.Object;, (J)V, wait, (millis), 60}\n" + 
+				"wait[METHOD_REF]{wait(), Ljava.lang.Object;, (JI)V, wait, (millis, nanos), 60}",
+						requestor.getResults());
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, old);
+	}
+	/*
+	 * Try completion in a switch expression case block without any assist keyword
+	 */
+	public void test024d() throws JavaModelException {
+		String old = COMPLETION_PROJECT.getOption(CompilerOptions.OPTION_EnablePreviews, true);
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		this.workingCopies = new ICompilationUnit[1];
+		this.workingCopies[0] = getWorkingCopy(
+				"/Completion/src/X.java",
+				"public class X {\n" + 
+				"	@SuppressWarnings(\"preview\")\n" + 
+				"	public static void main(String[] args) {\n" + 
+				"	String day = args[0];\n" + 
+				"		int k = switch (day) {\n" + 
+				"	    case TUESDAY -> { yield 1;}\n" + 
+				"	    default      -> {\n" + 
+				"	        int[] g = args.;\n" + 
+				"	        yield g;\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 = "int[] g = args.";
+		int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
+		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
+		assertResults(
+				"length[FIELD_REF]{length, [Ljava.lang.String;, I, length, null, 49}\n" + 
+				"finalize[METHOD_REF]{finalize(), Ljava.lang.Object;, ()V, finalize, null, 55}\n" + 
+				"notify[METHOD_REF]{notify(), Ljava.lang.Object;, ()V, notify, null, 55}\n" + 
+				"notifyAll[METHOD_REF]{notifyAll(), Ljava.lang.Object;, ()V, notifyAll, null, 55}\n" + 
+				"wait[METHOD_REF]{wait(), Ljava.lang.Object;, ()V, wait, null, 55}\n" + 
+				"wait[METHOD_REF]{wait(), Ljava.lang.Object;, (J)V, wait, (millis), 55}\n" + 
+				"wait[METHOD_REF]{wait(), Ljava.lang.Object;, (JI)V, wait, (millis, nanos), 55}\n" + 
+				"clone[METHOD_REF]{clone(), [Ljava.lang.String;, ()[Ljava.lang.String;, clone, null, 60}\n" + 
+				"equals[METHOD_REF]{equals(), Ljava.lang.Object;, (Ljava.lang.Object;)Z, equals, (obj), 60}\n" + 
+				"getClass[METHOD_REF]{getClass(), Ljava.lang.Object;, ()Ljava.lang.Class<+Ljava.lang.Object;>;, getClass, null, 60}\n" + 
+				"hashCode[METHOD_REF]{hashCode(), Ljava.lang.Object;, ()I, hashCode, null, 60}\n" + 
+				"toString[METHOD_REF]{toString(), Ljava.lang.Object;, ()Ljava.lang.String;, toString, null, 60}",
+						requestor.getResults());
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, old);
+	}
+	/*
+	 * Try completion for yield with value inside switch - positive
+	 * 
+	 */
+	public void test025() 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" + 
+				"	@SuppressWarnings(\"preview\")\n" + 
+				"	public static void main(String[] args) {\n" + 
+				"	 resolve: {" + 
+				"		String day = \"MONDAY\";\n" + 
+				"		int k = switch (day) {\n" + 
+				"	    case MONDAY  -> throw new NullPointerException();\n" + 
+				"	    case TUESDAY -> 1;\n" + 
+				"	    case WEDNESDAY -> {yield 10;}\n" + 
+				"	    default      -> {\n" + 
+				"	        yield day.h;\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 = "yield 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, 60}",
+						requestor.getResults());
+	}
+	/*
+	 * Try completion for yield keyword - inside nested block
+	 */
+	public void test026() throws JavaModelException {
+		String old = COMPLETION_PROJECT.getOption(CompilerOptions.OPTION_EnablePreviews, true);
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		this.workingCopies = new ICompilationUnit[1];
+		this.workingCopies[0] = getWorkingCopy(
+				"/Completion/src/X.java",
+				"""
+					public class X {
+						@SuppressWarnings("preview")
+						public static void main(String day) {
+							int k = switch (day) {
+						    case "W" -> {yield 2;}
+						    default      -> {
+						        int g = day.hashCode();
+						        int result = f(g);
+						        {
+						        	yie;
+						        }
+						    }};
+						}
+						static int f(int k) {
+							return k*k;
+						}
+					}
+				""");
+		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
+		requestor.allowAllRequiredProposals();
+		String str = this.workingCopies[0].getSource();
+		String completeBehind = "yie";
+		int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
+		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
+		assertResults(
+				"yield[KEYWORD]{yield, null, null, yield, null, 49}",
+						requestor.getResults());
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, old);
+	}
+	/*
+	 * Try completion for yield - inside nested block
+	 */
+	public void test027() throws JavaModelException {
+		String old = COMPLETION_PROJECT.getOption(CompilerOptions.OPTION_EnablePreviews, true);
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		this.workingCopies = new ICompilationUnit[1];
+		this.workingCopies[0] = getWorkingCopy(
+				"/Completion/src/X.java",
+				"""
+					public class X {
+						@SuppressWarnings("preview")
+						public static void main(String day) {
+							int k = switch (day) {
+						    case "W" -> {yield 2;}
+						    default      -> {
+						        int g = day.hashCode();
+						        int result = f(g);
+						        {
+						        	yield res;
+						        }
+						    }};
+						}
+						static int f(int k) {
+							return k*k;
+						}
+					}
+				""");
+		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
+		requestor.allowAllRequiredProposals();
+		String str = this.workingCopies[0].getSource();
+		String completeBehind = "yield res";
+		int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
+		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
+		assertResults(
+				"result[LOCAL_VARIABLE_REF]{result, null, I, result, null, 52}",
+						requestor.getResults());
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, old);
+	}
+	/*
+	 * Try completion for yield - inside nested block
+	 */
+	public void test028() throws JavaModelException {
+		String old = COMPLETION_PROJECT.getOption(CompilerOptions.OPTION_EnablePreviews, true);
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		this.workingCopies = new ICompilationUnit[1];
+		this.workingCopies[0] = getWorkingCopy(
+				"/Completion/src/X.java",
+				"""
+					public class X {
+						@SuppressWarnings("preview")
+						public static void main(String day) {
+							int k = switch (day) {
+						    case "W" -> {yield 2;}
+						    default      -> {
+						        int g = day.hashCode();
+						        int result = f(g);
+						        {
+						        	for(int i = 0; i < 3; i++) {
+						        		if (i == 0) {
+						        			yield day.h
+						        		}
+						        	}
+						        	yield 0;
+						        }
+						    }};
+						}
+						static int f(int k) {
+							return k*k;
+						}
+					}
+				""");
+		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
+		requestor.allowAllRequiredProposals();
+		String str = this.workingCopies[0].getSource();
+		String completeBehind = "yield day.h";
+		int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
+		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
+		assertResults(
+				"hashCode[METHOD_REF]{hashCode(), Ljava.lang.Object;, ()I, hashCode, null, 60}",
+						requestor.getResults());
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, old);
+	}
+	/*
+	 * Try completion of other keywords inside switch expression nested block
+	 */
+	public void test029() throws JavaModelException {
+		String old = COMPLETION_PROJECT.getOption(CompilerOptions.OPTION_EnablePreviews, true);
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		this.workingCopies = new ICompilationUnit[1];
+		this.workingCopies[0] = getWorkingCopy(
+				"/Completion/src/X.java",
+				"""
+					public class X {
+						@SuppressWarnings("preview")
+						public static void main(String day) {
+							int k = switch (day) {
+						    case "W" -> {yield 2;}
+						    default      -> {
+						        int g = day.hashCode();
+						        int result = f(g);
+						        {
+						        	for(int i = 0; i < 3; i++) {
+						        		if (i == 0) {
+						        			thr
+						        		}
+						        	}
+						        	yield 0;
+						        }
+						    }};
+						}
+						static int f(int k) {
+							return k*k;
+						}
+					}
+				""");
+		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
+		requestor.allowAllRequiredProposals();
+		String str = this.workingCopies[0].getSource();
+		String completeBehind = "thr";
+		int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
+		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
+		assertResults(
+				"Throwable[TYPE_REF]{Throwable, java.lang, Ljava.lang.Throwable;, null, null, 42}\n" + 
+				"throw[KEYWORD]{throw, null, null, throw, null, 49}",
+						requestor.getResults());
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, old);
+	}
+	/*
+	 * Try completion of other keywords inside switch expression nested block
+	 */
+	public void test030() throws JavaModelException {
+		String old = COMPLETION_PROJECT.getOption(CompilerOptions.OPTION_EnablePreviews, true);
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		this.workingCopies = new ICompilationUnit[1];
+		this.workingCopies[0] = getWorkingCopy(
+				"/Completion/src/X.java",
+				"""
+					public class X {
+						@SuppressWarnings("preview")
+						public static void main(String day) {
+							int k = switch (day) {
+						    case "W" -> {yield 2;}
+						    default      -> {
+						        int g = day.hashCode();
+						        int result = f(g);
+						        {
+						        	for(int i = 0; i < 3; i++) {
+						        		if (i == 0) {
+						        			throw Exc
+						        		}
+						        	}
+						        	yield 0;
+						        }
+						    }};
+						}
+						static int f(int k) {
+							return k*k;
+						}
+					}
+				""");
+		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
+		requestor.allowAllRequiredProposals();
+		String str = this.workingCopies[0].getSource();
+		String completeBehind = "throw Exc";
+		int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
+		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
+		assertResults(
+				"Exception[TYPE_REF]{Exception, java.lang, Ljava.lang.Exception;, null, null, 52}",
+						requestor.getResults());
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, old);
+	}
+	/*
+	 * Try completion inside a lambda nested inside a switch expression
+	 */
+	public void test031() throws JavaModelException {
+		String old = COMPLETION_PROJECT.getOption(CompilerOptions.OPTION_EnablePreviews, true);
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		this.workingCopies = new ICompilationUnit[1];
+		this.workingCopies[0] = getWorkingCopy(
+				"/Completion/src/X.java",
+				"""
+				public class X {
+					@SuppressWarnings("preview")
+					public static void main(String[] args) {
+						String day = "";
+						int i = switch (day) {
+						default -> {
+							for (int j = 0; j < 3; j++) {
+								if (j == 0) {
+									IntPredicate pre = (_value) -> !test(_v);
+									};
+								}
+							}
+							yield 0;
+						}
+						};
+					}
+					private static boolean test(int value) {
+						return false;
+					}
+				}
+				interface IntPredicate {
+					boolean test(int value);
+				}
+				""");
+		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
+		requestor.allowAllRequiredProposals();
+		String str = this.workingCopies[0].getSource();
+		String completeBehind = "test(_v";
+		int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
+		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
+		assertResults(
+				"_value[LOCAL_VARIABLE_REF]{_value, null, I, _value, null, 52}",
+						requestor.getResults());
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, old);
+	}
+	/*
+	 * Try completion inside a lambda (block) nested inside a switch expression
+	 */
+	public void test032() throws JavaModelException {
+		String old = COMPLETION_PROJECT.getOption(CompilerOptions.OPTION_EnablePreviews, true);
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		this.workingCopies = new ICompilationUnit[1];
+		this.workingCopies[0] = getWorkingCopy(
+				"/Completion/src/X.java",
+				"""
+				public class X {
+					@SuppressWarnings("preview")
+					public static void main(String[] args) {
+						String day = "";
+						int i = switch (day) {
+						default -> {
+							for (int j = 0; j < 3; j++) {
+								if (j == 0) {
+									IntPredicate pre = (_value) -> {
+										return !test(_v);
+									};
+								}
+							}
+							yield 0;
+						}
+						};
+					}
+					private static boolean test(int value) {
+						return false;
+					}
+				}
+				interface IntPredicate {
+					boolean test(int value);
+				}
+				""");
+		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
+		requestor.allowAllRequiredProposals();
+		String str = this.workingCopies[0].getSource();
+		String completeBehind = "test(_v";
+		int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
+		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
+		assertResults(
+				"_value[LOCAL_VARIABLE_REF]{_value, null, I, _value, null, 52}",
+						requestor.getResults());
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, old);
+	}
+	/*
+	 * Try completion inside a switch expression nested inside a lambda expression
+	 */
+	public void test033() throws JavaModelException {
+		String old = COMPLETION_PROJECT.getOption(CompilerOptions.OPTION_EnablePreviews, true);
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		this.workingCopies = new ICompilationUnit[1];
+		this.workingCopies[0] = getWorkingCopy(
+				"/Completion/src/X.java",
+				"""
+				public class X {
+					@SuppressWarnings("preview")
+					public static void main(String[] args) {
+						IntPredicate pre = (_value) -> !test(
+								switch (_value) {
+									default -> {
+										yield _v;
+									}
+								}
+								);
+					}
+					private static boolean test(int value) {
+						return false;
+					}
+				}
+				interface IntPredicate {
+					boolean test(int value);
+				}
+				""");
+		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
+		requestor.allowAllRequiredProposals();
+		String str = this.workingCopies[0].getSource();
+		String completeBehind = "yield _v";
+		int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
+		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
+		assertResults(
+				"_value[LOCAL_VARIABLE_REF]{_value, null, I, _value, null, 52}",
+						requestor.getResults());
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, old);
+	}
+	/*
+	 * Try completion inside a switch expression nested inside a lambda expression
+	 */
+	public void test034() throws JavaModelException {
+		String old = COMPLETION_PROJECT.getOption(CompilerOptions.OPTION_EnablePreviews, true);
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		this.workingCopies = new ICompilationUnit[1];
+		this.workingCopies[0] = getWorkingCopy(
+				"/Completion/src/X.java",
+				"""
+				public class X {
+					@SuppressWarnings("preview")
+					public static void main(String[] args) {
+						IntPredicate pre = (_value) -> {
+							return !test(
+								switch (_value) {
+									default -> {
+										yield _v;
+									}
+								}
+								);
+						};
+					}
+					private static boolean test(int value) {
+						return false;
+					}
+				}
+				interface IntPredicate {
+					boolean test(int value);
+				}
+				""");
+		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
+		requestor.allowAllRequiredProposals();
+		String str = this.workingCopies[0].getSource();
+		String completeBehind = "yield _v";
+		int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
+		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
+		assertResults(
+				"_value[LOCAL_VARIABLE_REF]{_value, null, I, _value, null, 52}",
+						requestor.getResults());
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, old);
+	}
+	public void testBug545783() throws JavaModelException {
+		String old = COMPLETION_PROJECT.getOption(CompilerOptions.OPTION_EnablePreviews, true);
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, CompilerOptions.ENABLED);
+		this.workingCopies = new ICompilationUnit[1];
+		this.workingCopies[0] = getWorkingCopy(
+				"/Completion/src/bugs/C.java",
+				"""
+				package bugs;
+				public class C {
+					int foo(String str) {
+						return switch (str) {
+						case "x", "y" -> {
+							yield 0;
+						}
+						default -> {
+							i: for (int i = 0; i < 10; i++) {
+								if (str.) {
+									yield i;
+								}
+							}
+							yield -1;
+						}
+						};
+					}
+				}
+				""");
+		CompletionTestsRequestor2 requestor = new CompletionTestsRequestor2(true);
+		requestor.allowAllRequiredProposals();
+		String str = this.workingCopies[0].getSource();
+		String completeBehind = "if (str.";
+		int cursorLocation = str.lastIndexOf(completeBehind) + completeBehind.length();
+		this.workingCopies[0].codeComplete(cursorLocation, requestor, this.wcOwner);
+		assertResults(
+				"finalize[METHOD_REF]{finalize(), Ljava.lang.Object;, ()V, finalize, null, 55}\n" + 
+				"notify[METHOD_REF]{notify(), Ljava.lang.Object;, ()V, notify, null, 55}\n" + 
+				"notifyAll[METHOD_REF]{notifyAll(), Ljava.lang.Object;, ()V, notifyAll, null, 55}\n" + 
+				"wait[METHOD_REF]{wait(), Ljava.lang.Object;, ()V, wait, null, 55}\n" + 
+				"wait[METHOD_REF]{wait(), Ljava.lang.Object;, (J)V, wait, (millis), 55}\n" + 
+				"wait[METHOD_REF]{wait(), Ljava.lang.Object;, (JI)V, wait, (millis, nanos), 55}\n" + 
+				"clone[METHOD_REF]{clone(), Ljava.lang.Object;, ()Ljava.lang.Object;, clone, null, 60}\n" + 
+				"getClass[METHOD_REF]{getClass(), Ljava.lang.Object;, ()Ljava.lang.Class<+Ljava.lang.Object;>;, getClass, null, 60}\n" + 
+				"hashCode[METHOD_REF]{hashCode(), Ljava.lang.Object;, ()I, hashCode, null, 60}\n" + 
+				"length[METHOD_REF]{length(), Ljava.lang.String;, ()I, length, null, 60}\n" + 
+				"toString[METHOD_REF]{toString(), Ljava.lang.Object;, ()Ljava.lang.String;, toString, null, 60}\n" + 
+				"equals[METHOD_REF]{equals(), Ljava.lang.Object;, (Ljava.lang.Object;)Z, equals, (obj), 90}",
+						requestor.getResults());
+		COMPLETION_PROJECT.setOption(CompilerOptions.OPTION_EnablePreviews, old);
+	}
+}
diff --git a/org.eclipse.jdt.tests.latestBREE/src/org/eclipse/jdt/tests/latestbree/Activator.java b/org.eclipse.jdt.tests.latestBREE/src/org/eclipse/jdt/tests/latestbree/Activator.java
new file mode 100644
index 0000000..30cd86b
--- /dev/null
+++ b/org.eclipse.jdt.tests.latestBREE/src/org/eclipse/jdt/tests/latestbree/Activator.java
@@ -0,0 +1,22 @@
+package org.eclipse.jdt.tests.latestbree;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+public class Activator implements BundleActivator {
+
+	private static BundleContext context;
+
+	static BundleContext getContext() {
+		return context;
+	}
+
+	public void start(BundleContext bundleContext) throws Exception {
+		Activator.context = bundleContext;
+	}
+
+	public void stop(BundleContext bundleContext) throws Exception {
+		Activator.context = null;
+	}
+
+}
diff --git a/org.eclipse.jdt.tests.latestBREE/test.xml b/org.eclipse.jdt.tests.latestBREE/test.xml
new file mode 100644
index 0000000..c5b0caf
--- /dev/null
+++ b/org.eclipse.jdt.tests.latestBREE/test.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+    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
+ -->
+
+<project name="testsuite" default="run" basedir=".">
+  <!-- The property ${eclipse-home} should be passed into this script -->
+  <!-- Set a meaningful default value for when it is not. -->
+  <property name="eclipse-home" value="${basedir}\..\.."/>
+
+  <!-- sets the properties eclipse-home, and library-file -->
+  <property name="plugin-name" value="org.eclipse.jdt.tests.latestBREE"/>
+  <property name="library-file"
+            value="${eclipse-home}/plugins/org.eclipse.test/library.xml"/>
+
+  <!-- This target holds all initialization code that needs to be done for -->
+  <!-- all tests that are to be run. Initialization for individual tests -->
+  <!-- should be done within the body of the suite target. -->
+  <target name="init">
+    <tstamp/>
+    <delete>
+      <fileset dir="${eclipse-home}" includes="org*.xml"/>
+    </delete>
+  </target>
+
+  <!-- This target defines the tests that need to be run. -->
+  <target name="suite">
+
+    <!-- Compiler regression tests -->
+    <property name="jdt-compiler-folder" 
+              value="${eclipse-home}/jdt_compiler_folder"/>
+    <delete dir="${jdt-compiler-folder}" quiet="true"/>
+    <ant target="core-test" antfile="${library-file}" dir="${eclipse-home}">
+      <property name="data-dir" value="${jdt-compiler-folder}"/>
+      <property name="plugin-name" value="${plugin-name}"/>
+      <property name="classname" 
+                value="org.eclipse.jdt.core.tests.compiler.regression.latest.TestAll"/>
+    </ant>
+
+  </target>
+
+  <!-- This target holds code to cleanup the testing environment after -->
+  <!-- after all of the tests have been run. You can use this target to -->
+  <!-- delete temporary files that have been created. -->
+  <target name="cleanup">
+  </target>
+
+  <!-- This target runs the test suite. Any actions that need to happen -->
+  <!-- after all the tests have been run should go here. -->
+  <target name="run" depends="init,suite,cleanup">
+    <ant target="collect" antfile="${library-file}" dir="${eclipse-home}">
+      <property name="includes" value="org*.xml"/>
+      <property name="output-file" value="${plugin-name}.xml"/>
+    </ant>
+  </target>
+
+</project>
diff --git a/pom.xml b/pom.xml
index 98be79e..40fc58b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,6 +26,8 @@
 
   <properties>
     <tycho.scmUrl>scm:git:git://git.eclipse.org/gitroot/jdt/eclipse.jdt.core.git</tycho.scmUrl>
+    <eclipserun-repo>https://download.eclipse.org/eclipse/updates/4.13-Y-builds/</eclipserun-repo>
+    <cbi-ecj-version>3.18.50.v20190628-1803</cbi-ecj-version>
   </properties>
 
   <!--