diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTView.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTView.java
index 5b936f7..3ab8b5c 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTView.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2020 IBM Corporation and others.
+ * Copyright (c) 2000, 2021 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
  *******************************************************************************/
@@ -114,7 +118,6 @@
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.WorkingCopyOwner;
 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.ASTRequestor;
@@ -132,70 +135,24 @@
 
 import org.eclipse.jdt.ui.JavaUI;
 
+import org.eclipse.jdt.internal.ui.util.ASTHelper;
+
 
 public class ASTView extends ViewPart implements IShowInSource, IShowInTargetList {
 
-	static final int JLS_LATEST= AST.JLS15;
-
-	private static final int JLS15= AST.JLS15;
-
-	/**
-	 * @deprecated to get rid of deprecation warnings in code
-	 */
-	@Deprecated
-	private static final int JLS14= AST.JLS14;
-
-	/**
-	 * @deprecated to get rid of deprecation warnings in code
-	 */
-	@Deprecated
-	private static final int JLS13= AST.JLS13;
-
-	/**
-	 * @deprecated to get rid of deprecation warnings in code
-	 */
-	@Deprecated
-	private static final int JLS12= AST.JLS12;
-
-	/**
-	 * @deprecated to get rid of deprecation warnings in code
-	 */
-	@Deprecated
-	private static final int JLS11= AST.JLS11;
-
-	/**
-	 * @deprecated to get rid of deprecation warnings in code
-	 */
-	@Deprecated
-	private static final int JLS10= AST.JLS10;
-
-	/**
-	 * @deprecated to get rid of deprecation warnings in code
-	 */
-	@Deprecated
-	private static final int JLS9= AST.JLS9;
-
-	/**
-	 * @deprecated to get rid of deprecation warnings in code
-	 */
-	@Deprecated
-	private static final int JLS8= AST.JLS8;
-
-	/**
-	 * @deprecated to get rid of deprecation warnings in code
-	 */
-	@Deprecated
-	private static final int JLS4= AST.JLS4;
-	/**
-	 * @deprecated to get rid of deprecation warnings in code
-	 */
-	@Deprecated
-	private static final int JLS3= AST.JLS3;
-	/**
-	 * @deprecated to get rid of deprecation warnings in code
-	 */
-	@Deprecated
-	private static final int JLS2= AST.JLS2;
+	static final int JLS_LATEST= ASTHelper.JLS_Latest;
+	private static final int JLS16= ASTHelper.JLS16;
+	private static final int JLS15= ASTHelper.JLS15;
+	private static final int JLS14= ASTHelper.JLS14;
+	private static final int JLS13= ASTHelper.JLS13;
+	private static final int JLS12= ASTHelper.JLS12;
+	private static final int JLS11= ASTHelper.JLS11;
+	private static final int JLS10= ASTHelper.JLS10;
+	private static final int JLS9= ASTHelper.JLS9;
+	private static final int JLS8= ASTHelper.JLS8;
+	private static final int JLS4= ASTHelper.JLS4;
+	private static final int JLS3= ASTHelper.JLS3;
+	private static final int JLS2= ASTHelper.JLS2;
 
 	private class ASTViewSelectionProvider implements ISelectionProvider {
 		ListenerList<ISelectionChangedListener> fListeners= new ListenerList<>(ListenerList.IDENTITY);
@@ -554,6 +511,7 @@
 				case JLS13:
 				case JLS14:
 				case JLS15:
+				case JLS16:
 					fCurrentASTLevel= level;
 			}
 		} catch (NumberFormatException e) {
@@ -1175,6 +1133,7 @@
 				new ASTLevelToggle("AST Level 1&3 (13)", JLS13), //$NON-NLS-1$
 				new ASTLevelToggle("AST Level 1&4 (14)", JLS14), //$NON-NLS-1$
 				new ASTLevelToggle("AST Level 1&5 (15)", JLS15), //$NON-NLS-1$
+				new ASTLevelToggle("AST Level 1&6 (16)", JLS16), //$NON-NLS-1$
 		};
 
 		fAddToTrayAction= new Action() {
diff --git a/org.eclipse.jdt.core.manipulation/.settings/.api_filters b/org.eclipse.jdt.core.manipulation/.settings/.api_filters
index 21cf1b8..5f3e2e8 100644
--- a/org.eclipse.jdt.core.manipulation/.settings/.api_filters
+++ b/org.eclipse.jdt.core.manipulation/.settings/.api_filters
@@ -26,57 +26,6 @@
             </message_arguments>
         </filter>
     </resource>
-    <resource path="core extension/org/eclipse/jdt/internal/corext/dom/ASTFlattener.java" type="org.eclipse.jdt.internal.corext.dom.ASTFlattener">
-        <filter comment="For Java 14 preview features" id="640712815">
-            <message_arguments>
-                <message_argument value="AbstractTypeDeclaration"/>
-                <message_argument value="ASTFlattener"/>
-                <message_argument value="bodyDeclarations()"/>
-            </message_arguments>
-        </filter>
-        <filter comment="For Java 14 preview features" id="640712815">
-            <message_arguments>
-                <message_argument value="AbstractTypeDeclaration"/>
-                <message_argument value="ASTFlattener"/>
-                <message_argument value="getName()"/>
-            </message_arguments>
-        </filter>
-        <filter comment="For Java 14 preview features" id="640712815">
-            <message_arguments>
-                <message_argument value="BodyDeclaration"/>
-                <message_argument value="ASTFlattener"/>
-                <message_argument value="getJavadoc()"/>
-            </message_arguments>
-        </filter>
-        <filter comment="For Java 14 preview features" id="640712815">
-            <message_arguments>
-                <message_argument value="BodyDeclaration"/>
-                <message_argument value="ASTFlattener"/>
-                <message_argument value="modifiers()"/>
-            </message_arguments>
-        </filter>
-        <filter comment="For Java 14 preview features" id="640712815">
-            <message_arguments>
-                <message_argument value="RecordDeclaration"/>
-                <message_argument value="ASTFlattener"/>
-                <message_argument value="recordComponents()"/>
-            </message_arguments>
-        </filter>
-        <filter comment="For Java 14 preview features" id="640712815">
-            <message_arguments>
-                <message_argument value="RecordDeclaration"/>
-                <message_argument value="ASTFlattener"/>
-                <message_argument value="superInterfaceTypes()"/>
-            </message_arguments>
-        </filter>
-        <filter comment="For Java 14 preview features" id="640712815">
-            <message_arguments>
-                <message_argument value="RecordDeclaration"/>
-                <message_argument value="ASTFlattener"/>
-                <message_argument value="typeParameters()"/>
-            </message_arguments>
-        </filter>
-    </resource>
     <resource path="core extension/org/eclipse/jdt/internal/corext/dom/LinkedNodeFinder.java" type="org.eclipse.jdt.internal.corext.dom.LinkedNodeFinder">
         <filter comment="This is a Java15 preview feature" id="640712815">
             <message_arguments>
@@ -99,22 +48,6 @@
                 <message_argument value="isRecord()"/>
             </message_arguments>
         </filter>
-        <filter id="640712815">
-            <message_arguments>
-                <message_argument value="RecordDeclaration"/>
-                <message_argument value="LinkedNodeFinder"/>
-                <message_argument value="recordComponents()"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="core extension/org/eclipse/jdt/internal/corext/dom/ModifierRewrite.java" type="org.eclipse.jdt.internal.corext.dom.ModifierRewrite">
-        <filter comment="This is a Java 14 preview feature" id="623939596">
-            <message_arguments>
-                <message_argument value="RecordDeclaration"/>
-                <message_argument value="ModifierRewrite"/>
-                <message_argument value="MODIFIERS2_PROPERTY"/>
-            </message_arguments>
-        </filter>
     </resource>
     <resource path="core extension/org/eclipse/jdt/internal/corext/refactoring/rename/RefactoringAnalyzeUtil.java" type="org.eclipse.jdt.internal.corext.refactoring.rename.RefactoringAnalyzeUtil">
         <filter comment="This is a Java15 preview feature" id="640712815">
@@ -124,12 +57,5 @@
                 <message_argument value="isCompactConstructor()"/>
             </message_arguments>
         </filter>
-        <filter comment="This is a Java15 preview feature" id="640712815">
-            <message_arguments>
-                <message_argument value="RecordDeclaration"/>
-                <message_argument value="RefactoringAnalyzeUtil"/>
-                <message_argument value="getMethods()"/>
-            </message_arguments>
-        </filter>
     </resource>
 </component>
diff --git a/org.eclipse.jdt.core.manipulation/META-INF/MANIFEST.MF b/org.eclipse.jdt.core.manipulation/META-INF/MANIFEST.MF
index 7031dea..3fdbb2c 100644
--- a/org.eclipse.jdt.core.manipulation/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.core.manipulation/META-INF/MANIFEST.MF
@@ -61,5 +61,5 @@
  org.eclipse.jdt.internal.ui.text.correction;x-friends:="org.eclipse.jdt.ui,org.eclipse.jdt.debug.ui",
  org.eclipse.jdt.internal.ui.text.correction.proposals;x-friends:="org.eclipse.jdt.ui",
  org.eclipse.jdt.internal.ui.text.template.contentassist;x-friends:="org.eclipse.jdt.ui",
- org.eclipse.jdt.internal.ui.util;x-friends:="org.eclipse.jdt.ui"
+ org.eclipse.jdt.internal.ui.util;x-friends:="org.eclipse.jdt.ui,org.eclipse.jdt.astview,org.eclipse.jdt.junit.core"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/ImportReferencesCollector.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/ImportReferencesCollector.java
index 521e571..67d8a70 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/ImportReferencesCollector.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/ImportReferencesCollector.java
@@ -20,7 +20,6 @@
 import org.eclipse.jface.text.Region;
 
 import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.AnnotatableType;
 import org.eclipse.jdt.core.dom.ClassInstanceCreation;
@@ -246,7 +245,7 @@
 
 	@Override
 	public boolean visit(SimpleType node) {
-		if (node.getAST().apiLevel() < AST.JLS10 || !node.isVar()) {
+		if (node.getAST().apiLevel() < ASTHelper.JLS10 || !node.isVar()) {
 			typeRefFound(node.getName());
 		}
 		visitAnnotations(node);
@@ -268,7 +267,7 @@
 	}
 
 	private void visitAnnotations(AnnotatableType node) {
-		if (node.getAST().apiLevel() >= AST.JLS8) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS8) {
 			doVisitChildren(node.annotations());
 		}
 	}
@@ -479,13 +478,13 @@
 		// name not visited
 
 		int apiLevel= node.getAST().apiLevel();
-		if (apiLevel >= AST.JLS8) {
+		if (apiLevel >= ASTHelper.JLS8) {
 			doVisitNode(node.getReceiverType());
 		}
 		// receiverQualifier not visited:
 		//   Enclosing class names cannot be shadowed by an import (qualification is always redundant).
 		doVisitChildren(node.parameters());
-		if (apiLevel >= AST.JLS8) {
+		if (apiLevel >= ASTHelper.JLS8) {
 			doVisitChildren(node.extraDimensions());
 			doVisitChildren(node.thrownExceptionTypes());
 		} else {
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/SharedASTProviderCore.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/SharedASTProviderCore.java
index 2c4039b..092de50 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/SharedASTProviderCore.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/SharedASTProviderCore.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
@@ -32,7 +36,7 @@
  * <p>Clients can make the following assumptions about the AST:</p>
  * <ul>
  *    <li>the AST has a {@link ITypeRoot} as source: {@link CompilationUnit#getTypeRoot()} is not null.</li>
- *    <li>the {@link AST#apiLevel() AST API level} is {@link AST#JLS15 API level 15} or higher</li>
+ *    <li>the {@link AST#apiLevel() AST API level} is {@link AST#JLS16 API level 16} or higher</li>
  *    <li>the AST has bindings resolved ({@link AST#hasResolvedBindings()})</li>
  *    <li>{@link AST#hasStatementsRecovery() statement} and {@link AST#hasBindingsRecovery() bindings}
  *           recovery are enabled
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/core/manipulation/StubUtility.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/core/manipulation/StubUtility.java
index 2099d1c..3425ef0 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/core/manipulation/StubUtility.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/core/manipulation/StubUtility.java
@@ -69,7 +69,6 @@
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.NamingConventions;
 import org.eclipse.jdt.core.Signature;
-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.AbstractTypeDeclaration;
@@ -108,6 +107,8 @@
 import org.eclipse.jdt.internal.corext.dom.Bindings;
 import org.eclipse.jdt.internal.corext.dom.IASTSharedValues;
 
+import org.eclipse.jdt.internal.ui.util.ASTHelper;
+
 /**
  * Implementations for {@link CodeGeneration} APIs, and other helper methods
  * to create source code stubs based on {@link IJavaElement}s.
@@ -765,7 +766,7 @@
 	@Deprecated
 	private static String[] getExceptionNames(MethodDeclaration decl) {
 		String[] exceptionNames;
-		if (decl.getAST().apiLevel() >= AST.JLS8) {
+		if (decl.getAST().apiLevel() >= ASTHelper.JLS8) {
 			List<Type> exceptions= decl.thrownExceptionTypes();
 			exceptionNames= new String[exceptions.size()];
 			for (int i= 0; i < exceptionNames.length; i++) {
@@ -793,7 +794,7 @@
 	@Deprecated
 	private static ASTNode getReturnType(MethodDeclaration decl) {
 		// used from API, can't eliminate
-		return decl.getAST().apiLevel() == AST.JLS2 ? decl.getReturnType() : decl.getReturnType2();
+		return decl.getAST().apiLevel() == ASTHelper.JLS2 ? decl.getReturnType() : decl.getReturnType2();
 	}
 
 
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/util/ASTHelper.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/util/ASTHelper.java
index 3d397ae..7d8c7b2 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/util/ASTHelper.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/util/ASTHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2019, 2020 IBM Corporation and others.
+ * Copyright (c) 2019, 2021 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
@@ -17,20 +21,38 @@
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.Modifier;
 
+@SuppressWarnings("deprecation")
 public class ASTHelper {
 
-	@SuppressWarnings("deprecation")
+	public static final int JLS2 = AST.JLS2;
+	public static final int JLS3 = AST.JLS3;
+	public static final int JLS4 = AST.JLS4;
+	public static final int JLS8 = AST.JLS8;
+	public static final int JLS9 = AST.JLS9;
+	public static final int JLS10 = AST.JLS10;
+	public static final int JLS11 = AST.JLS11;
+	public static final int JLS12 = AST.JLS12;
+	public static final int JLS13 = AST.JLS13;
+	public static final int JLS14 = AST.JLS14;
+	public static final int JLS15 = AST.JLS15;
+	public static final int JLS16 = AST.JLS16;
+
+	/*
+	 *  Junit4TestFinder and Junit5TestFinder use AST.JLS_Latest directly
+	 */
+	public static final int JLS_Latest = AST.JLS_Latest;
+
 	private static boolean isNodeTypeSupportedInAST(AST ast, int nodeType) {
 		switch (nodeType) {
 			case ASTNode.SWITCH_CASE:
 			case ASTNode.SWITCH_EXPRESSION:
 			case ASTNode.YIELD_STATEMENT:
-				return ast.apiLevel() >= AST.JLS14;
+				return ast.apiLevel() >= JLS14;
 			case ASTNode.TEXT_BLOCK:
-				return ast.apiLevel() >= AST.JLS15;
+				return ast.apiLevel() >= JLS15;
 			case ASTNode.RECORD_DECLARATION:
 			case ASTNode.INSTANCEOF_EXPRESSION:
-				return ast.isPreviewEnabled();
+				return ast.apiLevel() >= JLS16;
 			default:
 				break;
 		}
@@ -72,4 +94,8 @@
 		return isModifierSupportedInAST(ast, Modifier.SEALED);
 	}
 
+	public static boolean isInstanceofExpressionPatternSupported(AST ast) {
+		return isNodeTypeSupportedInAST(ast, ASTNode.INSTANCEOF_EXPRESSION);
+	}
+
 }
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2Core.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2Core.java
index a0cf3ec..178019f 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2Core.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2Core.java
@@ -84,6 +84,8 @@
 import org.eclipse.jdt.internal.corext.refactoring.util.JavaElementUtil;
 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 
+import org.eclipse.jdt.internal.ui.util.ASTHelper;
+
 /**
  * Utilities for code generation based on AST rewrite.
  *
@@ -524,7 +526,7 @@
 
 	public static void createThrownExceptions(MethodDeclaration decl, IMethodBinding method, ImportRewrite imports, ImportRewriteContext context, AST ast) {
 		ITypeBinding[] excTypes= method.getExceptionTypes();
-		if (ast.apiLevel() >= AST.JLS8) {
+		if (ast.apiLevel() >= ASTHelper.JLS8) {
 			List<Type> thrownExceptions= decl.thrownExceptionTypes();
 			for (ITypeBinding t : excTypes) {
 				Type excType= imports.addImport(t, ast, context, TypeLocation.EXCEPTION);
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ASTFlattener.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ASTFlattener.java
index 42a35dc..22fbfe8 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ASTFlattener.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ASTFlattener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2020 IBM Corporation and others.
+ * Copyright (c) 2000, 2021 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
@@ -29,27 +33,6 @@
  */
 
 	/**
-	 * @deprecated to avoid deprecation warnings
-	 */
-	@Deprecated
-	private static final int JLS3= AST.JLS3;
-	/**
-	 * @deprecated to avoid deprecation warnings
-	 */
-	@Deprecated
-	private static final int JLS4= AST.JLS4;
-	/**
-	 * @deprecated to avoid deprecation warnings
-	 */
-	@Deprecated
-	private static final int JLS8= AST.JLS8;
-	/**
-	 * @deprecated to avoid deprecation warnings
-	 */
-	@Deprecated
-	private static final int JLS9= AST.JLS9;
-
-	/**
 	 * The string buffer into which the serialized representation of the AST is
 	 * written.
 	 */
@@ -137,7 +120,7 @@
 	}
 
 	void printTypeAnnotations(AnnotatableType node) {
-		if (node.getAST().apiLevel() >= JLS8) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS8) {
 			printAnnotationsList(node.annotations());
 		}
 	}
@@ -287,7 +270,7 @@
 	 */
 	@Override
 	public boolean visit(ArrayType node) {
-		if (node.getAST().apiLevel() < JLS8) {
+		if (node.getAST().apiLevel() < ASTHelper.JLS8) {
 			getComponentType(node).accept(this);
 			this.fBuffer.append("[]");//$NON-NLS-1$
 		} else {
@@ -420,7 +403,7 @@
 			this.fBuffer.append(".");//$NON-NLS-1$
 		}
 		this.fBuffer.append("new ");//$NON-NLS-1$
-		if (node.getAST().apiLevel() >= JLS3) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS3) {
 			if (!node.typeArguments().isEmpty()) {
 				this.fBuffer.append("<");//$NON-NLS-1$
 				for (Iterator<Type> it= node.typeArguments().iterator(); it.hasNext();) {
@@ -454,7 +437,7 @@
 	 */
 	@Override
 	public boolean visit(CompilationUnit node) {
-		if (node.getAST().apiLevel() >= JLS9) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS9) {
 			if (node.getModule() != null) {
 				node.getModule().accept(this);
 			}
@@ -491,7 +474,7 @@
 	 */
 	@Override
 	public boolean visit(ConstructorInvocation node) {
-		if (node.getAST().apiLevel() >= JLS3) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS3) {
 			if (!node.typeArguments().isEmpty()) {
 				this.fBuffer.append("<");//$NON-NLS-1$
 				for (Iterator<Type> it= node.typeArguments().iterator(); it.hasNext();) {
@@ -708,7 +691,7 @@
 		if (node.getJavadoc() != null) {
 			node.getJavadoc().accept(this);
 		}
-		if (node.getAST().apiLevel() >= JLS3) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS3) {
 			printModifiers(node.modifiers());
 		}
 		node.getType().accept(this);
@@ -770,7 +753,7 @@
 	@Override
 	public boolean visit(ImportDeclaration node) {
 		this.fBuffer.append("import ");//$NON-NLS-1$
-		if (node.getAST().apiLevel() >= JLS3) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS3) {
 			if (node.isStatic()) {
 				this.fBuffer.append("static ");//$NON-NLS-1$
 			}
@@ -812,7 +795,7 @@
 		if (node.getJavadoc() != null) {
 			node.getJavadoc().accept(this);
 		}
-		if (node.getAST().apiLevel() >= JLS3) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS3) {
 			printModifiers(node.modifiers());
 		}
 		node.getBody().accept(this);
@@ -827,6 +810,10 @@
 		node.getLeftOperand().accept(this);
 		this.fBuffer.append(" instanceof ");//$NON-NLS-1$
 		node.getRightOperand().accept(this);
+		if (ASTHelper.isInstanceofExpressionPatternSupported(node.getAST()) && node.getPatternVariable()!= null) {
+			this.fBuffer.append(" "); //$NON-NLS-1$
+			node.getPatternVariable().accept(this);
+		}
 		return false;
 	}
 
@@ -969,7 +956,7 @@
 	@Override
 	public boolean visit(MethodRefParameter node) {
 		node.getType().accept(this);
-		if (node.getAST().apiLevel() >= JLS3) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS3) {
 			if (node.isVarargs()) {
 				this.fBuffer.append("...");//$NON-NLS-1$
 			}
@@ -989,7 +976,7 @@
 		if (node.getJavadoc() != null) {
 			node.getJavadoc().accept(this);
 		}
-		if (node.getAST().apiLevel() >= JLS3) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS3) {
 			printModifiers(node.modifiers());
 			if (!node.typeParameters().isEmpty()) {
 				this.fBuffer.append("<");//$NON-NLS-1$
@@ -1014,7 +1001,7 @@
 		}
 		node.getName().accept(this);
 		this.fBuffer.append("(");//$NON-NLS-1$
-		if (node.getAST().apiLevel() >= JLS8) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS8) {
 			Type receiverType= node.getReceiverType();
 			if (receiverType != null) {
 				receiverType.accept(this);
@@ -1038,7 +1025,7 @@
 			}
 		}
 		this.fBuffer.append(")");//$NON-NLS-1$
-		if (node.getAST().apiLevel() >= JLS8) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS8) {
 			List<Dimension> dimensions = node.extraDimensions();
 			for (Dimension e : dimensions) {
 				e.accept(this);
@@ -1048,7 +1035,7 @@
 				this.fBuffer.append("[]"); //$NON-NLS-1$
 			}
 		}
-		List<? extends ASTNode> thrownExceptions= node.getAST().apiLevel() >= JLS8 ? node.thrownExceptionTypes() : getThrownExceptions(node);
+		List<? extends ASTNode> thrownExceptions= node.getAST().apiLevel() >= ASTHelper.JLS8 ? node.thrownExceptionTypes() : getThrownExceptions(node);
 		if (!thrownExceptions.isEmpty()) {
 			this.fBuffer.append(" throws ");//$NON-NLS-1$
 			for (Iterator<? extends ASTNode> it= thrownExceptions.iterator(); it.hasNext();) {
@@ -1077,7 +1064,7 @@
 			node.getExpression().accept(this);
 			this.fBuffer.append(".");//$NON-NLS-1$
 		}
-		if (node.getAST().apiLevel() >= JLS3) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS3) {
 			if (!node.typeArguments().isEmpty()) {
 				this.fBuffer.append("<");//$NON-NLS-1$
 				for (Iterator<Type> it= node.typeArguments().iterator(); it.hasNext();) {
@@ -1211,7 +1198,7 @@
 	 */
 	@Override
 	public boolean visit(PackageDeclaration node) {
-		if (node.getAST().apiLevel() >= JLS3) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS3) {
 			if (node.getJavadoc() != null) {
 				node.getJavadoc().accept(this);
 			}
@@ -1438,13 +1425,13 @@
 	 */
 	@Override
 	public boolean visit(SingleVariableDeclaration node) {
-		if (node.getAST().apiLevel() >= JLS3) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS3) {
 			printModifiers(node.modifiers());
 		}
 		node.getType().accept(this);
-		if (node.getAST().apiLevel() >= JLS3) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS3) {
 			if (node.isVarargs()) {
-				if (node.getAST().apiLevel() >= JLS8) {
+				if (node.getAST().apiLevel() >= ASTHelper.JLS8) {
 					this.fBuffer.append(' ');
 					List<Annotation> annotations= node.varargsAnnotations();
 					printAnnotationsList(annotations);
@@ -1454,7 +1441,7 @@
 		}
 		this.fBuffer.append(" ");//$NON-NLS-1$
 		node.getName().accept(this);
-		if (node.getAST().apiLevel() >= JLS8) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS8) {
 			List<Dimension> dimensions = node.extraDimensions();
 			for (Dimension e : dimensions) {
 				e.accept(this);
@@ -1498,7 +1485,7 @@
 			node.getExpression().accept(this);
 			this.fBuffer.append(".");//$NON-NLS-1$
 		}
-		if (node.getAST().apiLevel() >= JLS3) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS3) {
 			if (!node.typeArguments().isEmpty()) {
 				this.fBuffer.append("<");//$NON-NLS-1$
 				for (Iterator<Type> it= node.typeArguments().iterator(); it.hasNext();) {
@@ -1547,7 +1534,7 @@
 			this.fBuffer.append(".");//$NON-NLS-1$
 		}
 		this.fBuffer.append("super.");//$NON-NLS-1$
-		if (node.getAST().apiLevel() >= JLS3) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS3) {
 			if (!node.typeArguments().isEmpty()) {
 				this.fBuffer.append("<");//$NON-NLS-1$
 				for (Iterator<Type> it= node.typeArguments().iterator(); it.hasNext();) {
@@ -1757,7 +1744,7 @@
 	@Override
 	public boolean visit(TryStatement node) {
 		this.fBuffer.append("try ");//$NON-NLS-1$
-		if (node.getAST().apiLevel() >= JLS4) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS4) {
 			if (!node.resources().isEmpty()) {
 				this.fBuffer.append("(");//$NON-NLS-1$
 				for (Iterator<Expression> it= node.resources().iterator(); it.hasNext();) {
@@ -1791,12 +1778,12 @@
 		if (node.getJavadoc() != null) {
 			node.getJavadoc().accept(this);
 		}
-		if (node.getAST().apiLevel() >= JLS3) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS3) {
 			printModifiers(node.modifiers());
 		}
 		this.fBuffer.append(node.isInterface() ? "interface " : "class ");//$NON-NLS-2$//$NON-NLS-1$
 		node.getName().accept(this);
-		if (node.getAST().apiLevel() >= JLS3) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS3) {
 			if (!node.typeParameters().isEmpty()) {
 				this.fBuffer.append("<");//$NON-NLS-1$
 				for (Iterator<TypeParameter> it= node.typeParameters().iterator(); it.hasNext();) {
@@ -1810,7 +1797,7 @@
 			}
 		}
 		this.fBuffer.append(" ");//$NON-NLS-1$
-		if (node.getAST().apiLevel() >= JLS3) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS3) {
 			if (node.getSuperclassType() != null) {
 				this.fBuffer.append("extends ");//$NON-NLS-1$
 				node.getSuperclassType().accept(this);
@@ -1866,7 +1853,7 @@
 	 */
 	@Override
 	public boolean visit(TypeDeclarationStatement node) {
-		if (node.getAST().apiLevel() >= JLS3) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS3) {
 			node.getDeclaration().accept(this);
 		}
 		return false;
@@ -1943,7 +1930,7 @@
 	 */
 	@Override
 	public boolean visit(VariableDeclarationExpression node) {
-		if (node.getAST().apiLevel() >= JLS3) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS3) {
 			printModifiers(node.modifiers());
 		}
 		node.getType().accept(this);
@@ -1964,7 +1951,7 @@
 	@Override
 	public boolean visit(VariableDeclarationFragment node) {
 		node.getName().accept(this);
-		if (node.getAST().apiLevel() >= JLS8) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS8) {
 			List<Dimension> dimensions = node.extraDimensions();
 			for (Dimension e : dimensions) {
 				e.accept(this);
@@ -1986,7 +1973,7 @@
 	 */
 	@Override
 	public boolean visit(VariableDeclarationStatement node) {
-		if (node.getAST().apiLevel() >= JLS3) {
+		if (node.getAST().apiLevel() >= ASTHelper.JLS3) {
 			printModifiers(node.modifiers());
 		}
 		node.getType().accept(this);
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodeFactory.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodeFactory.java
index 0a53ee3..fada460 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodeFactory.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ASTNodeFactory.java
@@ -57,6 +57,8 @@
 
 import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility2Core;
 
+import org.eclipse.jdt.internal.ui.util.ASTHelper;
+
 /**
  * JDT-UI-internal helper methods to create new {@link ASTNode}s.
  * Complements <code>AST#new*(..)</code> and <code>ImportRewrite#add*(..)</code>.
@@ -430,7 +432,7 @@
 	}
 
 	public static Type newNonVarType(AST ast, VariableDeclaration declaration, ImportRewrite importRewrite, ImportRewriteContext context) {
-		if (declaration.getAST().apiLevel() < AST.JLS10) {
+		if (declaration.getAST().apiLevel() < ASTHelper.JLS10) {
 			return newType(ast, declaration, importRewrite, context);
 		}
 
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/IASTSharedValues.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/IASTSharedValues.java
index 4297ae0..5d9049d 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/IASTSharedValues.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/IASTSharedValues.java
@@ -15,13 +15,15 @@
 
 import org.eclipse.jdt.core.dom.AST;
 
+import org.eclipse.jdt.internal.ui.util.ASTHelper;
+
 public interface IASTSharedValues {
 
 	/**
 	 * This value is subject to change with every release. JDT-UI-internal code typically supports
 	 * the latest available {@link AST#apiLevel() AST level} exclusively.
 	 */
-	int SHARED_AST_LEVEL= AST.JLS15;
+	int SHARED_AST_LEVEL= ASTHelper.JLS_Latest;
 
 	boolean SHARED_AST_STATEMENT_RECOVERY= true;
 
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/LinkedNodeFinder.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/LinkedNodeFinder.java
index cd7be3d..6073904 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/LinkedNodeFinder.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/LinkedNodeFinder.java
@@ -18,7 +18,6 @@
 
 import org.eclipse.jdt.core.Flags;
 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.ASTVisitor;
 import org.eclipse.jdt.core.dom.BreakStatement;
@@ -269,7 +268,7 @@
 
 
 	public static SimpleName[] findByProblems(ASTNode parent, SimpleName nameNode) {
-		if (nameNode.getAST().apiLevel() >= AST.JLS10 && nameNode.isVar()) {
+		if (nameNode.getAST().apiLevel() >= ASTHelper.JLS10 && nameNode.isVar()) {
 			return null;
 		}
 		ArrayList<SimpleName> res= new ArrayList<>();
@@ -299,7 +298,7 @@
 				if ((nameNodeKind & currKind) != 0) {
 					ASTNode node= NodeFinder.perform(parent, probStart, (probEnd - probStart));
 					if (node instanceof SimpleName && name.equals(((SimpleName) node).getIdentifier())) {
-						if (node.getAST().apiLevel() < AST.JLS10 || !((SimpleName) node).isVar()) {
+						if (node.getAST().apiLevel() < ASTHelper.JLS10 || !((SimpleName) node).isVar()) {
 							res.add((SimpleName) node);
 						}
 					}
@@ -371,7 +370,7 @@
 
 		@Override
 		public boolean visit(SimpleName node) {
-			if (node.getAST().apiLevel() >= AST.JLS10 && node.isVar()) {
+			if (node.getAST().apiLevel() >= ASTHelper.JLS10 && node.isVar()) {
 				return false;
 			}
 			IBinding binding= node.resolveBinding();
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/MovedMemberAnalyzer.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/MovedMemberAnalyzer.java
index 4d47d5d..0c0ad4c 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/MovedMemberAnalyzer.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/MovedMemberAnalyzer.java
@@ -14,7 +14,6 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.corext.refactoring.structure;
 
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.FieldAccess;
 import org.eclipse.jdt.core.dom.IBinding;
 import org.eclipse.jdt.core.dom.IMethodBinding;
@@ -29,6 +28,8 @@
 
 import org.eclipse.jdt.internal.corext.dom.Bindings;
 
+import org.eclipse.jdt.internal.ui.util.ASTHelper;
+
 /**
  * Updates references in moved static members.
  * Accepts <code>BodyDeclaration</code>s.
@@ -65,7 +66,7 @@
 		if (isMovedMember(binding))
 			return super.visit(node);
 
-		boolean isVarType= node.getAST().apiLevel() >= AST.JLS10 && node.isVar();
+		boolean isVarType= node.getAST().apiLevel() >= ASTHelper.JLS10 && node.isVar();
 		if (isSourceAccess(binding) && ! isVarType)
 			rewrite(node, fSource);
 		return super.visit(node);
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/ReferenceAnalyzer.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/ReferenceAnalyzer.java
index f9a88fd..0718be0 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/ReferenceAnalyzer.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/ReferenceAnalyzer.java
@@ -14,7 +14,6 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.corext.refactoring.structure;
 
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.AnnotationTypeDeclaration;
 import org.eclipse.jdt.core.dom.EnumDeclaration;
 import org.eclipse.jdt.core.dom.FieldAccess;
@@ -32,6 +31,8 @@
 import org.eclipse.jdt.core.dom.TypeDeclaration;
 import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 
+import org.eclipse.jdt.internal.ui.util.ASTHelper;
+
 /**
  * Updates references to moved static members.
  * Accepts <code>CompilationUnit</code>s.
@@ -87,7 +88,7 @@
 
 	@Override
 	public boolean visit(SimpleName node) {
-		boolean isVarType= node.getAST().apiLevel() >= AST.JLS10 && node.isVar();
+		boolean isVarType= node.getAST().apiLevel() >= ASTHelper.JLS10 && node.isVar();
 		if (! node.isDeclaration() && isMovedMember(node.resolveBinding()) && ! isVarType && ! isProcessed(node))
 			rewrite(node, fTarget);
 		return false;
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/util/JavaModelUtil.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/util/JavaModelUtil.java
index ae7d957..0429b41 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/util/JavaModelUtil.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/util/JavaModelUtil.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
  *     Matt Chapman, mpchapman@gmail.com - 89977 Make JDT .java agnostic
@@ -80,7 +84,7 @@
 	 */
 	public static final String VERSION_LATEST;
 	static {
-		VERSION_LATEST= JavaCore.VERSION_15; // make sure it is not inlined
+		VERSION_LATEST= JavaCore.VERSION_16; // make sure it is not inlined
 	}
 
 	public static final int VALIDATE_EDIT_CHANGED_CONTENT= 10003;
@@ -841,6 +845,10 @@
 		return !isVersionLessThan(compliance, JavaCore.VERSION_15);
 	}
 
+	public static boolean is16OrHigher(String compliance) {
+		return !isVersionLessThan(compliance, JavaCore.VERSION_16);
+	}
+
 	/**
 	 * Checks if the given project or workspace has source compliance 1.2 or greater.
 	 *
@@ -959,6 +967,17 @@
 		return is15OrHigher(getSourceCompliance(project));
 	}
 
+	/**
+	 * Checks if the given project or workspace has source compliance 16 or greater.
+	 *
+	 * @param project the project to test or <code>null</code> to test the workspace settings
+	 * @return <code>true</code> if the given project or workspace has source compliance 16 or
+	 *         greater.
+	 */
+	public static boolean is16OrHigher(IJavaProject project) {
+		return is16OrHigher(getSourceCompliance(project));
+	}
+
 	private static String getSourceCompliance(IJavaProject project) {
 		return project != null ? project.getOption(JavaCore.COMPILER_SOURCE, true) : JavaCore.getOption(JavaCore.COMPILER_SOURCE);
 	}
@@ -1009,6 +1028,8 @@
 		String version= vMInstall.getJavaVersion();
 		if (version == null) {
 			return defaultCompliance;
+		} else if (version.startsWith(JavaCore.VERSION_16)) {
+			return JavaCore.VERSION_16;
 		} else if (version.startsWith(JavaCore.VERSION_15)) {
 			return JavaCore.VERSION_15;
 		} else if (version.startsWith(JavaCore.VERSION_14)) {
@@ -1051,7 +1072,9 @@
 
 		// fallback:
 		String desc= executionEnvironment.getId();
-		if (desc.indexOf(JavaCore.VERSION_15) != -1) {
+		if (desc.indexOf(JavaCore.VERSION_16) != -1) {
+			return JavaCore.VERSION_16;
+		} else if (desc.indexOf(JavaCore.VERSION_15) != -1) {
 			return JavaCore.VERSION_15;
 		} else if (desc.indexOf(JavaCore.VERSION_14) != -1) {
 			return JavaCore.VERSION_14;
diff --git a/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/launcher/ITestFinder.java b/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/launcher/ITestFinder.java
index b79d2e8..c3d237e 100644
--- a/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/launcher/ITestFinder.java
+++ b/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/launcher/ITestFinder.java
@@ -29,6 +29,7 @@
  * org.eclipse.jdt.junit.internal_testKinds.
  */
 public interface ITestFinder {
+
 	ITestFinder NULL= new ITestFinder() {
 		@Override
 		public void findTestsInContainer(IJavaElement element, Set<IType> result, IProgressMonitor pm) {
diff --git a/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/launcher/JUnit4TestFinder.java b/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/launcher/JUnit4TestFinder.java
index fdea73f..c58dd8c 100644
--- a/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/launcher/JUnit4TestFinder.java
+++ b/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/launcher/JUnit4TestFinder.java
@@ -205,7 +205,7 @@
 			if (CoreTestSearchEngine.hasSuiteMethod(type)) { // since JUnit 4.3.1
 				return true;
 			}
-			ASTParser parser= ASTParser.newParser(AST.JLS15);
+			ASTParser parser= ASTParser.newParser(AST.JLS_Latest);
 			/* TODO: When bug 156352 is fixed:
 			parser.setProject(type.getJavaProject());
 			IBinding[] bindings= parser.createBindings(new IJavaElement[] { type }, monitor);
diff --git a/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/launcher/JUnit5TestFinder.java b/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/launcher/JUnit5TestFinder.java
index c1236e3..655e6e0 100644
--- a/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/launcher/JUnit5TestFinder.java
+++ b/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/launcher/JUnit5TestFinder.java
@@ -256,7 +256,7 @@
 			if (CoreTestSearchEngine.hasSuiteMethod(type)) { // since JUnit 4.3.1
 				return true;
 			}
-			ASTParser parser= ASTParser.newParser(AST.JLS15);
+			ASTParser parser= ASTParser.newParser(AST.JLS_Latest);
 			if (type.getCompilationUnit() != null) {
 				parser.setSource(type.getCompilationUnit());
 			} else if (!isAvailable(type.getSourceRange())) { // class file with no source
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/AllRefactoringTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/AllRefactoringTests.java
index 5147eed..4ef4237 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/AllRefactoringTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/AllRefactoringTests.java
@@ -28,7 +28,7 @@
 	ExtractMethodTests1d8.class,
 	InlineMethodTests.class,
 	InlineMethodTests1d8.class,
-	InlineMethodTests14.class,
+	InlineMethodTests16.class,
 	ReplaceInvocationsTests.class,
 	SefTests.class,
 	InlineTempTests.class,
@@ -47,12 +47,12 @@
 	IntroduceParameterTests.class,
 	IntroduceParameterTests1d7.class,
 	IntroduceFactoryTests.class,
-	IntroduceFactoryTests15.class,
+	IntroduceFactoryTests16.class,
 
 	//-- structure
 	ChangeSignatureTests.class,
 	ChangeSignatureTests1d8.class,
-	ChangeSignatureTests15.class,
+	ChangeSignatureTests16.class,
 	IntroduceParameterObjectTests.class,
 	PullUpTests.class,
 	PullUpTests1d8.class,
@@ -63,7 +63,7 @@
 	ExtractInterfaceTests1d8.class,
 	ExtractSupertypeTests.class,
 	MoveInnerToTopLevelTests.class,
-	MoveInnerToNewTests14.class,
+	MoveInnerToNewTests16.class,
 	UseSupertypeWherePossibleTests.class,
 	ExtractClassTests.class,
 
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ChangeSignatureTests15.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ChangeSignatureTests16.java
similarity index 92%
rename from org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ChangeSignatureTests15.java
rename to org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ChangeSignatureTests16.java
index df57fe6..30f2c2d 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ChangeSignatureTests15.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ChangeSignatureTests16.java
@@ -26,16 +26,16 @@
 
 import org.eclipse.jdt.ui.tests.CustomBaseRunner;
 import org.eclipse.jdt.ui.tests.IgnoreInheritedTests;
-import org.eclipse.jdt.ui.tests.core.rules.Java15ProjectTestSetup;
+import org.eclipse.jdt.ui.tests.core.rules.Java16ProjectTestSetup;
 
 /**
  * Those tests are made to run on Java Spider 1.8 .
  */
 @IgnoreInheritedTests
 @RunWith(CustomBaseRunner.class)
-public class ChangeSignatureTests15 extends ChangeSignatureTests {
+public class ChangeSignatureTests16 extends ChangeSignatureTests {
 	@Rule
-	public Java15ProjectTestSetup jps= new Java15ProjectTestSetup(true);
+	public Java16ProjectTestSetup jps= new Java16ProjectTestSetup(false);
 
 	private IJavaProject fJProject1;
 
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineMethodTestSetup14.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineMethodTestSetup16.java
similarity index 90%
rename from org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineMethodTestSetup14.java
rename to org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineMethodTestSetup16.java
index 16ceb69..780bb85 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineMethodTestSetup14.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineMethodTestSetup16.java
@@ -16,9 +16,9 @@
 import org.eclipse.jdt.core.IPackageFragment;
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 
-import org.eclipse.jdt.ui.tests.refactoring.rules.JavaPreviewSetup;
+import org.eclipse.jdt.ui.tests.refactoring.rules.Java16Setup;
 
-public class InlineMethodTestSetup14 extends JavaPreviewSetup {
+public class InlineMethodTestSetup16 extends Java16Setup {
 
 	private IPackageFragment fSimple14;
 
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineMethodTests14.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineMethodTests16.java
similarity index 75%
rename from org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineMethodTests14.java
rename to org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineMethodTests16.java
index 0f5286e..d1a2ada 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineMethodTests14.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineMethodTests16.java
@@ -26,24 +26,24 @@
 
 @IgnoreInheritedTests
 @RunWith(CustomBaseRunner.class)
-public class InlineMethodTests14 extends InlineMethodTests {
+public class InlineMethodTests16 extends InlineMethodTests {
 
 	@Rule
-	public InlineMethodTestSetup14 fgTestSetup14= new InlineMethodTestSetup14();
+	public InlineMethodTestSetup16 fgSetup= new InlineMethodTestSetup16();
 
 	protected void performSimpleTest() throws Exception {
-		performTestInlineCall(fgTestSetup14.getSimplePackage(), getName(), COMPARE_WITH_OUTPUT, fgTestSetup14.getSimplePkgOutName());
+		performTestInlineCall(fgSetup.getSimplePackage(), getName(), COMPARE_WITH_OUTPUT, fgSetup.getSimplePkgOutName());
 	}
 
 	protected void performDefaultTest() throws Exception {
-		performTestInlineCall(fgTestSetup14.getDefaultPackage(), getName(), COMPARE_WITH_OUTPUT, fgTestSetup14.getSimplePkgOutName());
+		performTestInlineCall(fgSetup.getDefaultPackage(), getName(), COMPARE_WITH_OUTPUT, fgSetup.getSimplePkgOutName());
 	}
 
 	@Override
 	protected String getFilePath(IPackageFragment pack, String name) {
 		IPackageFragment packToUse = pack;
-		if (pack == fgTestSetup14.getDefaultPackage()) {
-			packToUse= fgTestSetup14.getSimplePackage();
+		if (pack == fgSetup.getDefaultPackage()) {
+			packToUse= fgSetup.getSimplePackage();
 		}
 		return super.getFilePath(packToUse, name);
 	}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/IntroduceFactoryTests15.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/IntroduceFactoryTests16.java
similarity index 83%
rename from org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/IntroduceFactoryTests15.java
rename to org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/IntroduceFactoryTests16.java
index 95c4c2d..caf3589 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/IntroduceFactoryTests15.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/IntroduceFactoryTests16.java
@@ -15,13 +15,13 @@
 
 import org.junit.Test;
 
-import org.eclipse.jdt.ui.tests.refactoring.rules.JavaPreviewSetup;
+import org.eclipse.jdt.ui.tests.refactoring.rules.Java16Setup;
 
-public class IntroduceFactoryTests15 extends IntroduceFactoryTestsBase {
+public class IntroduceFactoryTests16 extends IntroduceFactoryTestsBase {
 	private static final String REFACTORING_PATH= "IntroduceFactory/";
 
-	public IntroduceFactoryTests15() {
-		rts= new JavaPreviewSetup();
+	public IntroduceFactoryTests16() {
+		rts= new Java16Setup();
 	}
 
 	@Override
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveInnerToNewTests14.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveInnerToNewTests16.java
similarity index 94%
rename from org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveInnerToNewTests14.java
rename to org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveInnerToNewTests16.java
index 7fab934..668e580 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveInnerToNewTests14.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveInnerToNewTests16.java
@@ -31,15 +31,15 @@
 import org.eclipse.jdt.internal.corext.refactoring.RefactoringAvailabilityTester;
 import org.eclipse.jdt.internal.corext.refactoring.structure.MoveInnerToTopRefactoring;
 
-import org.eclipse.jdt.ui.tests.refactoring.rules.JavaPreviewSetup;
+import org.eclipse.jdt.ui.tests.refactoring.rules.Java16Setup;
 
 import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
 
-public class MoveInnerToNewTests14 extends GenericRefactoringTest {
+public class MoveInnerToNewTests16 extends GenericRefactoringTest {
 	private static final String REFACTORING_PATH= "MoveInnerToNew14/";
 
-	public MoveInnerToNewTests14() {
-		rts= new JavaPreviewSetup();
+	public MoveInnerToNewTests16() {
+		rts= new Java16Setup();
 	}
 
 	@Override
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameRecordElementsTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameRecordElementsTests.java
index 3fe4999..250f402 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameRecordElementsTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameRecordElementsTests.java
@@ -46,7 +46,7 @@
 import org.eclipse.jdt.internal.core.refactoring.descriptors.RefactoringSignatureDescriptorFactory;
 import org.eclipse.jdt.internal.corext.refactoring.rename.RenameFieldProcessor;
 
-import org.eclipse.jdt.ui.tests.refactoring.rules.JavaPreviewSetup;
+import org.eclipse.jdt.ui.tests.refactoring.rules.Java16Setup;
 
 public class RenameRecordElementsTests extends GenericRefactoringTest {
 	private static final String REFACTORING_PATH= "RenameRecordElements/";
@@ -54,7 +54,7 @@
 	private String fPrefixPref;
 
 	public RenameRecordElementsTests() {
-		rts= new JavaPreviewSetup();
+		rts= new Java16Setup();
 	}
 
 	@Override
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/rules/Java16Setup.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/rules/Java16Setup.java
new file mode 100644
index 0000000..2107a12
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/rules/Java16Setup.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2020 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.ui.tests.refactoring.rules;
+
+import org.eclipse.jdt.testplugin.JavaProjectHelper;
+
+import org.eclipse.core.runtime.CoreException;
+
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+
+public class Java16Setup extends RefactoringTestSetup {
+	/*
+	 * @see org.eclipse.jdt.ui.tests.refactoring.RefactoringTestSetup#addRTJar(org.eclipse.jdt.core.IJavaProject)
+	 */
+	@Override
+	protected IPackageFragmentRoot addRTJar(IJavaProject project) throws CoreException {
+		return JavaProjectHelper.addRTJar_16(project, false);
+	}
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/rules/JavaPreviewSetup.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/rules/JavaPreviewSetup.java
index fe98e1c..b938dfe 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/rules/JavaPreviewSetup.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/rules/JavaPreviewSetup.java
@@ -13,6 +13,19 @@
  *******************************************************************************/
 package org.eclipse.jdt.ui.tests.refactoring.rules;
 
-public class JavaPreviewSetup extends Java15Setup {
+import org.eclipse.jdt.testplugin.JavaProjectHelper;
 
+import org.eclipse.core.runtime.CoreException;
+
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+
+public class JavaPreviewSetup extends Java16Setup {
+	/*
+	 * @see org.eclipse.jdt.ui.tests.refactoring.RefactoringTestSetup#addRTJar(org.eclipse.jdt.core.IJavaProject)
+	 */
+	@Override
+	protected IPackageFragmentRoot addRTJar(IJavaProject project) throws CoreException {
+		return JavaProjectHelper.addRTJar_16(project, true);
+	}
 }
diff --git a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/JavaProjectHelper.java b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/JavaProjectHelper.java
index 41b14a5..a5966fd 100644
--- a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/JavaProjectHelper.java
+++ b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/JavaProjectHelper.java
@@ -104,6 +104,7 @@
 	public static final IPath RT_STUBS13= new Path("testresources/rtstubs13.jar");
 	public static final IPath RT_STUBS14= new Path("testresources/rtstubs14.jar");
 	public static final IPath RT_STUBS15= new Path("testresources/rtstubs_15.jar");
+	public static final IPath RT_STUBS16= new Path("testresources/rtstubs_16.jar");
 	public static final IPath JUNIT_SRC_381= new Path("testresources/junit381-noUI-src.zip");
 	public static final String JUNIT_SRC_ENCODING= "ISO-8859-1";
 
@@ -313,6 +314,23 @@
 	}
 
 	/**
+	 * Sets the compiler options to 15 for the given project.
+	 *
+	 * @param project the java project
+	 * @param enable_preview_feature sets enable-preview compliance project option based on the
+	 *            value specified.
+	 */
+	public static void set16CompilerOptions(IJavaProject project, boolean enable_preview_feature) {
+		Map<String, String> options= project.getOptions(false);
+		set16_CompilerOptions(options);
+		if (enable_preview_feature) {
+			options.put(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, JavaCore.ENABLED);
+			options.put(JavaCore.COMPILER_PB_REPORT_PREVIEW_FEATURES, JavaCore.IGNORE);
+		}
+		project.setOptions(options);
+	}
+
+	/**
 	 * Sets the compiler options to 1.8 for the given project.
 	 *
 	 * @param project the java project
@@ -420,7 +438,7 @@
 	}
 
 	/**
-	 * Sets the compiler options to 14.
+	 * Sets the compiler options to 15.
 	 *
 	 * @param options the compiler options to configure
 	 */
@@ -429,6 +447,15 @@
 	}
 
 	/**
+	 * Sets the compiler options to 16.
+	 *
+	 * @param options the compiler options to configure
+	 */
+	public static void set16_CompilerOptions(Map<String, String> options) {
+		JavaCore.setComplianceOptions(JavaCore.VERSION_16, options);
+	}
+
+	/**
 	 * Sets the compiler options to 1.8
 	 *
 	 * @param options the compiler options to configure
@@ -946,6 +973,12 @@
 		return addLibrary(jproject, rtJarPath[0], rtJarPath[1], rtJarPath[2]);
 	}
 
+	public static IPackageFragmentRoot addRTJar_16(IJavaProject jproject, boolean enable_preview_feature) throws CoreException {
+		IPath[] rtJarPath= findRtJar(RT_STUBS16);
+		set16CompilerOptions(jproject, enable_preview_feature);
+		return addLibrary(jproject, rtJarPath[0], rtJarPath[1], rtJarPath[2]);
+	}
+
 	/**
 	 * Adds a variable entry with source attachment to a IJavaProject.
 	 * Can return null if variable can not be resolved.
diff --git a/org.eclipse.jdt.ui.tests/testresources/rtstubs_16.jar b/org.eclipse.jdt.ui.tests/testresources/rtstubs_16.jar
new file mode 100644
index 0000000..fb6cb93
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests/testresources/rtstubs_16.jar
Binary files differ
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/AbstractBindingLabelsTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/AbstractBindingLabelsTest.java
index 8142119..2bfd398 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/AbstractBindingLabelsTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/AbstractBindingLabelsTest.java
@@ -24,10 +24,10 @@
 
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.IBinding;
 
+import org.eclipse.jdt.internal.ui.util.ASTHelper;
 import org.eclipse.jdt.internal.ui.viewsupport.JavaElementLinks;
 
 public abstract class AbstractBindingLabelsTest extends CoreTests {
@@ -35,7 +35,7 @@
 	protected boolean fHaveSource= true;
 
 	protected String getBindingLabel(IJavaElement elem, long flags) {
-		ASTParser parser= ASTParser.newParser(AST.JLS15);
+		ASTParser parser= ASTParser.newParser(ASTHelper.JLS_Latest);
 		parser.setResolveBindings(true);
 		parser.setProject(fJProject1);
 		IBinding binding= parser.createBindings(new IJavaElement[]{elem}, null)[0];
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/BindingLabels18Test.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/BindingLabels18Test.java
index 57d4a03..eb8e58e 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/BindingLabels18Test.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/BindingLabels18Test.java
@@ -33,7 +33,6 @@
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.Signature;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.ASTRequestor;
 import org.eclipse.jdt.core.dom.Assignment;
@@ -50,6 +49,7 @@
 import org.eclipse.jdt.ui.PreferenceConstants;
 import org.eclipse.jdt.ui.tests.core.rules.Java1d8ProjectTestSetup;
 
+import org.eclipse.jdt.internal.ui.util.ASTHelper;
 import org.eclipse.jdt.internal.ui.viewsupport.JavaElementLinks;
 
 public class BindingLabels18Test extends AbstractBindingLabelsTest {
@@ -464,7 +464,7 @@
 					this.ast= unit;
 				}
 			}
-			ASTParser parser= ASTParser.newParser(AST.JLS15);
+			ASTParser parser= ASTParser.newParser(ASTHelper.JLS_Latest);
 			parser.setResolveBindings(true);
 			parser.setBindingsRecovery(true);
 			parser.setProject(javaProject);
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/BindingLabelsTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/BindingLabelsTest.java
index 8919980..beb54e0 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/BindingLabelsTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/BindingLabelsTest.java
@@ -32,7 +32,6 @@
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.ITypeParameter;
 import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.IBinding;
 import org.eclipse.jdt.core.dom.ITypeBinding;
@@ -41,6 +40,7 @@
 import org.eclipse.jdt.ui.PreferenceConstants;
 import org.eclipse.jdt.ui.tests.core.rules.ProjectTestSetup;
 
+import org.eclipse.jdt.internal.ui.util.ASTHelper;
 import org.eclipse.jdt.internal.ui.viewsupport.JavaElementLinks;
 
 /**
@@ -485,7 +485,7 @@
 		IJavaElement t1= cu.getElementAt(content.indexOf("T1"));
 		IJavaElement t2= cu.getElementAt(content.indexOf("T2"));
 
-		ASTParser parser= ASTParser.newParser(AST.JLS8);
+		ASTParser parser= ASTParser.newParser(ASTHelper.JLS8);
 		parser.setResolveBindings(true);
 		parser.setProject(fJProject1);
 		IBinding[] bindings= parser.createBindings(new IJavaElement[]{main, t1, t2}, null);
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/JDTFlagsTest18.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/JDTFlagsTest18.java
index 10eced4..f76d01e 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/JDTFlagsTest18.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/JDTFlagsTest18.java
@@ -44,7 +44,6 @@
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.AnnotationTypeMemberDeclaration;
 import org.eclipse.jdt.core.dom.CompilationUnit;
@@ -60,6 +59,8 @@
 
 import org.eclipse.jdt.ui.tests.core.rules.Java1d8ProjectTestSetup;
 
+import org.eclipse.jdt.internal.ui.util.ASTHelper;
+
 /**
  * Those tests are made to run on Java Spider 1.8 .
  */
@@ -83,7 +84,7 @@
 	}
 
 	protected CompilationUnit getCompilationUnitNode(String source) {
-		ASTParser parser = ASTParser.newParser(AST.JLS8);
+		ASTParser parser = ASTParser.newParser(ASTHelper.JLS8);
 		parser.setSource(source.toCharArray());
 		Hashtable<String, String> options= JavaCore.getOptions();
 		JavaCore.setComplianceOptions(JavaCore.VERSION_1_8, options);
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java16ProjectTestSetup.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java16ProjectTestSetup.java
new file mode 100644
index 0000000..af93fd3
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java16ProjectTestSetup.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2020 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
+ *
+ * derived from corresponding file in org.eclipse.jdt.ui.tests.core
+ * instead extending TestSetup for junit4 ExternalResource is extended
+ * to allow use as junit "@Rule"
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.ui.tests.core.rules;
+
+import org.eclipse.jdt.testplugin.JavaProjectHelper;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.jdt.core.IClasspathAttribute;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+
+import org.eclipse.jdt.internal.core.ClasspathEntry;
+
+public class Java16ProjectTestSetup extends ProjectTestSetup {
+
+	public static final String PROJECT_NAME16= "TestSetupProject16";
+
+	private boolean enable_preview_feature;
+
+	@Override
+	public IJavaProject getProject() {
+		IProject project= ResourcesPlugin.getWorkspace().getRoot().getProject(PROJECT_NAME16);
+		return JavaCore.create(project);
+	}
+
+	@Override
+	public IClasspathEntry[] getDefaultClasspath() throws CoreException {
+		IPath[] rtJarPath= JavaProjectHelper.findRtJar(JavaProjectHelper.RT_STUBS16);
+		IClasspathAttribute[] extraAttributes= { JavaCore.newClasspathAttribute(IClasspathAttribute.MODULE, Boolean.TRUE.toString()) };
+		return new IClasspathEntry[] { JavaCore.newLibraryEntry(rtJarPath[0], rtJarPath[1], rtJarPath[2], ClasspathEntry.NO_ACCESS_RULES, extraAttributes, true) };
+	}
+
+	public Java16ProjectTestSetup( boolean enable_preview_feature) {
+		this.enable_preview_feature= enable_preview_feature;
+	}
+
+	@Override
+	protected boolean projectExists() {
+		return getProject().exists();
+	}
+
+	@Override
+	protected IJavaProject createAndInitializeProject() throws CoreException {
+		IJavaProject javaProject= JavaProjectHelper.createJavaProject(PROJECT_NAME16, "bin");
+		javaProject.setRawClasspath(getDefaultClasspath(), null);
+		JavaProjectHelper.set16CompilerOptions(javaProject, enable_preview_feature);
+		return javaProject;
+	}
+
+}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/AddUnimplementedMethodsTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/AddUnimplementedMethodsTest.java
index d340750..680135f 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/AddUnimplementedMethodsTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/AddUnimplementedMethodsTest.java
@@ -47,7 +47,6 @@
 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.AbstractTypeDeclaration;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.IMethodBinding;
@@ -69,6 +68,8 @@
 import org.eclipse.jdt.ui.PreferenceConstants;
 import org.eclipse.jdt.ui.tests.core.rules.ProjectTestSetup;
 
+import org.eclipse.jdt.internal.ui.util.ASTHelper;
+
 public class AddUnimplementedMethodsTest {
 	@Rule
 	public ProjectTestSetup pts= new ProjectTestSetup();
@@ -385,7 +386,7 @@
 	@Deprecated
 	@Test
 	public void jLS3() throws Exception {
-		doTestOldAstLevel(AST.JLS3);
+		doTestOldAstLevel(ASTHelper.JLS3);
 	}
 
 	/**
@@ -395,12 +396,12 @@
 	@Deprecated
 	@Test
 	public void jLS4() throws Exception {
-		doTestOldAstLevel(AST.JLS4);
+		doTestOldAstLevel(ASTHelper.JLS4);
 	}
 
 	@Test
 	public void jLS8() throws Exception {
-		doTestOldAstLevel(AST.JLS8);
+		doTestOldAstLevel(ASTHelper.JLS8);
 	}
 
 	/**
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/GenerateGettersSettersTest14.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/GenerateGettersSettersTest16.java
similarity index 97%
rename from org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/GenerateGettersSettersTest14.java
rename to org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/GenerateGettersSettersTest16.java
index 76ee6aa..2865381 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/GenerateGettersSettersTest14.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/GenerateGettersSettersTest16.java
@@ -39,7 +39,7 @@
  * @see org.eclipse.jdt.internal.corext.codemanipulation.AddGetterSetterOperation
  *
  */
-public class GenerateGettersSettersTest14 extends SourceTestCase14 {
+public class GenerateGettersSettersTest16 extends SourceTestCase16 {
 	@Rule
 	public ProjectTestSetup pts= new ProjectTestSetup();
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/SourceActionTests.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/SourceActionTests.java
index 8989403..72385a1 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/SourceActionTests.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/SourceActionTests.java
@@ -28,7 +28,7 @@
 @Suite.SuiteClasses({
 AddUnimplementedMethodsTest.class,
 GenerateGettersSettersTest.class,
-GenerateGettersSettersTest14.class,
+GenerateGettersSettersTest16.class,
 GenerateDelegateMethodsTest.class,
 AddUnimplementedConstructorsTest.class,
 GenerateConstructorUsingFieldsTest.class,
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/SourceTestCase14.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/SourceTestCase16.java
similarity index 97%
rename from org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/SourceTestCase14.java
rename to org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/SourceTestCase16.java
index ad51183..32d869b 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/SourceTestCase14.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/SourceTestCase16.java
@@ -50,7 +50,7 @@
  * @see org.eclipse.jdt.internal.corext.codemanipulation.AddGetterSetterOperation
  *
  */
-public class SourceTestCase14 {
+public class SourceTestCase16 {
 	@Rule
 	public TestName tn=new TestName();
 
@@ -106,7 +106,7 @@
 	public void setUp() throws CoreException {
 
 		fJavaProject= JavaProjectHelper.createJavaProject("DummyProject", "bin");
-		assertNotNull(JavaProjectHelper.addRTJar_15(fJavaProject, true));
+		assertNotNull(JavaProjectHelper.addRTJar_16(fJavaProject, false));
 
 		fRoot= JavaProjectHelper.addSourceContainer(fJavaProject, "src");
 		fPackageP= fRoot.createPackageFragment("p", true, null);
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java
index f39fd9b..65d5516 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java
@@ -48,7 +48,6 @@
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.compiler.IProblem;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.ASTRequestor;
 import org.eclipse.jdt.core.dom.CompilationUnit;
@@ -73,6 +72,7 @@
 import org.eclipse.jdt.internal.ui.fix.RedundantModifiersCleanUp;
 import org.eclipse.jdt.internal.ui.fix.UnimplementedCodeCleanUp;
 import org.eclipse.jdt.internal.ui.text.correction.ProblemLocation;
+import org.eclipse.jdt.internal.ui.util.ASTHelper;
 
 public class CleanUpTest extends CleanUpTestCase {
 	@Rule
@@ -19432,7 +19432,7 @@
 		assertRefactoringHasNoChange(new ICompilationUnit[] { cu1 });
 
 		// When
-		ASTParser parser= ASTParser.newParser(AST.JLS15);
+		ASTParser parser= ASTParser.newParser(ASTHelper.JLS_Latest);
 		parser.setKind(ASTParser.K_COMPILATION_UNIT);
 		parser.setSource(cu1);
 		parser.setResolveBindings(true);
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest15.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest16.java
similarity index 97%
rename from org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest15.java
rename to org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest16.java
index 6a116b3..1579ac6 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest15.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest16.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2020 Red Hat Inc. and others.
+ * Copyright (c) 2020, 2021 Red Hat Inc. and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -30,17 +30,17 @@
 
 import org.eclipse.jdt.internal.corext.fix.CleanUpConstants;
 
-import org.eclipse.jdt.ui.tests.core.rules.Java15ProjectTestSetup;
+import org.eclipse.jdt.ui.tests.core.rules.Java16ProjectTestSetup;
 import org.eclipse.jdt.ui.tests.core.rules.ProjectTestSetup;
 
 import org.eclipse.jdt.internal.ui.fix.MultiFixMessages;
 
 /**
- * Tests the cleanup features related to Java 15.
+ * Tests the cleanup features related to Java 16.
  */
-public class CleanUpTest15 extends CleanUpTestCase {
+public class CleanUpTest16 extends CleanUpTestCase {
 	@Rule
-	public ProjectTestSetup projectSetup= new Java15ProjectTestSetup(true);
+	public ProjectTestSetup projectSetup= new Java16ProjectTestSetup(false);
 
 	@Override
 	protected IJavaProject getProject() {
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTestCaseSuite.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTestCaseSuite.java
index dd3c5d6..dc268a1 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTestCaseSuite.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTestCaseSuite.java
@@ -31,7 +31,7 @@
 	CleanUpTest11.class,
 	CleanUpTest12.class,
 	CleanUpTest14.class,
-	CleanUpTest15.class,
+	CleanUpTest16.class,
 	CleanUpAnnotationTest.class,
 	SaveParticipantTest.class,
 	CleanUpActionTest.class,
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/JavadocQuickFixTestPreview.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/JavadocQuickFixTestPreview.java
index b04ae89..3ca5c77 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/JavadocQuickFixTestPreview.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/JavadocQuickFixTestPreview.java
@@ -36,7 +36,7 @@
 import org.eclipse.jdt.internal.core.manipulation.CodeTemplateContextType;
 import org.eclipse.jdt.internal.core.manipulation.StubUtility;
 
-import org.eclipse.jdt.ui.tests.core.rules.Java15ProjectTestSetup;
+import org.eclipse.jdt.ui.tests.core.rules.Java16ProjectTestSetup;
 import org.eclipse.jdt.ui.tests.core.rules.ProjectTestSetup;
 import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
 import org.eclipse.jdt.ui.text.java.correction.CUCorrectionProposal;
@@ -44,7 +44,7 @@
 public class JavadocQuickFixTestPreview extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new Java15ProjectTestSetup(true);
+    public ProjectTestSetup projectsetup = new Java16ProjectTestSetup(true);
 
 	private IJavaProject fJProject1;
 
@@ -72,7 +72,7 @@
 		StubUtility.setCodeTemplate(CodeTemplateContextType.TYPECOMMENT_ID, res, null);
 
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		JavaProjectHelper.set15CompilerOptions(fJProject1, true);
+		JavaProjectHelper.set16CompilerOptions(fJProject1, true);
 		JavaProjectHelper.addRequiredModularProject(fJProject1, projectsetup.getProject());
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest.java
index a8ef0ca..023015f 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest.java
@@ -88,6 +88,11 @@
 /**
  */
 public class QuickFixTest {
+
+	protected static String MODULE_INFO_FILE_CONTENT = ""
+			+ "module test {\n"
+			+ "}\n";
+
 	public static void assertCorrectLabels(List<? extends ICompletionProposal> proposals) {
 		for (ICompletionProposal proposal : proposals) {
 			String name= proposal.getDisplayString();
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest16.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest16.java
new file mode 100644
index 0000000..1dae9d0
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest16.java
@@ -0,0 +1,309 @@
+/*******************************************************************************
+ * Copyright (c) 2020 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.ui.tests.quickfix;
+
+import java.util.ArrayList;
+
+import org.junit.After;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import org.eclipse.jdt.testplugin.JavaProjectHelper;
+
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+
+import org.eclipse.jdt.internal.corext.util.Messages;
+
+import org.eclipse.jdt.ui.tests.core.rules.Java16ProjectTestSetup;
+import org.eclipse.jdt.ui.tests.core.rules.ProjectTestSetup;
+import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
+import org.eclipse.jdt.ui.text.java.correction.CUCorrectionProposal;
+
+import org.eclipse.jdt.internal.ui.text.correction.CorrectionMessages;
+
+@RunWith(JUnit4.class)
+public class QuickFixTest16 extends QuickFixTest {
+
+	@Rule
+	public ProjectTestSetup projectsetup= new Java16ProjectTestSetup(false);
+
+	private IJavaProject fJProject;
+
+	private IPackageFragmentRoot fSourceFolder;
+
+	@After
+	public void tearDown() throws Exception {
+		if (fJProject != null) {
+			JavaProjectHelper.delete(fJProject);
+		}
+	}
+
+	@Test
+	public void testRecordGetNeedHigherComplianceProposal() throws Exception {
+		fJProject= JavaProjectHelper.createJavaProject("TestProject1", "bin");
+		fJProject.setRawClasspath(projectsetup.getDefaultClasspath(), null);
+		JavaProjectHelper.set15CompilerOptions(fJProject, false);
+
+		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject, "src");
+
+
+		IPackageFragment def= fSourceFolder.createPackageFragment("", false, null);
+		def.createCompilationUnit("module-info.java", MODULE_INFO_FILE_CONTENT, false, null);
+
+		IPackageFragment pack= fSourceFolder.createPackageFragment("test", false, null);
+		String test= ""
+					+ "package test;\n"
+					+ "public record Rec1() {\n"
+					+ "}\n";
+		ICompilationUnit cu= pack.createCompilationUnit("Rec1.java", test, false, null);
+
+		CompilationUnit astRoot= getASTRoot(cu);
+		ArrayList<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot, 1, null);
+
+		assertNumberOfProposals(proposals, 1);
+		String label= Messages.format(CorrectionMessages.ReorgCorrectionsSubProcessor_change_project_compliance_description, "16");
+		assertProposalExists(proposals, label);
+	}
+
+	@Test
+	public void testRecordConstructorIncorrectParamsProposal1() throws Exception {
+		fJProject= JavaProjectHelper.createJavaProject("TestProject1", "bin");
+		fJProject.setRawClasspath(projectsetup.getDefaultClasspath(), null);
+		JavaProjectHelper.set16CompilerOptions(fJProject, false);
+
+		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject, "src");
+		IPackageFragment pack1= fSourceFolder.createPackageFragment("test", false, null);
+
+		String test= "" +
+					"package test;\n" +
+					"\n" +
+					"public record Rec1(int a){\n" +
+					"\n" +
+					"	public static void main(String[] args) {\n" +
+					"		Rec1 abc = new Rec1();\n" +
+					"	}\n" +
+					"}\n";
+		ICompilationUnit cu= pack1.createCompilationUnit("Rec1.java", test, false, null);
+
+		CompilationUnit astRoot= getASTRoot(cu);
+		ArrayList<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot, 1);
+		assertNumberOfProposals(proposals, 2);
+		assertCorrectLabels(proposals);
+
+		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+		String preview1= getPreviewContent(proposal);
+
+		String expected1= "" +
+						"package test;\n" +
+						"\n" +
+						"public record Rec1(int a){\n" +
+						"\n" +
+						"	public static void main(String[] args) {\n" +
+						"		Rec1 abc = new Rec1(a);\n" +
+						"	}\n" +
+						"}\n";
+
+		proposal= (CUCorrectionProposal) proposals.get(1);
+		String preview2= getPreviewContent(proposal);
+
+		String expected2= "" +
+						"package test;\n" +
+						"\n" +
+						"public record Rec1(int a){\n" +
+						"\n" +
+						"	/**\n" +
+						"	 * \n" +
+						"	 */\n" +
+						"	public Rec1() {\n" +
+						"		// TODO Auto-generated constructor stub\n" +
+						"	}\n" +
+						"\n" +
+						"	public static void main(String[] args) {\n" +
+						"		Rec1 abc = new Rec1();\n" +
+						"	}\n" +
+						"}\n";
+
+		assertEqualStringsIgnoreOrder(new String[] { preview1, preview2 }, new String[] { expected1, expected2 });
+	}
+
+	@Test
+	public void testRecordConstructorIncorrectParamsProposal2() throws Exception {
+		fJProject= JavaProjectHelper.createJavaProject("TestProject1", "bin");
+		fJProject.setRawClasspath(projectsetup.getDefaultClasspath(), null);
+		JavaProjectHelper.set16CompilerOptions(fJProject, false);
+
+		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject, "src");
+		IPackageFragment pack1= fSourceFolder.createPackageFragment("test", false, null);
+
+		String test= "" +
+					"package test;\n" +
+					"\n" +
+					"public record Rec1(int a){\n" +
+					"\n" +
+					"	public static void main(String[] args) {\n" +
+					"		Rec1 abc = new Rec1(10, 20);\n" +
+					"	}\n" +
+					"}\n";
+		ICompilationUnit cu= pack1.createCompilationUnit("Rec1.java", test, false, null);
+
+		CompilationUnit astRoot= getASTRoot(cu);
+		ArrayList<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot, 1);
+		assertNumberOfProposals(proposals, 2);
+		assertCorrectLabels(proposals);
+
+		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+		String preview1= getPreviewContent(proposal);
+
+		String expected1= "" +
+						"package test;\n" +
+						"\n" +
+						"public record Rec1(int a){\n" +
+						"\n" +
+						"	public static void main(String[] args) {\n" +
+						"		Rec1 abc = new Rec1(10);\n" +
+						"	}\n" +
+						"}\n";
+
+		proposal= (CUCorrectionProposal) proposals.get(1);
+		String preview2= getPreviewContent(proposal);
+
+		String expected2= "" +
+						"package test;\n" +
+						"\n" +
+						"public record Rec1(int a){\n" +
+						"\n" +
+						"	/**\n" +
+						"	 * @param i\n" +
+						"	 * @param j\n" +
+						"	 */\n" +
+						"	public Rec1(int i, int j) {\n" +
+						"		// TODO Auto-generated constructor stub\n" +
+						"	}\n" +
+						"\n" +
+						"	public static void main(String[] args) {\n" +
+						"		Rec1 abc = new Rec1(10, 20);\n" +
+						"	}\n" +
+						"}\n";
+
+		assertEqualStringsIgnoreOrder(new String[] { preview1, preview2 }, new String[] { expected1, expected2 });
+	}
+
+	@Test
+	public void testRecordConstructorIncorrectParamsProposal3() throws Exception {
+		fJProject= JavaProjectHelper.createJavaProject("TestProject1", "bin");
+		fJProject.setRawClasspath(projectsetup.getDefaultClasspath(), null);
+		JavaProjectHelper.set16CompilerOptions(fJProject, false);
+
+		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject, "src");
+		IPackageFragment pack1= fSourceFolder.createPackageFragment("test", false, null);
+
+		String test= "" +
+					"package test;\n" +
+					"\n" +
+					"public record Rec1(int a){\n" +
+					"\n" +
+					"	public static void main(String[] args) {\n" +
+					"		Rec1 abc = new Rec1(\"str\");\n" +
+					"	}\n" +
+					"}\n";
+		ICompilationUnit cu= pack1.createCompilationUnit("Rec1.java", test, false, null);
+
+		CompilationUnit astRoot= getASTRoot(cu);
+		ArrayList<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot, 1);
+		assertNumberOfProposals(proposals, 1);
+		assertCorrectLabels(proposals);
+
+		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+		String preview1= getPreviewContent(proposal);
+
+		String expected1= "" +
+						"package test;\n" +
+						"\n" +
+						"public record Rec1(int a){\n" +
+						"\n" +
+						"	/**\n" +
+						"	 * @param string\n" +
+						"	 */\n" +
+						"	public Rec1(String string) {\n" +
+						"		// TODO Auto-generated constructor stub\n" +
+						"	}\n" +
+						"\n" +
+						"	public static void main(String[] args) {\n" +
+						"		Rec1 abc = new Rec1(\"str\");\n" +
+						"	}\n" +
+						"}\n";
+
+		assertEqualStringsIgnoreOrder(new String[] { preview1 }, new String[] { expected1 });
+	}
+
+	@Test
+	public void testRecordCanonicalConstructordUninitializedFieldProposal() throws Exception {
+		fJProject= JavaProjectHelper.createJavaProject("TestProject1", "bin");
+		fJProject.setRawClasspath(projectsetup.getDefaultClasspath(), null);
+		JavaProjectHelper.set16CompilerOptions(fJProject, false);
+
+		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject, "src");
+		IPackageFragment pack1= fSourceFolder.createPackageFragment("test", false, null);
+
+		String test= "" +
+					"package test;\n" +
+					"\n" +
+					"public record Rec1(int a, int b){\n" +
+					"\n" +
+					"	public Rec1(int a, int b) {\n" +
+					"		\n" +
+					"	}\n\n" +
+					"	public Rec1(int a) {\n" +
+					"		this(a, a);\n" +
+					"	}\n\n" +
+					"	public Rec1(int a, int b, int c) {\n" +
+					"		this(a, b+c);\n" +
+					"	}\n\n" +
+					"}\n";
+		ICompilationUnit cu= pack1.createCompilationUnit("Rec1.java", test, false, null);
+
+		CompilationUnit astRoot= getASTRoot(cu);
+		ArrayList<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot, 2);
+		assertNumberOfProposals(proposals, 1);
+		assertCorrectLabels(proposals);
+
+		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+		String preview1= getPreviewContent(proposal);
+
+		String expected1= "" +
+					"package test;\n" +
+					"\n" +
+					"public record Rec1(int a, int b){\n" +
+					"\n" +
+					"	public Rec1(int a, int b) {\n" +
+					"		this.a = 0;\n" +
+					"		\n" +
+					"	}\n\n" +
+					"	public Rec1(int a) {\n" +
+					"		this(a, a);\n" +
+					"	}\n\n" +
+					"	public Rec1(int a, int b, int c) {\n" +
+					"		this(a, b+c);\n" +
+					"	}\n\n" +
+					"}\n";
+
+		assertEqualStringsIgnoreOrder(new String[] { preview1 }, new String[] { expected1 });
+	}
+}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTestPreview.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTestPreview.java
index 28a6a4c..7216012 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTestPreview.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTestPreview.java
@@ -17,14 +17,11 @@
 import java.util.Map;
 
 import org.junit.After;
-import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 
 import org.eclipse.jdt.testplugin.JavaProjectHelper;
 
-import org.eclipse.jface.text.contentassist.ICompletionProposal;
-
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IPackageFragment;
@@ -32,27 +29,19 @@
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 
-import org.eclipse.jdt.internal.corext.util.Messages;
-
-import org.eclipse.jdt.ui.tests.core.rules.Java15ProjectTestSetup;
+import org.eclipse.jdt.ui.tests.core.rules.Java16ProjectTestSetup;
 import org.eclipse.jdt.ui.tests.core.rules.ProjectTestSetup;
 import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
 import org.eclipse.jdt.ui.text.java.correction.CUCorrectionProposal;
 
-import org.eclipse.jdt.internal.ui.text.correction.CorrectionMessages;
-
 public class QuickFixTestPreview extends QuickFixTest {
 
-	@Rule
-	public ProjectTestSetup projectsetup= new Java15ProjectTestSetup(true);
+    @Rule
+    public ProjectTestSetup projectsetup = new Java16ProjectTestSetup(true);
 
-	private IJavaProject fJProject1;
+    private IJavaProject fJProject1;
 
-	private IPackageFragmentRoot fSourceFolder;
-
-	private static String MODULE_INFO_FILE_CONTENT = ""
-										+ "module test {\n"
-										+ "}\n";
+    private IPackageFragmentRoot fSourceFolder;
 
 	@After
 	public void tearDown() throws Exception {
@@ -62,135 +51,10 @@
 	}
 
 	@Test
-	public void testEnablePreviewsAndOpenCompilerPropertiesProposals() throws Exception {
-		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(projectsetup.getDefaultClasspath(), null);
-		JavaProjectHelper.set15CompilerOptions(fJProject1, false);
-
-		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-
-		IPackageFragment def= fSourceFolder.createPackageFragment("", false, null);
-		def.createCompilationUnit("module-info.java", MODULE_INFO_FILE_CONTENT, false, null);
-
-		IPackageFragment pack= fSourceFolder.createPackageFragment("test", false, null);
-		String test= ""
-					+ "package test;\n"
-					+ "public record Rec1() {\n"
-					+ "}\n";
-		ICompilationUnit cu= pack.createCompilationUnit("Rec1.java", test, false, null);
-
-		CompilationUnit astRoot= getASTRoot(cu);
-		ArrayList<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot, 1, null);
-
-		assertNumberOfProposals(proposals, 2);
-		String label1= CorrectionMessages.PreviewFeaturesSubProcessor_enable_preview_features;
-		assertProposalExists(proposals, label1);
-		String label2= CorrectionMessages.PreviewFeaturesSubProcessor_open_compliance_properties_page_enable_preview_features;
-		assertProposalExists(proposals, label2);
-	}
-
-	@Test
-	public void testRecordSuppressWarningsProposals() throws Exception {
-		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(projectsetup.getDefaultClasspath(), null);
-		JavaProjectHelper.set15CompilerOptions(fJProject1, true);
-
-		Map<String, String> options= fJProject1.getOptions(false);
-		options.put(JavaCore.COMPILER_PB_REPORT_PREVIEW_FEATURES, JavaCore.WARNING);
-		fJProject1.setOptions(options);
-
-		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-
-
-		IPackageFragment def= fSourceFolder.createPackageFragment("", false, null);
-		def.createCompilationUnit("module-info.java", MODULE_INFO_FILE_CONTENT, false, null);
-
-		IPackageFragment pack= fSourceFolder.createPackageFragment("test", false, null);
-		String test= ""
-					+ "package test;\n"
-					+ "public record Rec1() {\n"
-					+ "}\n";
-		ICompilationUnit cu= pack.createCompilationUnit("Rec1.java", test, false, null);
-
-		CompilationUnit astRoot= getASTRoot(cu);
-		ArrayList<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot, 1, null);
-
-		assertNumberOfProposals(proposals, 2);
-		String label= Messages.format(CorrectionMessages.SuppressWarningsSubProcessor_suppress_warnings_label, new String[] { "preview", "Rec1" });
-		assertProposalExists(proposals, label);
-
-		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
-		String preview= getPreviewContent(proposal);
-
-		String expected= ""
-						+ "package test;\n"
-						+ "@SuppressWarnings(\"preview\")\n"
-						+ "public record Rec1() {\n"
-						+ "}\n";
-
-		assertEqualStringsIgnoreOrder(new String[] { preview }, new String[] { expected });
-	}
-
-	@Ignore("See bug 562103 comment 4")
-	@Test
-	public void testGetNeedHigherComplianceProposalsAndEnablePreviewsProposal() throws Exception {
-		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(projectsetup.getDefaultClasspath(), null);
-		JavaProjectHelper.set15CompilerOptions(fJProject1, false);
-
-		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-
-
-		IPackageFragment def= fSourceFolder.createPackageFragment("", false, null);
-		def.createCompilationUnit("module-info.java", MODULE_INFO_FILE_CONTENT, false, null);
-
-		IPackageFragment pack= fSourceFolder.createPackageFragment("test", false, null);
-		String test= ""
-					+ "package test;\n"
-					+ "public record Rec1() {\n"
-					+ "}\n";
-		ICompilationUnit cu= pack.createCompilationUnit("Rec1.java", test, false, null);
-
-		CompilationUnit astRoot= getASTRoot(cu);
-		ArrayList<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot, 1, null);
-
-		assertNumberOfProposals(proposals, 1);
-		String label1= Messages.format(CorrectionMessages.ReorgCorrectionsSubProcessor_change_project_compliance_description, "14");
-		String label2= CorrectionMessages.PreviewFeaturesSubProcessor_enable_preview_features;
-		String label= Messages.format(CorrectionMessages.ReorgCorrectionsSubProcessor_combine_two_quickfixes, new String[] {label1, label2});
-		assertProposalExists(proposals, label);
-	}
-
-	@Test
-	public void testNoEnablePreviewProposal() throws Exception {
-		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(projectsetup.getDefaultClasspath(), null);
-		JavaProjectHelper.set15CompilerOptions(fJProject1, true);
-
-		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-
-
-		IPackageFragment def= fSourceFolder.createPackageFragment("", false, null);
-		def.createCompilationUnit("module-info.java", MODULE_INFO_FILE_CONTENT, false, null);
-
-		IPackageFragment pack= fSourceFolder.createPackageFragment("test", false, null);
-		String test= ""
-					+ "package test;\n"
-					+ "public record Rec() {\n"
-					+ "}\n";
-		ICompilationUnit cu= pack.createCompilationUnit("Rec.java", test, false, null);
-
-		CompilationUnit astRoot= getASTRoot(cu);
-		ArrayList<ICompletionProposal> proposals= collectAllCorrections(cu, astRoot, 0);
-
-		assertNumberOfProposals(proposals, 0);
-	}
-
-	@Test
 	public void testAddSealedMissingClassModifierProposal() throws Exception {
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
 		fJProject1.setRawClasspath(projectsetup.getDefaultClasspath(), null);
-		JavaProjectHelper.set15CompilerOptions(fJProject1, true);
+		JavaProjectHelper.set16CompilerOptions(fJProject1, true);
 
 		Map<String, String> options= fJProject1.getOptions(false);
 		options.put(JavaCore.COMPILER_PB_REPORT_PREVIEW_FEATURES, JavaCore.IGNORE);
@@ -250,7 +114,7 @@
 	public void testAddSealedMissingInterfaceModifierProposal() throws Exception {
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
 		fJProject1.setRawClasspath(projectsetup.getDefaultClasspath(), null);
-		JavaProjectHelper.set15CompilerOptions(fJProject1, true);
+		JavaProjectHelper.set16CompilerOptions(fJProject1, true);
 
 		Map<String, String> options= fJProject1.getOptions(false);
 		options.put(JavaCore.COMPILER_PB_REPORT_PREVIEW_FEATURES, JavaCore.IGNORE);
@@ -296,244 +160,5 @@
 
 	}
 
-	@Test
-	public void testRecordConstructorIncorrectParamsProposal1() throws Exception {
-		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(projectsetup.getDefaultClasspath(), null);
-		JavaProjectHelper.set15CompilerOptions(fJProject1, true);
 
-		Map<String, String> options= fJProject1.getOptions(false);
-		options.put(JavaCore.COMPILER_PB_REPORT_PREVIEW_FEATURES, JavaCore.IGNORE);
-		fJProject1.setOptions(options);
-
-		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test", false, null);
-
-		String test= "" +
-					"package test;\n" +
-					"\n" +
-					"public record Rec1(int a){\n" +
-					"\n" +
-					"	public static void main(String[] args) {\n" +
-					"		Rec1 abc = new Rec1();\n" +
-					"	}\n" +
-					"}\n";
-		ICompilationUnit cu= pack1.createCompilationUnit("Rec1.java", test, false, null);
-
-		CompilationUnit astRoot= getASTRoot(cu);
-		ArrayList<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot, 1);
-		assertNumberOfProposals(proposals, 2);
-		assertCorrectLabels(proposals);
-
-		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
-		String preview1= getPreviewContent(proposal);
-
-		String expected1= "" +
-						"package test;\n" +
-						"\n" +
-						"public record Rec1(int a){\n" +
-						"\n" +
-						"	public static void main(String[] args) {\n" +
-						"		Rec1 abc = new Rec1(a);\n" +
-						"	}\n" +
-						"}\n";
-
-		proposal= (CUCorrectionProposal) proposals.get(1);
-		String preview2= getPreviewContent(proposal);
-
-		String expected2= "" +
-						"package test;\n" +
-						"\n" +
-						"public record Rec1(int a){\n" +
-						"\n" +
-						"	/**\n" +
-						"	 * \n" +
-						"	 */\n" +
-						"	public Rec1() {\n" +
-						"		// TODO Auto-generated constructor stub\n" +
-						"	}\n" +
-						"\n" +
-						"	public static void main(String[] args) {\n" +
-						"		Rec1 abc = new Rec1();\n" +
-						"	}\n" +
-						"}\n";
-
-		assertEqualStringsIgnoreOrder(new String[] { preview1, preview2 }, new String[] { expected1, expected2 });
-	}
-
-	@Test
-	public void testRecordConstructorIncorrectParamsProposal2() throws Exception {
-		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(projectsetup.getDefaultClasspath(), null);
-		JavaProjectHelper.set15CompilerOptions(fJProject1, true);
-
-		Map<String, String> options= fJProject1.getOptions(false);
-		options.put(JavaCore.COMPILER_PB_REPORT_PREVIEW_FEATURES, JavaCore.IGNORE);
-		fJProject1.setOptions(options);
-
-		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test", false, null);
-
-		String test= "" +
-					"package test;\n" +
-					"\n" +
-					"public record Rec1(int a){\n" +
-					"\n" +
-					"	public static void main(String[] args) {\n" +
-					"		Rec1 abc = new Rec1(10, 20);\n" +
-					"	}\n" +
-					"}\n";
-		ICompilationUnit cu= pack1.createCompilationUnit("Rec1.java", test, false, null);
-
-		CompilationUnit astRoot= getASTRoot(cu);
-		ArrayList<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot, 1);
-		assertNumberOfProposals(proposals, 2);
-		assertCorrectLabels(proposals);
-
-		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
-		String preview1= getPreviewContent(proposal);
-
-		String expected1= "" +
-						"package test;\n" +
-						"\n" +
-						"public record Rec1(int a){\n" +
-						"\n" +
-						"	public static void main(String[] args) {\n" +
-						"		Rec1 abc = new Rec1(10);\n" +
-						"	}\n" +
-						"}\n";
-
-		proposal= (CUCorrectionProposal) proposals.get(1);
-		String preview2= getPreviewContent(proposal);
-
-		String expected2= "" +
-						"package test;\n" +
-						"\n" +
-						"public record Rec1(int a){\n" +
-						"\n" +
-						"	/**\n" +
-						"	 * @param i\n" +
-						"	 * @param j\n" +
-						"	 */\n" +
-						"	public Rec1(int i, int j) {\n" +
-						"		// TODO Auto-generated constructor stub\n" +
-						"	}\n" +
-						"\n" +
-						"	public static void main(String[] args) {\n" +
-						"		Rec1 abc = new Rec1(10, 20);\n" +
-						"	}\n" +
-						"}\n";
-
-		assertEqualStringsIgnoreOrder(new String[] { preview1, preview2 }, new String[] { expected1, expected2 });
-	}
-
-	@Test
-	public void testRecordConstructorIncorrectParamsProposal3() throws Exception {
-		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(projectsetup.getDefaultClasspath(), null);
-		JavaProjectHelper.set15CompilerOptions(fJProject1, true);
-
-		Map<String, String> options= fJProject1.getOptions(false);
-		options.put(JavaCore.COMPILER_PB_REPORT_PREVIEW_FEATURES, JavaCore.IGNORE);
-		fJProject1.setOptions(options);
-
-		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test", false, null);
-
-		String test= "" +
-					"package test;\n" +
-					"\n" +
-					"public record Rec1(int a){\n" +
-					"\n" +
-					"	public static void main(String[] args) {\n" +
-					"		Rec1 abc = new Rec1(\"str\");\n" +
-					"	}\n" +
-					"}\n";
-		ICompilationUnit cu= pack1.createCompilationUnit("Rec1.java", test, false, null);
-
-		CompilationUnit astRoot= getASTRoot(cu);
-		ArrayList<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot, 1);
-		assertNumberOfProposals(proposals, 1);
-		assertCorrectLabels(proposals);
-
-		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
-		String preview1= getPreviewContent(proposal);
-
-		String expected1= "" +
-						"package test;\n" +
-						"\n" +
-						"public record Rec1(int a){\n" +
-						"\n" +
-						"	/**\n" +
-						"	 * @param string\n" +
-						"	 */\n" +
-						"	public Rec1(String string) {\n" +
-						"		// TODO Auto-generated constructor stub\n" +
-						"	}\n" +
-						"\n" +
-						"	public static void main(String[] args) {\n" +
-						"		Rec1 abc = new Rec1(\"str\");\n" +
-						"	}\n" +
-						"}\n";
-
-		assertEqualStringsIgnoreOrder(new String[] { preview1 }, new String[] { expected1 });
-	}
-
-	@Test
-	public void testRecordCanonicalConstructordUninitializedFieldProposal() throws Exception {
-		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(projectsetup.getDefaultClasspath(), null);
-		JavaProjectHelper.set15CompilerOptions(fJProject1, true);
-
-		Map<String, String> options= fJProject1.getOptions(false);
-		options.put(JavaCore.COMPILER_PB_REPORT_PREVIEW_FEATURES, JavaCore.IGNORE);
-		fJProject1.setOptions(options);
-
-		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-		IPackageFragment pack1= fSourceFolder.createPackageFragment("test", false, null);
-
-		String test= "" +
-					"package test;\n" +
-					"\n" +
-					"public record Rec1(int a, int b){\n" +
-					"\n" +
-					"	public Rec1(int a, int b) {\n" +
-					"		\n" +
-					"	}\n\n" +
-					"	public Rec1(int a) {\n" +
-					"		this(a, a);\n" +
-					"	}\n\n" +
-					"	public Rec1(int a, int b, int c) {\n" +
-					"		this(a, b+c);\n" +
-					"	}\n\n" +
-					"}\n";
-		ICompilationUnit cu= pack1.createCompilationUnit("Rec1.java", test, false, null);
-
-		CompilationUnit astRoot= getASTRoot(cu);
-		ArrayList<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot, 2);
-		assertNumberOfProposals(proposals, 1);
-		assertCorrectLabels(proposals);
-
-		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
-		String preview1= getPreviewContent(proposal);
-
-		String expected1= "" +
-					"package test;\n" +
-					"\n" +
-					"public record Rec1(int a, int b){\n" +
-					"\n" +
-					"	public Rec1(int a, int b) {\n" +
-					"		this.a = 0;\n" +
-					"		\n" +
-					"	}\n\n" +
-					"	public Rec1(int a) {\n" +
-					"		this(a, a);\n" +
-					"	}\n\n" +
-					"	public Rec1(int a, int b, int c) {\n" +
-					"		this(a, b+c);\n" +
-					"	}\n\n" +
-					"}\n";
-
-		assertEqualStringsIgnoreOrder(new String[] { preview1 }, new String[] { expected1 });
-	}
 }
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UtilitiesTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UtilitiesTest.java
index d9f1c13..7f10f11 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UtilitiesTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UtilitiesTest.java
@@ -221,7 +221,7 @@
 
 	@Test
 	public void testGetPossibleTypeKindsForTypes() throws Exception {
-		JavaProjectHelper.set15CompilerOptions(fJProject1, true);
+		JavaProjectHelper.set16CompilerOptions(fJProject1, true);
 
 		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
 		StringBuilder buf= new StringBuilder();
diff --git a/org.eclipse.jdt.ui/.settings/.api_filters b/org.eclipse.jdt.ui/.settings/.api_filters
index aad5889..40dac27 100644
--- a/org.eclipse.jdt.ui/.settings/.api_filters
+++ b/org.eclipse.jdt.ui/.settings/.api_filters
@@ -32,36 +32,6 @@
             </message_arguments>
         </filter>
     </resource>
-    <resource path="core refactoring/org/eclipse/jdt/internal/corext/refactoring/TypeContextChecker.java" type="org.eclipse.jdt.internal.corext.refactoring.TypeContextChecker">
-        <filter comment="This is a Java15 preview feature" id="640712815">
-            <message_arguments>
-                <message_argument value="AbstractTypeDeclaration"/>
-                <message_argument value="TypeContextChecker"/>
-                <message_argument value="getName()"/>
-            </message_arguments>
-        </filter>
-        <filter comment="This is a Java15 preview feature" id="640712815">
-            <message_arguments>
-                <message_argument value="RecordDeclaration"/>
-                <message_argument value="TypeContextChecker"/>
-                <message_argument value="recordComponents()"/>
-            </message_arguments>
-        </filter>
-        <filter comment="This is a Java 15 preview feature" id="640712815">
-            <message_arguments>
-                <message_argument value="RecordDeclaration"/>
-                <message_argument value="TypeContextChecker"/>
-                <message_argument value="superInterfaceTypes()"/>
-            </message_arguments>
-        </filter>
-        <filter comment="This is a Java 15 preview feature" id="640712815">
-            <message_arguments>
-                <message_argument value="RecordDeclaration"/>
-                <message_argument value="TypeContextChecker"/>
-                <message_argument value="typeParameters()"/>
-            </message_arguments>
-        </filter>
-    </resource>
     <resource path="core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceFactoryRefactoring.java" type="org.eclipse.jdt.internal.corext.refactoring.code.IntroduceFactoryRefactoring">
         <filter comment="This is a Java 15 preview feature" id="640712815">
             <message_arguments>
@@ -77,13 +47,6 @@
                 <message_argument value="isCompactConstructor()"/>
             </message_arguments>
         </filter>
-        <filter comment="This is a Java 15 preview feature" id="640712815">
-            <message_arguments>
-                <message_argument value="RecordDeclaration"/>
-                <message_argument value="IntroduceFactoryRefactoring"/>
-                <message_argument value="recordComponents()"/>
-            </message_arguments>
-        </filter>
     </resource>
     <resource path="core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ReplaceInvocationsRefactoring.java" type="org.eclipse.jdt.internal.corext.refactoring.code.ReplaceInvocationsRefactoring">
         <filter id="571519004">
@@ -229,15 +192,6 @@
             </message_arguments>
         </filter>
     </resource>
-    <resource path="ui/org/eclipse/jdt/internal/ui/fix/PatternMatchingForInstanceofCleanUp.java" type="org.eclipse.jdt.internal.ui.fix.PatternMatchingForInstanceofCleanUp$PatternMatchingForInstanceofOperation">
-        <filter comment="For Java 15" id="640712815">
-            <message_arguments>
-                <message_argument value="InstanceofExpression"/>
-                <message_argument value="PatternMatchingForInstanceofOperation"/>
-                <message_argument value="setPatternVariable(SimpleName)"/>
-            </message_arguments>
-        </filter>
-    </resource>
     <resource path="ui/org/eclipse/jdt/internal/ui/javaeditor/AddClassFileMarkerAction.java" type="org.eclipse.jdt.internal.ui.javaeditor.AddClassFileMarkerAction">
         <filter id="571473929">
             <message_arguments>
@@ -287,20 +241,6 @@
         </filter>
     </resource>
     <resource path="ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingReconciler.java" type="org.eclipse.jdt.internal.ui.javaeditor.SemanticHighlightingReconciler$PositionCollector">
-        <filter comment="This is a Java15 preview feature" id="640712815">
-            <message_arguments>
-                <message_argument value="ASTNode"/>
-                <message_argument value="PositionCollector"/>
-                <message_argument value="getAST()"/>
-            </message_arguments>
-        </filter>
-        <filter comment="For Java 14 preview features" id="640712815">
-            <message_arguments>
-                <message_argument value="RecordDeclaration"/>
-                <message_argument value="PositionCollector"/>
-                <message_argument value="getRestrictedIdentifierStartPosition()"/>
-            </message_arguments>
-        </filter>
         <filter comment="This is a Java 15 preview feature" id="640712815">
             <message_arguments>
                 <message_argument value="TypeDeclaration"/>
@@ -317,98 +257,6 @@
             </message_arguments>
         </filter>
     </resource>
-    <resource path="ui/org/eclipse/jdt/internal/ui/text/correction/JavadocTagsSubProcessor.java" type="org.eclipse.jdt.internal.ui.text.correction.JavadocTagsSubProcessor">
-        <filter comment="For Java 14 Enable Preview feature" id="623939596">
-            <message_arguments>
-                <message_argument value="RecordDeclaration"/>
-                <message_argument value="JavadocTagsSubProcessor"/>
-                <message_argument value="RECORD_COMPONENTS_PROPERTY"/>
-            </message_arguments>
-        </filter>
-        <filter comment="For Java 14 Enable Preview feature" id="623939596">
-            <message_arguments>
-                <message_argument value="RecordDeclaration"/>
-                <message_argument value="JavadocTagsSubProcessor"/>
-                <message_argument value="TYPE_PARAMETERS_PROPERTY"/>
-            </message_arguments>
-        </filter>
-        <filter comment="For Java 14 Enable Preview feature" id="640712815">
-            <message_arguments>
-                <message_argument value="RecordDeclaration"/>
-                <message_argument value="JavadocTagsSubProcessor"/>
-                <message_argument value="recordComponents()"/>
-            </message_arguments>
-        </filter>
-        <filter comment="For Java 14 Enable Preview feature" id="640712815">
-            <message_arguments>
-                <message_argument value="RecordDeclaration"/>
-                <message_argument value="JavadocTagsSubProcessor"/>
-                <message_argument value="typeParameters()"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="ui/org/eclipse/jdt/internal/ui/text/correction/JavadocTagsSubProcessor.java" type="org.eclipse.jdt.internal.ui.text.correction.JavadocTagsSubProcessor$AddAllMissingJavadocTagsProposal">
-        <filter comment="For Java 14 Enable Preview feature" id="640712815">
-            <message_arguments>
-                <message_argument value="ASTNode"/>
-                <message_argument value="AddAllMissingJavadocTagsProposal"/>
-                <message_argument value="getAST()"/>
-            </message_arguments>
-        </filter>
-        <filter comment="For Java 14 Enable Preview feature" id="640712815">
-            <message_arguments>
-                <message_argument value="BodyDeclaration"/>
-                <message_argument value="AddAllMissingJavadocTagsProposal"/>
-                <message_argument value="getJavadoc()"/>
-            </message_arguments>
-        </filter>
-        <filter comment="For Java 14 Enable Preview feature" id="640712815">
-            <message_arguments>
-                <message_argument value="RecordDeclaration"/>
-                <message_argument value="AddAllMissingJavadocTagsProposal"/>
-                <message_argument value="recordComponents()"/>
-            </message_arguments>
-        </filter>
-        <filter comment="For Java 14 Enable Preview feature" id="640712815">
-            <message_arguments>
-                <message_argument value="RecordDeclaration"/>
-                <message_argument value="AddAllMissingJavadocTagsProposal"/>
-                <message_argument value="typeParameters()"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="ui/org/eclipse/jdt/internal/ui/text/correction/JavadocTagsSubProcessor.java" type="org.eclipse.jdt.internal.ui.text.correction.JavadocTagsSubProcessor$AddMissingJavadocTagProposal">
-        <filter comment="This is a Java15 preview feature" id="640712815">
-            <message_arguments>
-                <message_argument value="RecordDeclaration"/>
-                <message_argument value="AddMissingJavadocTagProposal"/>
-                <message_argument value="recordComponents()"/>
-            </message_arguments>
-        </filter>
-        <filter comment="For Java 14 Enable Preview feature" id="640712815">
-            <message_arguments>
-                <message_argument value="RecordDeclaration"/>
-                <message_argument value="AddMissingJavadocTagProposal"/>
-                <message_argument value="typeParameters()"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="ui/org/eclipse/jdt/internal/ui/text/correction/SuppressWarningsSubProcessor.java" type="org.eclipse.jdt.internal.ui.text.correction.SuppressWarningsSubProcessor">
-        <filter comment="For Java 14 Enable Preview feature" id="623939596">
-            <message_arguments>
-                <message_argument value="RecordDeclaration"/>
-                <message_argument value="SuppressWarningsSubProcessor"/>
-                <message_argument value="MODIFIERS2_PROPERTY"/>
-            </message_arguments>
-        </filter>
-        <filter comment="For Java 14 Enable Preview feature" id="640712815">
-            <message_arguments>
-                <message_argument value="AbstractTypeDeclaration"/>
-                <message_argument value="SuppressWarningsSubProcessor"/>
-                <message_argument value="getName()"/>
-            </message_arguments>
-        </filter>
-    </resource>
     <resource path="ui/org/eclipse/jdt/internal/ui/text/correction/UnresolvedElementsSubProcessor.java" type="org.eclipse.jdt.internal.ui.text.correction.UnresolvedElementsSubProcessor">
         <filter comment="This is a Java 15 preview feature" id="640712815">
             <message_arguments>
@@ -419,13 +267,6 @@
         </filter>
     </resource>
     <resource path="ui/org/eclipse/jdt/internal/ui/text/correction/proposals/InitializeFinalFieldProposal.java" type="org.eclipse.jdt.internal.ui.text.correction.proposals.InitializeFinalFieldProposal">
-        <filter id="640712815">
-            <message_arguments>
-                <message_argument value="AbstractTypeDeclaration"/>
-                <message_argument value="InitializeFinalFieldProposal"/>
-                <message_argument value="getName()"/>
-            </message_arguments>
-        </filter>
         <filter comment="This is a Java 15 preview feature" id="640712815">
             <message_arguments>
                 <message_argument value="IMethodBinding"/>
@@ -434,15 +275,6 @@
             </message_arguments>
         </filter>
     </resource>
-    <resource path="ui/org/eclipse/jdt/internal/ui/text/correction/proposals/InitializeFinalFieldProposal.java" type="org.eclipse.jdt.internal.ui.text.correction.proposals.InitializeFinalFieldProposal$RecordComponentVisitor">
-        <filter id="640712815">
-            <message_arguments>
-                <message_argument value="RecordDeclaration"/>
-                <message_argument value="RecordComponentVisitor"/>
-                <message_argument value="recordComponents()"/>
-            </message_arguments>
-        </filter>
-    </resource>
     <resource path="ui/org/eclipse/jdt/internal/ui/util/ViewerPane.java" type="org.eclipse.jdt.internal.ui.util.ViewerPane">
         <filter id="571473929">
             <message_arguments>
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/RenameJavaElementAction.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/RenameJavaElementAction.java
index c1bb80c..0165194 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/RenameJavaElementAction.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/RenameJavaElementAction.java
@@ -33,7 +33,6 @@
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.ITypeRoot;
 import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.IMethodBinding;
@@ -61,6 +60,7 @@
 import org.eclipse.jdt.internal.ui.refactoring.reorg.RenameLinkedMode;
 import org.eclipse.jdt.internal.ui.text.correction.CorrectionCommandHandler;
 import org.eclipse.jdt.internal.ui.text.correction.proposals.LinkedNamesAssistProposal;
+import org.eclipse.jdt.internal.ui.util.ASTHelper;
 import org.eclipse.jdt.internal.ui.util.ExceptionHandler;
 
 public class RenameJavaElementAction extends SelectionDispatchAction {
@@ -244,7 +244,7 @@
 	private boolean isVarTypeSelection(ITextSelection textSelection) {
 		if (textSelection instanceof JavaTextSelection) {
 			ASTNode node= ((JavaTextSelection) textSelection).resolveCoveringNode();
-			if (node instanceof SimpleName && node.getAST().apiLevel() >= AST.JLS10 && ((SimpleName) node).isVar()) {
+			if (node instanceof SimpleName && node.getAST().apiLevel() >= ASTHelper.JLS10 && ((SimpleName) node).isVar()) {
 				return true;
 			}
 		} else if (textSelection != null) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/PatternMatchingForInstanceofCleanUp.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/PatternMatchingForInstanceofCleanUp.java
index 5a5bc6d..7338fc9 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/PatternMatchingForInstanceofCleanUp.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/PatternMatchingForInstanceofCleanUp.java
@@ -55,8 +55,6 @@
 import org.eclipse.jdt.ui.cleanup.ICleanUpFix;
 import org.eclipse.jdt.ui.text.java.IProblemLocation;
 
-import org.eclipse.jdt.internal.ui.text.correction.PreviewFeaturesSubProcessor;
-
 /**
  * A fix that uses pattern matching for the instanceof expression when possible.
  */
@@ -103,8 +101,7 @@
 	@Override
 	protected ICleanUpFix createFix(CompilationUnit unit) throws CoreException {
 		if (!isEnabled(CleanUpConstants.USE_PATTERN_MATCHING_FOR_INSTANCEOF)
-				|| !PreviewFeaturesSubProcessor.isPreviewFeatureEnabled(unit.getJavaElement().getJavaProject())
-				|| !JavaModelUtil.is15OrHigher(unit.getJavaElement().getJavaProject())) {
+				|| !JavaModelUtil.is16OrHigher(unit.getJavaElement().getJavaProject())) {
 			return null;
 		}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingReconciler.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingReconciler.java
index 6bf5f7a..531c831 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingReconciler.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingReconciler.java
@@ -131,7 +131,7 @@
 
 		@Override
 		public boolean visit(SimpleType node) {
-			if (node.getAST().apiLevel() >= AST.JLS10 && node.isVar()) {
+			if (node.getAST().apiLevel() >= ASTHelper.JLS10 && node.isVar()) {
 				int offset= node.getStartPosition();
 				int length= node.getLength();
 				if (offset > -1 && length > 0) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ComplianceConfigurationBlock.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ComplianceConfigurationBlock.java
index 9731796..36ed061 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ComplianceConfigurationBlock.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/ComplianceConfigurationBlock.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 Møller - Bug 529432 - Allow JDT UI to target Java 10
@@ -143,6 +147,7 @@
 	private static final String VERSION_13 = JavaCore.VERSION_13;
 	private static final String VERSION_14 = JavaCore.VERSION_14;
 	private static final String VERSION_15 = JavaCore.VERSION_15;
+	private static final String VERSION_16 = JavaCore.VERSION_16;
 	private static final String VERSION_LATEST = JavaCore.latestSupportedJavaVersion();
 	private static final String VERSION_JSR14= "jsr14"; //$NON-NLS-1$
 
@@ -300,7 +305,7 @@
 	private Composite createComplianceTabContent(Composite folder) {
 
 		final String[] complianceVersions= new String[] { 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_13, VERSION_14, VERSION_15 };
+				VERSION_1_5, VERSION_1_6, VERSION_1_7, VERSION_1_8, VERSION_9, VERSION_10, VERSION_11, VERSION_12, VERSION_13, VERSION_14, VERSION_15, VERSION_16 };
 		final String[] complianceLabels= new String[] {
 			PreferencesMessages.ComplianceConfigurationBlock_version13,
 			PreferencesMessages.ComplianceConfigurationBlock_version14,
@@ -315,10 +320,11 @@
 			PreferencesMessages.ComplianceConfigurationBlock_version_13,
 			PreferencesMessages.ComplianceConfigurationBlock_version_14,
 			PreferencesMessages.ComplianceConfigurationBlock_version_15,
+			PreferencesMessages.ComplianceConfigurationBlock_version_16,
 		};
 
 		String[] targetVersions= new String[] { 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_13, VERSION_14, VERSION_15 };
+				VERSION_1_5, VERSION_1_6, VERSION_1_7, VERSION_1_8, VERSION_9, VERSION_10, VERSION_11, VERSION_12, VERSION_13, VERSION_14, VERSION_15, VERSION_16 };
 		String[] targetLabels= new String[] {
 				PreferencesMessages.ComplianceConfigurationBlock_versionCLDC11,
 				PreferencesMessages.ComplianceConfigurationBlock_version11,
@@ -336,6 +342,7 @@
 				PreferencesMessages.ComplianceConfigurationBlock_version_13,
 				PreferencesMessages.ComplianceConfigurationBlock_version_14,
 				PreferencesMessages.ComplianceConfigurationBlock_version_15,
+				PreferencesMessages.ComplianceConfigurationBlock_version_16,
 		};
 		if (ComplianceConfigurationBlock.VERSION_JSR14.equals(getValue(PREF_CODEGEN_TARGET_PLATFORM))) {
 			targetVersions= append(targetVersions, ComplianceConfigurationBlock.VERSION_JSR14);
@@ -343,7 +350,7 @@
 		}
 
 		String[] sourceVersions= new String[] { 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_13, VERSION_14, VERSION_15 };
+				VERSION_1_5, VERSION_1_6, VERSION_1_7, VERSION_1_8, VERSION_9, VERSION_10, VERSION_11, VERSION_12, VERSION_13, VERSION_14, VERSION_15, VERSION_16 };
 		String[] sourceLabels= new String[] {
 				PreferencesMessages.ComplianceConfigurationBlock_version13,
 				PreferencesMessages.ComplianceConfigurationBlock_version14,
@@ -358,6 +365,7 @@
 				PreferencesMessages.ComplianceConfigurationBlock_version_13,
 				PreferencesMessages.ComplianceConfigurationBlock_version_14,
 				PreferencesMessages.ComplianceConfigurationBlock_version_15,
+				PreferencesMessages.ComplianceConfigurationBlock_version_16,
 		};
 
 		final ScrolledPageContent sc1 = new ScrolledPageContent(folder);
@@ -807,13 +815,13 @@
 				}
 			}
 
-//			//TODO: Comment once Java SE 15 has been shipped:
-//			String selectedCompliance= getValue(PREF_COMPLIANCE);
-//			if (VERSION_15.equals(selectedCompliance)) {
-//				fJRE50InfoText.setText(
-//						"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."); //$NON-NLS-1$
-//				isVisible= true;
-//			}
+			//TODO: Comment once Java SE 16 has been shipped:
+			String selectedCompliance= getValue(PREF_COMPLIANCE);
+			if (VERSION_16.equals(selectedCompliance)) {
+				fJRE50InfoText.setText(
+						"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."); //$NON-NLS-1$
+				isVisible= true;
+			}
 
 			fJRE50InfoText.setVisible(isVisible);
 			fJRE50InfoImage.setImage(isVisible ? image : null);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.java
index 52946cc..65b04e6 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.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 Kaplan, johnkaplantech@gmail.com - 108071 [code templates] template for body of newly created class
@@ -839,6 +843,7 @@
 	public static String ComplianceConfigurationBlock_version_13;
 	public static String ComplianceConfigurationBlock_version_14;
 	public static String ComplianceConfigurationBlock_version_15;
+	public static String ComplianceConfigurationBlock_version_16;
 	public static String ComplianceConfigurationBlock_versionCLDC11;
 	public static String ComplianceConfigurationBlock_src_greater_compliance;
 	public static String ComplianceConfigurationBlock_classfile_greater_compliance;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties
index a8801fc..d8b7290 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.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.
+#
 #     IBM Corporation - initial API and implementation
 #     John Kaplan, johnkaplantech@gmail.com - 108071 [code templates] template for body of newly created class
 #     Sebastian Davids, sdavids@gmx.de - 187316 [preferences] Mark Occurrences Pref Page; Link to
@@ -591,6 +595,7 @@
 ComplianceConfigurationBlock_version_13=13
 ComplianceConfigurationBlock_version_14=14
 ComplianceConfigurationBlock_version_15=15
+ComplianceConfigurationBlock_version_16=16 (BETA)
 ComplianceConfigurationBlock_versionCLDC11=CLDC 1.1
 
 ComplianceConfigurationBlock_needsbuild_title=Compiler Settings Changed
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/CorrectionCommandHandler.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/CorrectionCommandHandler.java
index cd37cd0..da8952e 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/CorrectionCommandHandler.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/CorrectionCommandHandler.java
@@ -38,7 +38,6 @@
 import org.eclipse.ui.keys.IBindingService;
 
 import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.SimpleName;
 
@@ -50,6 +49,7 @@
 import org.eclipse.jdt.internal.ui.actions.ActionUtil;
 import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
 import org.eclipse.jdt.internal.ui.text.correction.proposals.LinkedNamesAssistProposal;
+import org.eclipse.jdt.internal.ui.util.ASTHelper;
 
 /**
  * Handler to be used to run a quick fix or assist by keyboard shortcut
@@ -132,7 +132,7 @@
 		ASTNode node= context.getCoveringNode();
 		if (node instanceof SimpleName) {
 			SimpleName name= (SimpleName) node;
-			if (name.getAST().apiLevel() >= AST.JLS10 && name.isVar()) {
+			if (name.getAST().apiLevel() >= ASTHelper.JLS10 && name.isVar()) {
 				return null;
 			}
 			return new LinkedNamesAssistProposal(context, name);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/LocalCorrectionsSubProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/LocalCorrectionsSubProcessor.java
index 7f3129e..b50365e 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/LocalCorrectionsSubProcessor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/LocalCorrectionsSubProcessor.java
@@ -245,7 +245,7 @@
 		List<String> affectedLocals= new ArrayList<>();
 		SimpleName vName= null;
 		ITypeBinding vType= null;
-		if (selectedNode.getAST().apiLevel() >= AST.JLS10 && (selectedNode instanceof VariableDeclarationStatement)) {
+		if (selectedNode.getAST().apiLevel() >= ASTHelper.JLS10 && (selectedNode instanceof VariableDeclarationStatement)) {
 			for (Object o : ((VariableDeclarationStatement)selectedNode).fragments()) {
 				VariableDeclarationFragment v= ((VariableDeclarationFragment)o);
 				vName= v.getName();
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java
index 15201aa..e8f5852 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java
@@ -3055,7 +3055,7 @@
 			return false;
 		}
 		SimpleName name= (SimpleName) node;
-		if (name.getAST().apiLevel() >= AST.JLS10 && name.isVar()) {
+		if (name.getAST().apiLevel() >= ASTHelper.JLS10 && name.isVar()) {
 			return false;
 		}
 		IBinding binding= name.resolveBinding();
@@ -3093,7 +3093,7 @@
 			return false;
 		}
 		SimpleName name= (SimpleName) node;
-		if (name.getAST().apiLevel() >= AST.JLS10 && name.isVar()) {
+		if (name.getAST().apiLevel() >= ASTHelper.JLS10 && name.isVar()) {
 			return false;
 		}
 		IBinding binding= name.resolveBinding();
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/TypeMismatchSubProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/TypeMismatchSubProcessor.java
index 031301b..24f0342 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/TypeMismatchSubProcessor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/TypeMismatchSubProcessor.java
@@ -82,6 +82,7 @@
 import org.eclipse.jdt.internal.ui.text.correction.proposals.NewVariableCorrectionProposal;
 import org.eclipse.jdt.internal.ui.text.correction.proposals.OptionalCorrectionProposal;
 import org.eclipse.jdt.internal.ui.text.correction.proposals.TypeChangeCorrectionProposal;
+import org.eclipse.jdt.internal.ui.util.ASTHelper;
 import org.eclipse.jdt.internal.ui.viewsupport.BindingLabelProvider;
 
 
@@ -159,7 +160,7 @@
 
 		if (!(nodeToCast instanceof ArrayInitializer)) {
 			String castTypeName= castTypeBinding.getErasure().getQualifiedName();
-			if (castTypeName.equals("java.util.Optional") && ast.apiLevel() >= AST.JLS8) { //$NON-NLS-1$
+			if (castTypeName.equals("java.util.Optional") && ast.apiLevel() >= ASTHelper.JLS8) { //$NON-NLS-1$
 				ITypeBinding nodeToCastTypeBinding= nodeToCast.resolveTypeBinding();
 				String label0= Messages.format(CorrectionMessages.TypeMismatchSubProcessor_changetooptionalempty_description, nodeToCast.toString());
 				proposals.add(new OptionalCorrectionProposal(label0, cu, nodeToCast, IProposalRelevance.CREATE_EMPTY_OPTIONAL, OptionalCorrectionProposal.OPTIONAL_EMPTY));
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewProviderMethodDeclaration.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewProviderMethodDeclaration.java
index 29bfcb7..b2948fd 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewProviderMethodDeclaration.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewProviderMethodDeclaration.java
@@ -47,6 +47,7 @@
 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 
 import org.eclipse.jdt.internal.ui.JavaPluginImages;
+import org.eclipse.jdt.internal.ui.util.ASTHelper;
 
 public class NewProviderMethodDeclaration extends AbstractMethodCorrectionProposal {
 
@@ -67,7 +68,7 @@
 		typeProposals.addAll(Arrays.asList(subTypes));
 		Image image= JavaPluginImages.get(JavaPluginImages.IMG_MISC_PUBLIC);
 
-		ASTParser parser= ASTParser.newParser(AST.JLS9);
+		ASTParser parser= ASTParser.newParser(ASTHelper.JLS9);
 		parser.setKind(ASTParser.K_COMPILATION_UNIT);
 		parser.setProject(compilationUnit.getJavaProject());
 		parser.setSource(compilationUnit);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/TemplateEngine.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/TemplateEngine.java
index aefa99a..7ea18e5 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/TemplateEngine.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/TemplateEngine.java
@@ -47,7 +47,6 @@
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.JavaPluginImages;
-import org.eclipse.jdt.internal.ui.text.correction.PreviewFeaturesSubProcessor;
 
 
 public class TemplateEngine {
@@ -213,7 +212,7 @@
 			}
 			return false;
 		}
-		if (NEW_RECORD_TEMPLATE_NAME.equals(template.getName()) && PreviewFeaturesSubProcessor.isPreviewFeatureEnabled(context.getJavaProject())) {
+		if (NEW_RECORD_TEMPLATE_NAME.equals(template.getName()) && JavaModelUtil.is16OrHigher(context.getJavaProject())) {
 			return true;
 		}
 		return true;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewWizardMessages.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewWizardMessages.java
index 2faefdd..7f6db77 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewWizardMessages.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewWizardMessages.java
@@ -118,7 +118,6 @@
 	public static String NewTypeWizardPage_warning_NotJDKCompliant2;
 	public static String NewTypeWizardPage_warning_EnumClassNotFound;
 	public static String NewTypeWizardPage_warning_RecordClassNotFound;
-	public static String NewTypeWizardPage_warning_PreviewFeatureNotEnabled;
 	public static String NewTypeWizardPage_default;
 	public static String NewTypeWizardPage_ChoosePackageDialog_title;
 	public static String NewTypeWizardPage_ChoosePackageDialog_description;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewWizardMessages.properties b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewWizardMessages.properties
index 59f0f1a..93fe9c1 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewWizardMessages.properties
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewWizardMessages.properties
@@ -93,7 +93,6 @@
 NewTypeWizardPage_warning_NotJDKCompliant2=Project ''{0}'' is not a Java {1} compliant project.
 NewTypeWizardPage_warning_EnumClassNotFound=Type 'java.lang.Enum' is not on the project's build path. Make sure you use a 1.5 JDK.
 NewTypeWizardPage_warning_RecordClassNotFound=Type 'java.lang.Record' is not on the project's build path. Make sure you use a 14 JDK.
-NewTypeWizardPage_warning_PreviewFeatureNotEnabled=Project ''{0}'' does not have preview features enabled.
 
 NewTypeWizardPage_default=(default)
 NewTypeWizardPage_ChoosePackageDialog_title=Package Selection
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/SharedASTProvider.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/SharedASTProvider.java
index f0d941e..b74205f 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/SharedASTProvider.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/SharedASTProvider.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
@@ -33,7 +37,7 @@
  * <p>Clients can make the following assumptions about the AST:</p>
  * <ul>
  *    <li>the AST has a {@link ITypeRoot} as source: {@link CompilationUnit#getTypeRoot()} is not null.</li>
- *    <li>the {@link AST#apiLevel() AST API level} is {@link AST#JLS15 API level 15} or higher</li>
+ *    <li>the {@link AST#apiLevel() AST API level} is {@link AST#JLS16 API level 16} or higher</li>
  *    <li>the AST has bindings resolved ({@link AST#hasResolvedBindings()})</li>
  *    <li>{@link AST#hasStatementsRecovery() statement} and {@link AST#hasBindingsRecovery() bindings}
  *           recovery are enabled
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewTypeWizardPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewTypeWizardPage.java
index a893ee9..eec15f3 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewTypeWizardPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewTypeWizardPage.java
@@ -149,7 +149,6 @@
 import org.eclipse.jdt.internal.ui.refactoring.contentassist.ControlContentAssistHelper;
 import org.eclipse.jdt.internal.ui.refactoring.contentassist.JavaPackageCompletionProcessor;
 import org.eclipse.jdt.internal.ui.refactoring.contentassist.JavaTypeCompletionProcessor;
-import org.eclipse.jdt.internal.ui.text.correction.PreviewFeaturesSubProcessor;
 import org.eclipse.jdt.internal.ui.util.SWTUtil;
 import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages;
 import org.eclipse.jdt.internal.ui.wizards.SuperInterfaceSelectionDialog;
@@ -1613,10 +1612,8 @@
 	    }
 		if ((fTypeKind == RECORD_TYPE) && !status.matches(IStatus.ERROR)) {
 	    	if (root != null) {
-	    		if (!JavaModelUtil.is14OrHigher(root.getJavaProject())) {
-	    			return new StatusInfo(IStatus.ERROR, Messages.format(NewWizardMessages.NewTypeWizardPage_warning_NotJDKCompliant2, new String[] {BasicElementLabels.getJavaElementName(root.getJavaProject().getElementName()), "14" })); //$NON-NLS-1$
-	    		} else if (!PreviewFeaturesSubProcessor.isPreviewFeatureEnabled(root.getJavaProject())) {
-	    			return new StatusInfo(IStatus.ERROR, Messages.format(NewWizardMessages.NewTypeWizardPage_warning_PreviewFeatureNotEnabled, BasicElementLabels.getJavaElementName(root.getJavaProject().getElementName())));
+	    		if (!JavaModelUtil.is16OrHigher(root.getJavaProject())) {
+	    			return new StatusInfo(IStatus.ERROR, Messages.format(NewWizardMessages.NewTypeWizardPage_warning_NotJDKCompliant2, new String[] {BasicElementLabels.getJavaElementName(root.getJavaProject().getElementName()), "16" })); //$NON-NLS-1$
 	    		}
 	    		try {
 		    	    // if findType(...) == null then Record is unavailable
diff --git a/pom.xml b/pom.xml
index b6694d8..23d954e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -35,6 +35,10 @@
   <profiles>
     <profile>
       <id>build-individual-bundles</id>
+      <properties>
+      	<eclipse-p2-repo.url>http://download.eclipse.org/eclipse/updates/Y-builds</eclipse-p2-repo.url>
+      	<skipAPIAnalysis>true</skipAPIAnalysis>
+ 	  </properties>
       <repositories>
         <repository>
           <releases>
