Bug 567085 - Upgrade base target to Eclipse 2018-12 and Xtext 2.16
diff --git a/org.eclipse.handly.examples.basic.ide/META-INF/MANIFEST.MF b/org.eclipse.handly.examples.basic.ide/META-INF/MANIFEST.MF
index c49776b..63f3fdf 100644
--- a/org.eclipse.handly.examples.basic.ide/META-INF/MANIFEST.MF
+++ b/org.eclipse.handly.examples.basic.ide/META-INF/MANIFEST.MF
@@ -10,6 +10,6 @@
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.handly.examples.basic,
  org.eclipse.xtext.ide,
- org.antlr.runtime
+ org.antlr.runtime;bundle-version="[3.2.0,3.2.1)"
 Export-Package: org.eclipse.handly.examples.basic.ide.contentassist.antlr.internal,
  org.eclipse.handly.examples.basic.ide.contentassist.antlr
diff --git a/org.eclipse.handly.examples.basic.ide/src-gen/org/eclipse/handly/examples/basic/ide/contentassist/antlr/FooParser.java b/org.eclipse.handly.examples.basic.ide/src-gen/org/eclipse/handly/examples/basic/ide/contentassist/antlr/FooParser.java
index 58158f0..0aaa546 100644
--- a/org.eclipse.handly.examples.basic.ide/src-gen/org/eclipse/handly/examples/basic/ide/contentassist/antlr/FooParser.java
+++ b/org.eclipse.handly.examples.basic.ide/src-gen/org/eclipse/handly/examples/basic/ide/contentassist/antlr/FooParser.java
@@ -3,8 +3,9 @@
  */
 package org.eclipse.handly.examples.basic.ide.contentassist.antlr;
 
+import com.google.common.collect.ImmutableMap;
 import com.google.inject.Inject;
-import java.util.HashMap;
+import com.google.inject.Singleton;
 import java.util.Map;
 import org.eclipse.handly.examples.basic.ide.contentassist.antlr.internal.InternalFooParser;
 import org.eclipse.handly.examples.basic.services.FooGrammarAccess;
@@ -13,11 +14,42 @@
 
 public class FooParser extends AbstractContentAssistParser {
 
+	@Singleton
+	public static final class NameMappings {
+		
+		private final Map<AbstractElement, String> mappings;
+		
+		@Inject
+		public NameMappings(FooGrammarAccess grammarAccess) {
+			ImmutableMap.Builder<AbstractElement, String> builder = ImmutableMap.builder();
+			init(builder, grammarAccess);
+			this.mappings = builder.build();
+		}
+		
+		public String getRuleName(AbstractElement element) {
+			return mappings.get(element);
+		}
+		
+		private static void init(ImmutableMap.Builder<AbstractElement, String> builder, FooGrammarAccess grammarAccess) {
+			builder.put(grammarAccess.getUnitAccess().getGroup(), "rule__Unit__Group__0");
+			builder.put(grammarAccess.getVarAccess().getGroup(), "rule__Var__Group__0");
+			builder.put(grammarAccess.getDefAccess().getGroup(), "rule__Def__Group__0");
+			builder.put(grammarAccess.getDefAccess().getGroup_4(), "rule__Def__Group_4__0");
+			builder.put(grammarAccess.getUnitAccess().getVarsAssignment_0(), "rule__Unit__VarsAssignment_0");
+			builder.put(grammarAccess.getUnitAccess().getDefsAssignment_1(), "rule__Unit__DefsAssignment_1");
+			builder.put(grammarAccess.getVarAccess().getNameAssignment_1(), "rule__Var__NameAssignment_1");
+			builder.put(grammarAccess.getDefAccess().getNameAssignment_1(), "rule__Def__NameAssignment_1");
+			builder.put(grammarAccess.getDefAccess().getParamsAssignment_3(), "rule__Def__ParamsAssignment_3");
+			builder.put(grammarAccess.getDefAccess().getParamsAssignment_4_1(), "rule__Def__ParamsAssignment_4_1");
+		}
+	}
+	
+	@Inject
+	private NameMappings nameMappings;
+
 	@Inject
 	private FooGrammarAccess grammarAccess;
 
-	private Map<AbstractElement, String> nameMappings;
-
 	@Override
 	protected InternalFooParser createParser() {
 		InternalFooParser result = new InternalFooParser(null);
@@ -27,26 +59,9 @@
 
 	@Override
 	protected String getRuleName(AbstractElement element) {
-		if (nameMappings == null) {
-			nameMappings = new HashMap<AbstractElement, String>() {
-				private static final long serialVersionUID = 1L;
-				{
-					put(grammarAccess.getUnitAccess().getGroup(), "rule__Unit__Group__0");
-					put(grammarAccess.getVarAccess().getGroup(), "rule__Var__Group__0");
-					put(grammarAccess.getDefAccess().getGroup(), "rule__Def__Group__0");
-					put(grammarAccess.getDefAccess().getGroup_4(), "rule__Def__Group_4__0");
-					put(grammarAccess.getUnitAccess().getVarsAssignment_0(), "rule__Unit__VarsAssignment_0");
-					put(grammarAccess.getUnitAccess().getDefsAssignment_1(), "rule__Unit__DefsAssignment_1");
-					put(grammarAccess.getVarAccess().getNameAssignment_1(), "rule__Var__NameAssignment_1");
-					put(grammarAccess.getDefAccess().getNameAssignment_1(), "rule__Def__NameAssignment_1");
-					put(grammarAccess.getDefAccess().getParamsAssignment_3(), "rule__Def__ParamsAssignment_3");
-					put(grammarAccess.getDefAccess().getParamsAssignment_4_1(), "rule__Def__ParamsAssignment_4_1");
-				}
-			};
-		}
-		return nameMappings.get(element);
+		return nameMappings.getRuleName(element);
 	}
-			
+
 	@Override
 	protected String[] getInitialHiddenTokens() {
 		return new String[] { "RULE_WS", "RULE_ML_COMMENT", "RULE_SL_COMMENT" };
@@ -59,4 +74,12 @@
 	public void setGrammarAccess(FooGrammarAccess grammarAccess) {
 		this.grammarAccess = grammarAccess;
 	}
+	
+	public NameMappings getNameMappings() {
+		return nameMappings;
+	}
+	
+	public void setNameMappings(NameMappings nameMappings) {
+		this.nameMappings = nameMappings;
+	}
 }
diff --git a/org.eclipse.handly.examples.basic.ui/META-INF/MANIFEST.MF b/org.eclipse.handly.examples.basic.ui/META-INF/MANIFEST.MF
index 96a1677..addd1a3 100644
--- a/org.eclipse.handly.examples.basic.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.handly.examples.basic.ui/META-INF/MANIFEST.MF
@@ -18,7 +18,7 @@
  org.eclipse.xtext.ui.shared,
  org.eclipse.ui,
  org.eclipse.ui.editors;bundle-version="3.11.0",
- org.eclipse.ui.ide;bundle-version="3.13.0",
+ org.eclipse.ui.ide;bundle-version="3.14.0",
  org.eclipse.ui.navigator;bundle-version="3.7.0"
 Import-Package: org.apache.log4j
 Export-Package: org.eclipse.handly.examples.basic.ui.model
diff --git a/org.eclipse.handly.examples.basic.ui/plugin.xml_gen b/org.eclipse.handly.examples.basic.ui/plugin.xml_gen
index 3df8c34..9707855 100644
--- a/org.eclipse.handly.examples.basic.ui/plugin.xml_gen
+++ b/org.eclipse.handly.examples.basic.ui/plugin.xml_gen
@@ -204,6 +204,15 @@
 			</activeWhen>
 		</handler>
 	</extension>
+	<extension point="org.eclipse.core.contenttype.contentTypes">
+		<content-type
+			base-type="org.eclipse.core.runtime.text"
+			file-extensions="foo"
+			id="org.eclipse.handly.examples.basic.Foo.contenttype"
+			name="Foo File"
+			priority="normal">
+		</content-type>
+	</extension>
 	<!-- adding resource factories -->
 	<extension
 		point="org.eclipse.emf.ecore.extension_parser">
diff --git a/org.eclipse.handly.examples.basic.ui/src-gen/org/eclipse/handly/examples/basic/ui/FooExecutableExtensionFactory.java b/org.eclipse.handly.examples.basic.ui/src-gen/org/eclipse/handly/examples/basic/ui/FooExecutableExtensionFactory.java
index b3295e6..e8ce94e 100644
--- a/org.eclipse.handly.examples.basic.ui/src-gen/org/eclipse/handly/examples/basic/ui/FooExecutableExtensionFactory.java
+++ b/org.eclipse.handly.examples.basic.ui/src-gen/org/eclipse/handly/examples/basic/ui/FooExecutableExtensionFactory.java
@@ -4,6 +4,7 @@
 package org.eclipse.handly.examples.basic.ui;
 
 import com.google.inject.Injector;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.handly.examples.basic.ui.internal.BasicActivator;
 import org.eclipse.xtext.ui.guice.AbstractGuiceAwareExecutableExtensionFactory;
 import org.osgi.framework.Bundle;
@@ -16,12 +17,13 @@
 
 	@Override
 	protected Bundle getBundle() {
-		return BasicActivator.getInstance().getBundle();
+		return Platform.getBundle(BasicActivator.PLUGIN_ID);
 	}
 	
 	@Override
 	protected Injector getInjector() {
-		return BasicActivator.getInstance().getInjector(BasicActivator.ORG_ECLIPSE_HANDLY_EXAMPLES_BASIC_FOO);
+		BasicActivator activator = BasicActivator.getInstance();
+		return activator != null ? activator.getInjector(BasicActivator.ORG_ECLIPSE_HANDLY_EXAMPLES_BASIC_FOO) : null;
 	}
-	
+
 }
diff --git a/org.eclipse.handly.examples.basic.ui/src-gen/org/eclipse/handly/examples/basic/ui/internal/BasicActivator.java b/org.eclipse.handly.examples.basic.ui/src-gen/org/eclipse/handly/examples/basic/ui/internal/BasicActivator.java
index 9122f27..a5c8389 100644
--- a/org.eclipse.handly.examples.basic.ui/src-gen/org/eclipse/handly/examples/basic/ui/internal/BasicActivator.java
+++ b/org.eclipse.handly.examples.basic.ui/src-gen/org/eclipse/handly/examples/basic/ui/internal/BasicActivator.java
@@ -6,7 +6,6 @@
 import com.google.common.collect.Maps;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import com.google.inject.Module;
 import java.util.Collections;
 import java.util.Map;
 import org.apache.log4j.Logger;
@@ -23,6 +22,7 @@
  */
 public class BasicActivator extends AbstractUIPlugin {
 
+	public static final String PLUGIN_ID = "org.eclipse.handly.examples.basic.ui";
 	public static final String ORG_ECLIPSE_HANDLY_EXAMPLES_BASIC_FOO = "org.eclipse.handly.examples.basic.Foo";
 	
 	private static final Logger logger = Logger.getLogger(BasicActivator.class);
@@ -60,10 +60,10 @@
 	
 	protected Injector createInjector(String language) {
 		try {
-			Module runtimeModule = getRuntimeModule(language);
-			Module sharedStateModule = getSharedStateModule();
-			Module uiModule = getUiModule(language);
-			Module mergedModule = Modules2.mixin(runtimeModule, sharedStateModule, uiModule);
+			com.google.inject.Module runtimeModule = getRuntimeModule(language);
+			com.google.inject.Module sharedStateModule = getSharedStateModule();
+			com.google.inject.Module uiModule = getUiModule(language);
+			com.google.inject.Module mergedModule = Modules2.mixin(runtimeModule, sharedStateModule, uiModule);
 			return Guice.createInjector(mergedModule);
 		} catch (Exception e) {
 			logger.error("Failed to create injector for " + language);
@@ -72,22 +72,23 @@
 		}
 	}
 	
-	protected Module getRuntimeModule(String grammar) {
+	protected com.google.inject.Module getRuntimeModule(String grammar) {
 		if (ORG_ECLIPSE_HANDLY_EXAMPLES_BASIC_FOO.equals(grammar)) {
 			return new FooRuntimeModule();
 		}
 		throw new IllegalArgumentException(grammar);
 	}
 	
-	protected Module getUiModule(String grammar) {
+	protected com.google.inject.Module getUiModule(String grammar) {
 		if (ORG_ECLIPSE_HANDLY_EXAMPLES_BASIC_FOO.equals(grammar)) {
 			return new FooUiModule(this);
 		}
 		throw new IllegalArgumentException(grammar);
 	}
 	
-	protected Module getSharedStateModule() {
+	protected com.google.inject.Module getSharedStateModule() {
 		return new SharedStateModule();
 	}
 	
+	
 }
diff --git a/org.eclipse.handly.examples.basic/META-INF/MANIFEST.MF b/org.eclipse.handly.examples.basic/META-INF/MANIFEST.MF
index 41fd2fb..f435755 100644
--- a/org.eclipse.handly.examples.basic/META-INF/MANIFEST.MF
+++ b/org.eclipse.handly.examples.basic/META-INF/MANIFEST.MF
@@ -17,9 +17,9 @@
  org.eclipse.xtext.util,
  org.eclipse.emf.ecore,
  org.eclipse.emf.common,
- org.antlr.runtime,
+ org.antlr.runtime;bundle-version="[3.2.0,3.2.1)",
  org.eclipse.equinox.common;resolution:=optional,
- org.eclipse.xtext.xbase.lib
+ org.eclipse.xtext.xbase.lib;bundle-version="2.14.0"
 Import-Package: org.apache.log4j
 Export-Package: org.eclipse.handly.examples.basic,
  org.eclipse.handly.examples.basic.foo,
diff --git a/org.eclipse.handly.examples.basic/model/generated/Foo.genmodel b/org.eclipse.handly.examples.basic/model/generated/Foo.genmodel
index 3ddd7cd..bdfac00 100644
--- a/org.eclipse.handly.examples.basic/model/generated/Foo.genmodel
+++ b/org.eclipse.handly.examples.basic/model/generated/Foo.genmodel
@@ -3,7 +3,7 @@
     xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" copyrightText="generated by Xtext" modelDirectory="/org.eclipse.handly.examples.basic/src-gen"
     modelPluginID="org.eclipse.handly.examples.basic" forceOverwrite="true" modelName="Foo"
     updateClasspath="false" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
-    complianceLevel="6.0" copyrightFields="false" runtimeVersion="2.13">
+    complianceLevel="6.0" copyrightFields="false" runtimeVersion="2.16">
   <genPackages prefix="Foo" basePackage="org.eclipse.handly.examples.basic" disposableProviderFactory="true"
       fileExtensions="foo" ecorePackage="Foo.ecore#/">
     <genClasses ecoreClass="Foo.ecore#//Unit">
diff --git a/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/impl/DefImpl.java b/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/impl/DefImpl.java
index e4b3878..957595e 100644
--- a/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/impl/DefImpl.java
+++ b/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/impl/DefImpl.java
@@ -91,6 +91,7 @@
    * <!-- end-user-doc -->
    * @generated
    */
+  @Override
   public String getName()
   {
     return name;
@@ -101,6 +102,7 @@
    * <!-- end-user-doc -->
    * @generated
    */
+  @Override
   public void setName(String newName)
   {
     String oldName = name;
@@ -114,6 +116,7 @@
    * <!-- end-user-doc -->
    * @generated
    */
+  @Override
   public EList<String> getParams()
   {
     if (params == null)
@@ -211,7 +214,7 @@
   {
     if (eIsProxy()) return super.toString();
 
-    StringBuffer result = new StringBuffer(super.toString());
+    StringBuilder result = new StringBuilder(super.toString());
     result.append(" (name: ");
     result.append(name);
     result.append(", params: ");
diff --git a/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/impl/FooFactoryImpl.java b/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/impl/FooFactoryImpl.java
index 750c7a4..dbc8ef3 100644
--- a/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/impl/FooFactoryImpl.java
+++ b/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/impl/FooFactoryImpl.java
@@ -78,6 +78,7 @@
    * <!-- end-user-doc -->
    * @generated
    */
+  @Override
   public Unit createUnit()
   {
     UnitImpl unit = new UnitImpl();
@@ -89,6 +90,7 @@
    * <!-- end-user-doc -->
    * @generated
    */
+  @Override
   public Var createVar()
   {
     VarImpl var = new VarImpl();
@@ -100,6 +102,7 @@
    * <!-- end-user-doc -->
    * @generated
    */
+  @Override
   public Def createDef()
   {
     DefImpl def = new DefImpl();
@@ -111,6 +114,7 @@
    * <!-- end-user-doc -->
    * @generated
    */
+  @Override
   public FooPackage getFooPackage()
   {
     return (FooPackage)getEPackage();
diff --git a/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/impl/FooPackageImpl.java b/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/impl/FooPackageImpl.java
index cddfd44..3243872 100644
--- a/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/impl/FooPackageImpl.java
+++ b/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/impl/FooPackageImpl.java
@@ -74,7 +74,7 @@
 
   /**
    * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
-   * 
+   *
    * <p>This method is used to initialize {@link FooPackage#eINSTANCE} when that field is accessed.
    * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
    * <!-- begin-user-doc -->
@@ -89,7 +89,8 @@
     if (isInited) return (FooPackage)EPackage.Registry.INSTANCE.getEPackage(FooPackage.eNS_URI);
 
     // Obtain or create and register package
-    FooPackageImpl theFooPackage = (FooPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof FooPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new FooPackageImpl());
+    Object registeredFooPackage = EPackage.Registry.INSTANCE.get(eNS_URI);
+    FooPackageImpl theFooPackage = registeredFooPackage instanceof FooPackageImpl ? (FooPackageImpl)registeredFooPackage : new FooPackageImpl();
 
     isInited = true;
 
@@ -102,7 +103,6 @@
     // Mark meta-data to indicate it can't be changed
     theFooPackage.freeze();
 
-  
     // Update the registry and return the package
     EPackage.Registry.INSTANCE.put(FooPackage.eNS_URI, theFooPackage);
     return theFooPackage;
@@ -113,6 +113,7 @@
    * <!-- end-user-doc -->
    * @generated
    */
+  @Override
   public EClass getUnit()
   {
     return unitEClass;
@@ -123,6 +124,7 @@
    * <!-- end-user-doc -->
    * @generated
    */
+  @Override
   public EReference getUnit_Vars()
   {
     return (EReference)unitEClass.getEStructuralFeatures().get(0);
@@ -133,6 +135,7 @@
    * <!-- end-user-doc -->
    * @generated
    */
+  @Override
   public EReference getUnit_Defs()
   {
     return (EReference)unitEClass.getEStructuralFeatures().get(1);
@@ -143,6 +146,7 @@
    * <!-- end-user-doc -->
    * @generated
    */
+  @Override
   public EClass getVar()
   {
     return varEClass;
@@ -153,6 +157,7 @@
    * <!-- end-user-doc -->
    * @generated
    */
+  @Override
   public EAttribute getVar_Name()
   {
     return (EAttribute)varEClass.getEStructuralFeatures().get(0);
@@ -163,6 +168,7 @@
    * <!-- end-user-doc -->
    * @generated
    */
+  @Override
   public EClass getDef()
   {
     return defEClass;
@@ -173,6 +179,7 @@
    * <!-- end-user-doc -->
    * @generated
    */
+  @Override
   public EAttribute getDef_Name()
   {
     return (EAttribute)defEClass.getEStructuralFeatures().get(0);
@@ -183,6 +190,7 @@
    * <!-- end-user-doc -->
    * @generated
    */
+  @Override
   public EAttribute getDef_Params()
   {
     return (EAttribute)defEClass.getEStructuralFeatures().get(1);
@@ -193,6 +201,7 @@
    * <!-- end-user-doc -->
    * @generated
    */
+  @Override
   public FooFactory getFooFactory()
   {
     return (FooFactory)getEFactoryInstance();
diff --git a/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/impl/UnitImpl.java b/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/impl/UnitImpl.java
index d4ce35f..cab8880 100644
--- a/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/impl/UnitImpl.java
+++ b/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/impl/UnitImpl.java
@@ -84,6 +84,7 @@
    * <!-- end-user-doc -->
    * @generated
    */
+  @Override
   public EList<Var> getVars()
   {
     if (vars == null)
@@ -98,6 +99,7 @@
    * <!-- end-user-doc -->
    * @generated
    */
+  @Override
   public EList<Def> getDefs()
   {
     if (defs == null)
diff --git a/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/impl/VarImpl.java b/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/impl/VarImpl.java
index 6fc5099..e9de2e1 100644
--- a/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/impl/VarImpl.java
+++ b/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/impl/VarImpl.java
@@ -74,6 +74,7 @@
    * <!-- end-user-doc -->
    * @generated
    */
+  @Override
   public String getName()
   {
     return name;
@@ -84,6 +85,7 @@
    * <!-- end-user-doc -->
    * @generated
    */
+  @Override
   public void setName(String newName)
   {
     String oldName = name;
@@ -168,7 +170,7 @@
   {
     if (eIsProxy()) return super.toString();
 
-    StringBuffer result = new StringBuffer(super.toString());
+    StringBuilder result = new StringBuilder(super.toString());
     result.append(" (name: ");
     result.append(name);
     result.append(')');
diff --git a/org.eclipse.handly.examples.jmodel.tests/src/org/eclipse/handly/internal/examples/jmodel/WorkingCopyTest.java b/org.eclipse.handly.examples.jmodel.tests/src/org/eclipse/handly/internal/examples/jmodel/WorkingCopyTest.java
index 7d92bba..826d2af 100644
--- a/org.eclipse.handly.examples.jmodel.tests/src/org/eclipse/handly/internal/examples/jmodel/WorkingCopyTest.java
+++ b/org.eclipse.handly.examples.jmodel.tests/src/org/eclipse/handly/internal/examples/jmodel/WorkingCopyTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2015, 2017 1C-Soft LLC.
+ * Copyright (c) 2015, 2020 1C-Soft LLC.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -52,7 +52,7 @@
 public class WorkingCopyTest
     extends WorkspaceTestCase
 {
-    private static final int AST_LEVEL = AST.JLS8;
+    private static final int AST_LEVEL = AST.JLS11;
 
     private CompilationUnit workingCopy;
     private List<IProblem> problems;
diff --git a/org.eclipse.handly.examples.jmodel/src/org/eclipse/handly/internal/examples/jmodel/CompilationUnit.java b/org.eclipse.handly.examples.jmodel/src/org/eclipse/handly/internal/examples/jmodel/CompilationUnit.java
index 365be05..c0ba414 100644
--- a/org.eclipse.handly.examples.jmodel/src/org/eclipse/handly/internal/examples/jmodel/CompilationUnit.java
+++ b/org.eclipse.handly.examples.jmodel/src/org/eclipse/handly/internal/examples/jmodel/CompilationUnit.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2015, 2017 1C-Soft LLC.
+ * Copyright (c) 2015, 2020 1C-Soft LLC.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -242,7 +242,7 @@
 
     static final Property<Integer> AST_LEVEL = Property.get(
         CompilationUnit.class.getName() + ".astLevel", //$NON-NLS-1$
-        Integer.class).withDefault(AST.JLS8);
+        Integer.class).withDefault(AST.JLS11);
     static final Property<Boolean> STRUCTURAL_AST = Property.get(
         CompilationUnit.class.getName() + ".structuralAst", //$NON-NLS-1$
         Boolean.class).withDefault(true);
diff --git a/org.eclipse.handly.examples/META-INF/MANIFEST.MF b/org.eclipse.handly.examples/META-INF/MANIFEST.MF
index 814d4f6..9862c06 100644
--- a/org.eclipse.handly.examples/META-INF/MANIFEST.MF
+++ b/org.eclipse.handly.examples/META-INF/MANIFEST.MF
@@ -6,6 +6,6 @@
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Require-Bundle: org.eclipse.emf.common.ui;bundle-version="[2.12.0,3.0.0)",
+Require-Bundle: org.eclipse.emf.common.ui;bundle-version="[2.15.0,3.0.0)",
  org.eclipse.core.resources,
  org.eclipse.ui.ide
diff --git a/org.eclipse.handly.ui/META-INF/MANIFEST.MF b/org.eclipse.handly.ui/META-INF/MANIFEST.MF
index b7cd680..2b258e8 100644
--- a/org.eclipse.handly.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.handly.ui/META-INF/MANIFEST.MF
@@ -9,17 +9,17 @@
 Bundle-Activator: org.eclipse.handly.internal.ui.Activator
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.13.0,4.0.0)",
- org.eclipse.core.resources;bundle-version="[3.12.0,4.0.0)",
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.15.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.13.0,4.0.0)",
  org.eclipse.handly;bundle-version="[1.5.0,2.0.0)",
  org.eclipse.search;bundle-version="[3.11.0,4.0.0)",
- org.eclipse.text;bundle-version="[3.6.0,4.0.0)",
- org.eclipse.jface.text;bundle-version="[3.12.0,4.0.0)",
- org.eclipse.ui;bundle-version="[3.109.0,4.0.0)",
+ org.eclipse.text;bundle-version="[3.8.0,4.0.0)",
+ org.eclipse.jface.text;bundle-version="[3.15.0,4.0.0)",
+ org.eclipse.ui;bundle-version="[3.111.0,4.0.0)",
  org.eclipse.ui.editors;bundle-version="[3.11.0,4.0.0)",
- org.eclipse.ui.workbench.texteditor;bundle-version="[3.10.0,4.0.0)",
+ org.eclipse.ui.workbench.texteditor;bundle-version="[3.11.0,4.0.0)",
  org.eclipse.ui.views;bundle-version="[3.9.0,4.0.0)",
- org.eclipse.ui.ide;bundle-version="[3.13.0,4.0.0)",
+ org.eclipse.ui.ide;bundle-version="[3.14.0,4.0.0)",
  org.eclipse.ui.navigator;bundle-version="[3.7.0,4.0.0)";resolution:=optional
 Export-Package: org.eclipse.handly.ui,
  org.eclipse.handly.ui.action,
diff --git a/org.eclipse.handly.xtext-feature/feature.xml b/org.eclipse.handly.xtext-feature/feature.xml
index 6547c41..25ea973 100644
--- a/org.eclipse.handly.xtext-feature/feature.xml
+++ b/org.eclipse.handly.xtext-feature/feature.xml
@@ -34,7 +34,7 @@
 
    <requires>
       <import feature="org.eclipse.handly" version="1.5.0" match="equivalent"/>
-      <import feature="org.eclipse.xtext.ui" version="2.12.0" match="compatible"/>
+      <import feature="org.eclipse.xtext.ui" version="2.16.0" match="compatible"/>
    </requires>
 
    <plugin
diff --git a/org.eclipse.handly.xtext.ui/META-INF/MANIFEST.MF b/org.eclipse.handly.xtext.ui/META-INF/MANIFEST.MF
index 87ac4cf..6cf3772 100644
--- a/org.eclipse.handly.xtext.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.handly.xtext.ui/META-INF/MANIFEST.MF
@@ -9,12 +9,12 @@
 Bundle-Activator: org.eclipse.handly.internal.xtext.ui.Activator
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.13.0,4.0.0)",
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.15.0,4.0.0)",
  org.eclipse.handly;bundle-version="[1.5.0,2.0.0)",
  org.eclipse.handly.ui;bundle-version="[1.5.0,2.0.0)",
- org.eclipse.xtext.ui;bundle-version="[2.12.0,2.24.0)",
- org.eclipse.xtext.common.types;bundle-version="[2.12.0,2.24.0)";resolution:=optional,
- org.eclipse.ui.ide;bundle-version="[3.13.0,4.0.0)"
+ org.eclipse.xtext.ui;bundle-version="[2.16.0,2.24.0)",
+ org.eclipse.xtext.common.types;bundle-version="[2.16.0,2.24.0)";resolution:=optional,
+ org.eclipse.ui.ide;bundle-version="[3.14.0,4.0.0)"
 Import-Package: org.apache.log4j;version="[1.2.15,2.0.0)"
 Export-Package: org.eclipse.handly.xtext.ui.callhierarchy,
  org.eclipse.handly.xtext.ui.editor,
diff --git a/org.eclipse.handly/META-INF/MANIFEST.MF b/org.eclipse.handly/META-INF/MANIFEST.MF
index 72e4732..2eef885 100644
--- a/org.eclipse.handly/META-INF/MANIFEST.MF
+++ b/org.eclipse.handly/META-INF/MANIFEST.MF
@@ -9,13 +9,13 @@
 Bundle-Activator: org.eclipse.handly.internal.Activator
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.13.0,4.0.0)",
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.15.0,4.0.0)",
  org.eclipse.core.filebuffers;bundle-version="[3.6.0,4.0.0)",
  org.eclipse.core.filesystem;bundle-version="[1.7.0,2.0.0)",
- org.eclipse.text;bundle-version="[3.6.0,4.0.0)",
- org.eclipse.core.resources;bundle-version="[3.12.0,4.0.0)";resolution:=optional,
- org.eclipse.ltk.core.refactoring;bundle-version="[3.8.0,4.0.0)";resolution:=optional,
- org.eclipse.ui;bundle-version="[3.109.0,4.0.0)";resolution:=optional
+ org.eclipse.text;bundle-version="[3.8.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.13.0,4.0.0)";resolution:=optional,
+ org.eclipse.ltk.core.refactoring;bundle-version="[3.9.0,4.0.0)";resolution:=optional,
+ org.eclipse.ui;bundle-version="[3.111.0,4.0.0)";resolution:=optional
 Export-Package: org.eclipse.handly,
  org.eclipse.handly.buffer,
  org.eclipse.handly.context,
diff --git a/targets/base/base.target b/targets/base/base.target
index bc69ed8..9be8721 100644
--- a/targets/base/base.target
+++ b/targets/base/base.target
@@ -15,8 +15,8 @@
 <target name="Base Platform">
 <!--
    Currently, the Base Platform includes:
-   * Eclipse Project SDK 4.7.1 (Oxygen.1)
-   * Xtext SDK 2.12 and dependencies
+   * Eclipse Project SDK 4.10 (2018-12)
+   * Xtext SDK 2.16 and dependencies
 -->
 <locations>
 <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
@@ -24,7 +24,7 @@
 <unit id="org.eclipse.license.feature.group" version="0.0.0"/>
 </location>
 <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
-<repository location="http://download.eclipse.org/releases/oxygen/201709271000"/>
+<repository location="http://download.eclipse.org/releases/2018-12/201812191000"/>
 <unit id="org.eclipse.sdk.feature.group" version="0.0.0"/>
 <unit id="org.eclipse.draw2d" version="0.0.0"/>
 <unit id="org.eclipse.ecf" version="0.0.0"/>
diff --git a/tools/base.p2f b/tools/base.p2f
index e2ecc95..ab3a20e 100644
--- a/tools/base.p2f
+++ b/tools/base.p2f
@@ -2,39 +2,39 @@
 <?p2f version='1.0.0'?>
 <p2f version='1.0.0'>
   <ius size='7'>
-    <iu id='org.eclipse.sdk.ide' version='4.14.0.I20191210-0610'>
+    <iu id='org.eclipse.sdk.ide' version='4.16.0.I20200604-0540'>
       <repositories size='1'>
-        <repository location='http://download.eclipse.org/releases/2019-12'/>
+        <repository location='http://download.eclipse.org/releases/2020-06/'/>
       </repositories>
     </iu>
-    <iu id='org.eclipse.egit.feature.group' version='5.6.0.201912101111-r'>
+    <iu id='org.eclipse.egit.feature.group' version='5.8.0.202006091008-r'>
       <repositories size='1'>
-        <repository location='http://download.eclipse.org/releases/2019-12'/>
+        <repository location='http://download.eclipse.org/releases/2020-06/'/>
       </repositories>
     </iu>
-    <iu id='org.eclipse.m2e.feature.feature.group' version='1.14.0.20191209-1925'>
+    <iu id='org.eclipse.m2e.feature.feature.group' version='1.16.0.20200610-1735'>
       <repositories size='1'>
-        <repository location='http://download.eclipse.org/releases/2019-12'/>
+        <repository location='http://download.eclipse.org/releases/2020-06/'/>
       </repositories>
     </iu>
-    <iu id='org.eclipse.xtext.sdk.feature.group' version='2.12.0.v20170519-1412'>
+    <iu id='org.eclipse.xtext.sdk.feature.group' version='2.16.0.v20181203-1555'>
       <repositories size='1'>
-        <repository location='http://download.eclipse.org/releases/oxygen'/>
+        <repository location='http://download.eclipse.org/releases/2018-12'/>
       </repositories>
     </iu>
     <iu id='org.eclipse.emf.mwe.sdk.feature.group' version='1.3.21.201705291011'>
       <repositories size='1'>
-        <repository location='http://download.eclipse.org/releases/oxygen'/>
+        <repository location='http://download.eclipse.org/releases/2018-12'/>
       </repositories>
     </iu>
     <iu id='org.eclipse.emf.mwe2.language.sdk.feature.group' version='2.9.1.201705291011'>
       <repositories size='1'>
-        <repository location='http://download.eclipse.org/releases/oxygen'/>
+        <repository location='http://download.eclipse.org/releases/2018-12'/>
       </repositories>
     </iu>
-    <iu id='org.eclipse.emf.sdk.feature.group' version='2.20.0.v20191028-0905'>
+    <iu id='org.eclipse.emf.sdk.feature.group' version='2.22.0.v20200519-1135'>
       <repositories size='1'>
-        <repository location='http://download.eclipse.org/releases/2019-12'/>
+        <repository location='http://download.eclipse.org/releases/2020-06/'/>
       </repositories>
     </iu>
   </ius>