Bug 580463 - Upgrade base target to Eclipse 2021-06 and Xtext 2.25
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 b273956..0dc0c2a 100644
--- a/org.eclipse.handly.examples.basic.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.handly.examples.basic.ui/META-INF/MANIFEST.MF
@@ -17,8 +17,8 @@
  org.eclipse.xtext.ui,
  org.eclipse.xtext.ui.shared,
  org.eclipse.ui,
- org.eclipse.ui.editors;bundle-version="3.11.0",
- org.eclipse.ui.ide;bundle-version="3.14.0",
- org.eclipse.ui.navigator;bundle-version="3.7.0"
+ org.eclipse.ui.editors;bundle-version="3.14.0",
+ org.eclipse.ui.ide;bundle-version="3.18.0",
+ org.eclipse.ui.navigator;bundle-version="3.10.0"
 Import-Package: org.apache.log4j;version="[1.2.15,2.0.0)"
 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 9707855..81ad6ad 100644
--- a/org.eclipse.handly.examples.basic.ui/plugin.xml_gen
+++ b/org.eclipse.handly.examples.basic.ui/plugin.xml_gen
@@ -26,11 +26,11 @@
 		<handler
 			class="org.eclipse.handly.examples.basic.ui.FooExecutableExtensionFactory:org.eclipse.xtext.ui.editor.handler.ValidateActionHandler"
 			commandId="org.eclipse.handly.examples.basic.Foo.validate">
-		<activeWhen>
-			<reference
+			<activeWhen>
+				<reference
 					definitionId="org.eclipse.handly.examples.basic.Foo.Editor.opened">
-			</reference>
-		</activeWhen>
+				</reference>
+			</activeWhen>
 		</handler>
 		<!-- copy qualified name -->
 		<handler
@@ -119,38 +119,38 @@
 	</extension>
 	<extension
 		point="org.eclipse.ui.commands">
-	<command
+		<command
 			description="Trigger expensive validation"
 			id="org.eclipse.handly.examples.basic.Foo.validate"
 			name="Validate">
-	</command>
-	<!-- copy qualified name -->
-	<command
+		</command>
+		<!-- copy qualified name -->
+		<command
 			id="org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedName"
 			categoryId="org.eclipse.ui.category.edit"
 			description="Copy the qualified name for the selected element"
 			name="Copy Qualified Name">
-	</command>
-	<command
+		</command>
+		<command
 			id="org.eclipse.xtext.ui.editor.copyqualifiedname.OutlineCopyQualifiedName"
 			categoryId="org.eclipse.ui.category.edit"
 			description="Copy the qualified name for the selected element"
 			name="Copy Qualified Name">
-	</command>
+		</command>
 	</extension>
 	<extension point="org.eclipse.ui.menus">
 		<menuContribution
 			locationURI="popup:#TextEditorContext?after=group.edit">
-			 <command
-				 commandId="org.eclipse.handly.examples.basic.Foo.validate"
-				 style="push"
-				 tooltip="Trigger expensive validation">
-			<visibleWhen checkEnabled="false">
-				<reference
-					definitionId="org.eclipse.handly.examples.basic.Foo.Editor.opened">
-				</reference>
-			</visibleWhen>
-		</command>
+			<command
+				commandId="org.eclipse.handly.examples.basic.Foo.validate"
+				style="push"
+				tooltip="Trigger expensive validation">
+				<visibleWhen checkEnabled="false">
+					<reference
+						definitionId="org.eclipse.handly.examples.basic.Foo.Editor.opened">
+					</reference>
+				</visibleWhen>
+			</command>
 		</menuContribution>
 		<!-- copy qualified name -->
 		<menuContribution locationURI="popup:#TextEditorContext?after=copy">
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 e8ce94e..d6cd03a 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,10 +4,10 @@
 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;
+import org.osgi.framework.FrameworkUtil;
 
 /**
  * This class was generated. Customizations should only happen in a newly
@@ -17,7 +17,7 @@
 
 	@Override
 	protected Bundle getBundle() {
-		return Platform.getBundle(BasicActivator.PLUGIN_ID);
+		return FrameworkUtil.getBundle(BasicActivator.class);
 	}
 	
 	@Override
diff --git a/org.eclipse.handly.examples.basic/META-INF/MANIFEST.MF b/org.eclipse.handly.examples.basic/META-INF/MANIFEST.MF
index 46448e7..834fb58 100644
--- a/org.eclipse.handly.examples.basic/META-INF/MANIFEST.MF
+++ b/org.eclipse.handly.examples.basic/META-INF/MANIFEST.MF
@@ -10,7 +10,7 @@
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.xtext;visibility:=reexport,
  org.eclipse.xtext.generator;resolution:=optional,
- org.apache.commons.logging;bundle-version="1.0.4";resolution:=optional,
+ org.apache.commons.logging;bundle-version="1.2.0";resolution:=optional,
  org.eclipse.emf.codegen.ecore;resolution:=optional,
  org.eclipse.emf.mwe.utils;resolution:=optional,
  org.eclipse.emf.mwe2.launch;resolution:=optional,
@@ -19,8 +19,8 @@
  org.eclipse.emf.common,
  org.antlr.runtime;bundle-version="[3.2.0,3.2.1)",
  org.eclipse.equinox.common;resolution:=optional,
- org.eclipse.xtext.xbase.lib;bundle-version="2.14.0",
- org.objectweb.asm;bundle-version="5.0.1";resolution:=optional
+ org.eclipse.xtext.xbase.lib;bundle-version="2.25.0",
+ org.objectweb.asm;bundle-version="9.1.0";resolution:=optional
 Import-Package: org.apache.log4j;version="[1.2.15,2.0.0)";resolution:=optional
 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 bdfac00..ab9de12 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.16">
+    complianceLevel="8.0" copyrightFields="false" runtimeVersion="2.20">
   <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/plugin.xml_gen b/org.eclipse.handly.examples.basic/plugin.xml_gen
index fecf488..1e2827b 100644
--- a/org.eclipse.handly.examples.basic/plugin.xml_gen
+++ b/org.eclipse.handly.examples.basic/plugin.xml_gen
@@ -2,7 +2,7 @@
 <?eclipse version="3.0"?>
 <plugin>
 	<extension point="org.eclipse.emf.ecore.generated_package">
-		<package 
+		<package
 			uri = "http://www.eclipse.org/handly/examples/basic/Foo"
 			class = "org.eclipse.handly.examples.basic.foo.FooPackage"
 			genModel = "model/generated/Foo.genmodel" />
diff --git a/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/Def.java b/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/Def.java
index 5af3041..9e92617 100644
--- a/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/Def.java
+++ b/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/Def.java
@@ -29,10 +29,6 @@
   /**
    * Returns the value of the '<em><b>Name</b></em>' attribute.
    * <!-- begin-user-doc -->
-   * <p>
-   * If the meaning of the '<em>Name</em>' attribute isn't clear,
-   * there really should be more of a description here...
-   * </p>
    * <!-- end-user-doc -->
    * @return the value of the '<em>Name</em>' attribute.
    * @see #setName(String)
@@ -56,10 +52,6 @@
    * Returns the value of the '<em><b>Params</b></em>' attribute list.
    * The list contents are of type {@link java.lang.String}.
    * <!-- begin-user-doc -->
-   * <p>
-   * If the meaning of the '<em>Params</em>' attribute list isn't clear,
-   * there really should be more of a description here...
-   * </p>
    * <!-- end-user-doc -->
    * @return the value of the '<em>Params</em>' attribute list.
    * @see org.eclipse.handly.examples.basic.foo.FooPackage#getDef_Params()
diff --git a/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/Unit.java b/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/Unit.java
index 0fe6cb6..2bec183 100644
--- a/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/Unit.java
+++ b/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/Unit.java
@@ -30,10 +30,6 @@
    * Returns the value of the '<em><b>Vars</b></em>' containment reference list.
    * The list contents are of type {@link org.eclipse.handly.examples.basic.foo.Var}.
    * <!-- begin-user-doc -->
-   * <p>
-   * If the meaning of the '<em>Vars</em>' containment reference list isn't clear,
-   * there really should be more of a description here...
-   * </p>
    * <!-- end-user-doc -->
    * @return the value of the '<em>Vars</em>' containment reference list.
    * @see org.eclipse.handly.examples.basic.foo.FooPackage#getUnit_Vars()
@@ -46,10 +42,6 @@
    * Returns the value of the '<em><b>Defs</b></em>' containment reference list.
    * The list contents are of type {@link org.eclipse.handly.examples.basic.foo.Def}.
    * <!-- begin-user-doc -->
-   * <p>
-   * If the meaning of the '<em>Defs</em>' containment reference list isn't clear,
-   * there really should be more of a description here...
-   * </p>
    * <!-- end-user-doc -->
    * @return the value of the '<em>Defs</em>' containment reference list.
    * @see org.eclipse.handly.examples.basic.foo.FooPackage#getUnit_Defs()
diff --git a/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/Var.java b/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/Var.java
index 270b7f9..8277462 100644
--- a/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/Var.java
+++ b/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/foo/Var.java
@@ -26,10 +26,6 @@
   /**
    * Returns the value of the '<em><b>Name</b></em>' attribute.
    * <!-- begin-user-doc -->
-   * <p>
-   * If the meaning of the '<em>Name</em>' attribute isn't clear,
-   * there really should be more of a description here...
-   * </p>
    * <!-- end-user-doc -->
    * @return the value of the '<em>Name</em>' attribute.
    * @see #setName(String)
diff --git a/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/services/FooGrammarAccess.java b/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/services/FooGrammarAccess.java
index 4f3619d..031b7f0 100644
--- a/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/services/FooGrammarAccess.java
+++ b/org.eclipse.handly.examples.basic/src-gen/org/eclipse/handly/examples/basic/services/FooGrammarAccess.java
@@ -15,11 +15,11 @@
 import org.eclipse.xtext.RuleCall;
 import org.eclipse.xtext.TerminalRule;
 import org.eclipse.xtext.common.services.TerminalsGrammarAccess;
-import org.eclipse.xtext.service.AbstractElementFinder.AbstractGrammarElementFinder;
+import org.eclipse.xtext.service.AbstractElementFinder;
 import org.eclipse.xtext.service.GrammarProvider;
 
 @Singleton
-public class FooGrammarAccess extends AbstractGrammarElementFinder {
+public class FooGrammarAccess extends AbstractElementFinder.AbstractGrammarElementFinder {
 	
 	public class UnitElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.handly.examples.basic.Foo.Unit");
@@ -30,20 +30,22 @@
 		private final RuleCall cDefsDefParserRuleCall_1_0 = (RuleCall)cDefsAssignment_1.eContents().get(0);
 		
 		//Unit:
-		//	vars+=Var*
-		//	defs+=Def*;
+		//    vars += Var*
+		//    defs += Def*
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//vars+=Var* defs+=Def*
+		//vars += Var*
+		//defs += Def*
 		public Group getGroup() { return cGroup; }
 		
-		//vars+=Var*
+		//vars += Var*
 		public Assignment getVarsAssignment_0() { return cVarsAssignment_0; }
 		
 		//Var
 		public RuleCall getVarsVarParserRuleCall_0_0() { return cVarsVarParserRuleCall_0_0; }
 		
-		//defs+=Def*
+		//defs += Def*
 		public Assignment getDefsAssignment_1() { return cDefsAssignment_1; }
 		
 		//Def
@@ -58,7 +60,8 @@
 		private final Keyword cSemicolonKeyword_2 = (Keyword)cGroup.eContents().get(2);
 		
 		//Var:
-		//	'var' name=ID ';';
+		//    'var' name=ID ';'
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//'var' name=ID ';'
@@ -94,10 +97,11 @@
 		private final Keyword cRightCurlyBracketKeyword_7 = (Keyword)cGroup.eContents().get(7);
 		
 		//Def:
-		//	'def' name=ID '(' params+=ID? (',' params+=ID)* ')' '{' '}';
+		//    'def' name=ID '(' (params+=ID)? (',' params+=ID)* ')' '{' '}'
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'def' name=ID '(' params+=ID? (',' params+=ID)* ')' '{' '}'
+		//'def' name=ID '(' (params+=ID)? (',' params+=ID)* ')' '{' '}'
 		public Group getGroup() { return cGroup; }
 		
 		//'def'
@@ -112,7 +116,7 @@
 		//'('
 		public Keyword getLeftParenthesisKeyword_2() { return cLeftParenthesisKeyword_2; }
 		
-		//params+=ID?
+		//(params+=ID)?
 		public Assignment getParamsAssignment_3() { return cParamsAssignment_3; }
 		
 		//ID
@@ -187,8 +191,9 @@
 
 	
 	//Unit:
-	//	vars+=Var*
-	//	defs+=Def*;
+	//    vars += Var*
+	//    defs += Def*
+	//;
 	public UnitElements getUnitAccess() {
 		return pUnit;
 	}
@@ -198,7 +203,8 @@
 	}
 	
 	//Var:
-	//	'var' name=ID ';';
+	//    'var' name=ID ';'
+	//;
 	public VarElements getVarAccess() {
 		return pVar;
 	}
@@ -208,7 +214,8 @@
 	}
 	
 	//Def:
-	//	'def' name=ID '(' params+=ID? (',' params+=ID)* ')' '{' '}';
+	//    'def' name=ID '(' (params+=ID)? (',' params+=ID)* ')' '{' '}'
+	//;
 	public DefElements getDefAccess() {
 		return pDef;
 	}
@@ -217,45 +224,40 @@
 		return getDefAccess().getRule();
 	}
 	
-	//terminal ID:
-	//	'^'? ('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')*;
+	//terminal ID: '^'?('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
 	public TerminalRule getIDRule() {
 		return gaTerminals.getIDRule();
 	}
 	
-	//terminal INT returns ecore::EInt:
-	//	'0'..'9'+;
+	//terminal INT returns ecore::EInt: ('0'..'9')+;
 	public TerminalRule getINTRule() {
 		return gaTerminals.getINTRule();
 	}
 	
 	//terminal STRING:
-	//	'"' ('\\' . | !('\\' | '"'))* '"' |
-	//	"'" ('\\' . | !('\\' | "'"))* "'";
+	//            '"' ( '\\' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'\\' */ | !('\\'|'"') )* '"' |
+	//            "'" ( '\\' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'\\' */ | !('\\'|"'") )* "'"
+	//        ;
 	public TerminalRule getSTRINGRule() {
 		return gaTerminals.getSTRINGRule();
 	}
 	
-	//terminal ML_COMMENT:
-	//	'/*'->'*/';
+	//terminal ML_COMMENT : '/*' -> '*/';
 	public TerminalRule getML_COMMENTRule() {
 		return gaTerminals.getML_COMMENTRule();
 	}
 	
-	//terminal SL_COMMENT:
-	//	'//' !('\n' | '\r')* ('\r'? '\n')?;
+	//terminal SL_COMMENT : '//' !('\n'|'\r')* ('\r'? '\n')?;
 	public TerminalRule getSL_COMMENTRule() {
 		return gaTerminals.getSL_COMMENTRule();
 	}
 	
-	//terminal WS:
-	//	' ' | '\t' | '\r' | '\n'+;
+	//terminal WS         : (' '|'\t'|'\r'|'\n')+;
 	public TerminalRule getWSRule() {
 		return gaTerminals.getWSRule();
 	}
 	
-	//terminal ANY_OTHER:
-	//	.;
+	//terminal ANY_OTHER: .;
 	public TerminalRule getANY_OTHERRule() {
 		return gaTerminals.getANY_OTHERRule();
 	}
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 e19a223..996b7ee 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, 2021 1C-Soft LLC.
+ * Copyright (c) 2015, 2022 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
@@ -51,7 +51,7 @@
 public class WorkingCopyTest
     extends WorkspaceTestCase
 {
-    private static final int AST_LEVEL = AST.JLS11;
+    private static final int AST_LEVEL = AST.JLS_Latest;
 
     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 c0ba414..d885eb7 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, 2020 1C-Soft LLC.
+ * Copyright (c) 2015, 2022 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.JLS11);
+        Integer.class).withDefault(AST.JLS_Latest);
     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 a3f9ea1..a588c2c 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.15.0,3.0.0)",
+Require-Bundle: org.eclipse.emf.common.ui;bundle-version="[2.18.0,3.0.0)",
  org.eclipse.core.resources,
  org.eclipse.ui.ide
diff --git a/org.eclipse.handly.tests/META-INF/MANIFEST.MF b/org.eclipse.handly.tests/META-INF/MANIFEST.MF
index efb8d6f..c19fdfb 100644
--- a/org.eclipse.handly.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.handly.tests/META-INF/MANIFEST.MF
@@ -8,7 +8,7 @@
 Fragment-Host: org.eclipse.handly
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.handly.junit
-Import-Package: com.google.common.base;version="15.0.0",
- com.google.common.collect;version="15.0.0",
+Import-Package: com.google.common.base;version="30.1.0",
+ com.google.common.collect;version="30.1.0",
  com.google.inject.binder;resolution:=optional,
  junit.framework
diff --git a/org.eclipse.handly.ui/META-INF/MANIFEST.MF b/org.eclipse.handly.ui/META-INF/MANIFEST.MF
index 61013a6..cf5761b 100644
--- a/org.eclipse.handly.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.handly.ui/META-INF/MANIFEST.MF
@@ -9,18 +9,18 @@
 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.15.0,4.0.0)",
- org.eclipse.core.resources;bundle-version="[3.13.0,4.0.0)",
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.22.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.15.0,4.0.0)",
  org.eclipse.handly;bundle-version="[1.7.0,2.0.0)",
- org.eclipse.search;bundle-version="[3.11.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.11.0,4.0.0)",
- org.eclipse.ui.views;bundle-version="[3.9.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
+ org.eclipse.search;bundle-version="[3.13.0,4.0.0)",
+ org.eclipse.text;bundle-version="[3.12.0,4.0.0)",
+ org.eclipse.jface.text;bundle-version="[3.18.0,4.0.0)",
+ org.eclipse.ui;bundle-version="[3.119.0,4.0.0)",
+ org.eclipse.ui.editors;bundle-version="[3.14.0,4.0.0)",
+ org.eclipse.ui.workbench.texteditor;bundle-version="[3.16.0,4.0.0)",
+ org.eclipse.ui.views;bundle-version="[3.11.0,4.0.0)",
+ org.eclipse.ui.ide;bundle-version="[3.18.0,4.0.0)",
+ org.eclipse.ui.navigator;bundle-version="[3.10.0,4.0.0)";resolution:=optional
 Export-Package: org.eclipse.handly.ui,
  org.eclipse.handly.ui.action,
  org.eclipse.handly.ui.callhierarchy,
diff --git a/org.eclipse.handly.xtext-feature/feature.xml b/org.eclipse.handly.xtext-feature/feature.xml
index 8d77779..aac3cbb 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.7.0" match="equivalent"/>
-      <import feature="org.eclipse.xtext.ui" version="2.16.0" match="compatible"/>
+      <import feature="org.eclipse.xtext.ui" version="2.25.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 ccf904c..63aa29b 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.15.0,4.0.0)",
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.22.0,4.0.0)",
  org.eclipse.handly;bundle-version="[1.7.0,2.0.0)",
  org.eclipse.handly.ui;bundle-version="[1.7.0,2.0.0)",
- org.eclipse.xtext.ui;bundle-version="[2.16.0,2.28.0)",
- org.eclipse.xtext.common.types;bundle-version="[2.16.0,2.28.0)";resolution:=optional,
- org.eclipse.ui.ide;bundle-version="[3.14.0,4.0.0)"
+ org.eclipse.xtext.ui;bundle-version="[2.25.0,2.28.0)",
+ org.eclipse.xtext.common.types;bundle-version="[2.25.0,2.28.0)";resolution:=optional,
+ org.eclipse.ui.ide;bundle-version="[3.18.0,4.0.0)"
 Export-Package: org.eclipse.handly.xtext.ui.callhierarchy,
  org.eclipse.handly.xtext.ui.editor,
  org.eclipse.handly.xtext.ui.outline,
diff --git a/org.eclipse.handly.xtext.ui/src/org/eclipse/handly/xtext/ui/editor/HandlyXtextReconciler.java b/org.eclipse.handly.xtext.ui/src/org/eclipse/handly/xtext/ui/editor/HandlyXtextReconciler.java
index 5d166ca..f6b2ff2 100644
--- a/org.eclipse.handly.xtext.ui/src/org/eclipse/handly/xtext/ui/editor/HandlyXtextReconciler.java
+++ b/org.eclipse.handly.xtext.ui/src/org/eclipse/handly/xtext/ui/editor/HandlyXtextReconciler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2021 itemis AG (http://www.itemis.eu) and others.
+ * Copyright (c) 2008, 2022 itemis AG (http://www.itemis.eu) and others.
  *
  * This program and the accompanying materials are made available under
  * the terms of the Eclipse Public License 2.0 which is available at
@@ -24,7 +24,6 @@
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.handly.internal.xtext.ui.Activator;
 import org.eclipse.jface.text.BadPositionCategoryException;
-import org.eclipse.jface.text.DefaultPositionUpdater;
 import org.eclipse.jface.text.DocumentEvent;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.IPositionUpdater;
@@ -40,6 +39,7 @@
 import org.eclipse.xtext.ui.editor.IXtextEditorCallback;
 import org.eclipse.xtext.ui.editor.XtextEditor;
 import org.eclipse.xtext.ui.editor.model.IXtextDocumentContentObserver;
+import org.eclipse.xtext.ui.editor.reconciler.TemplatePositionUpdater;
 import org.eclipse.xtext.ui.editor.reconciler.XtextReconciler;
 
 import com.google.inject.Binding;
@@ -427,33 +427,5 @@
                 }
             }
         }
-
-        // Initially copied from <code>org.eclipse.xtext.ui.editor.reconciler.TemplatePositionUpdater</code>
-        // only because the original is a package-private class.
-        private static class TemplatePositionUpdater
-            extends DefaultPositionUpdater
-        {
-            public TemplatePositionUpdater(String category)
-            {
-                super(category);
-            }
-
-            @Override
-            protected void adaptToInsert()
-            {
-                int myStart = fPosition.offset;
-                int myEnd = fPosition.offset + fPosition.length - 1;
-                myEnd = Math.max(myStart, myEnd);
-
-                int yoursStart = fOffset;
-                int yoursEnd = fOffset + fReplaceLength - 1;
-                yoursEnd = Math.max(yoursStart, yoursEnd);
-
-                if (myEnd < yoursStart)
-                    return;
-
-                fPosition.length += fReplaceLength;
-            }
-        }
     }
 }
diff --git a/org.eclipse.handly/META-INF/MANIFEST.MF b/org.eclipse.handly/META-INF/MANIFEST.MF
index 1243621..799700c 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.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.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
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.22.0,4.0.0)",
+ org.eclipse.core.filebuffers;bundle-version="[3.7.0,4.0.0)",
+ org.eclipse.core.filesystem;bundle-version="[1.9.0,2.0.0)",
+ org.eclipse.text;bundle-version="[3.12.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.15.0,4.0.0)";resolution:=optional,
+ org.eclipse.ltk.core.refactoring;bundle-version="[3.11.0,4.0.0)";resolution:=optional,
+ org.eclipse.ui;bundle-version="[3.119.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 9be8721..8518346 100644
--- a/targets/base/base.target
+++ b/targets/base/base.target
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!--
-   Copyright (c) 2014, 2020 1C-Soft LLC and others.
+   Copyright (c) 2014, 2022 1C-Soft LLC and others.
 
    This program and the accompanying materials are made available under
    the terms of the Eclipse Public License 2.0 which is available at
@@ -15,8 +15,8 @@
 <target name="Base Platform">
 <!--
    Currently, the Base Platform includes:
-   * Eclipse Project SDK 4.10 (2018-12)
-   * Xtext SDK 2.16 and dependencies
+   * Eclipse Project SDK 4.20 (2021-06)
+   * Xtext SDK 2.25 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/2018-12/201812191000"/>
+<repository location="http://download.eclipse.org/releases/2021-06/202106161001"/>
 <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"/>
@@ -41,6 +41,7 @@
 <unit id="org.objectweb.asm" version="0.0.0"/>
 <unit id="com.google.guava" version="0.0.0"/>
 <unit id="com.google.inject" version="0.0.0"/>
+<unit id="io.github.classgraph" version="0.0.0"/>
 </location>
 </locations>
 </target>
diff --git a/tools/base.p2f b/tools/base.p2f
index bf0d8ef..ea9456c 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.19.0.I20210303-1800'>
+    <iu id='org.eclipse.sdk.ide' version='4.20.0.I20210611-1600'>
       <repositories size='1'>
-        <repository location='http://download.eclipse.org/releases/2021-03/'/>
+        <repository location='http://download.eclipse.org/releases/2021-06/'/>
       </repositories>
     </iu>
-    <iu id='org.eclipse.egit.feature.group' version='5.11.0.202103091610-r'>
+    <iu id='org.eclipse.egit.feature.group' version='5.12.0.202106070339-r'>
       <repositories size='1'>
-        <repository location='http://download.eclipse.org/releases/2021-03/'/>
+        <repository location='http://download.eclipse.org/releases/2021-06/'/>
       </repositories>
     </iu>
-    <iu id='org.eclipse.m2e.feature.feature.group' version='1.17.2.20210219-1922'>
+    <iu id='org.eclipse.m2e.feature.feature.group' version='1.18.0.20210603-1206'>
       <repositories size='1'>
-        <repository location='http://download.eclipse.org/releases/2021-03/'/>
+        <repository location='http://download.eclipse.org/releases/2021-06/'/>
       </repositories>
     </iu>
-    <iu id='org.eclipse.xtext.sdk.feature.group' version='2.16.0.v20181203-1555'>
+    <iu id='org.eclipse.xtext.sdk.feature.group' version='2.25.0.v20210301-1429'>
       <repositories size='1'>
-        <repository location='http://download.eclipse.org/releases/2018-12'/>
+        <repository location='http://download.eclipse.org/releases/2021-06'/>
       </repositories>
     </iu>
-    <iu id='org.eclipse.emf.mwe.sdk.feature.group' version='1.3.21.201705291011'>
+    <iu id='org.eclipse.emf.mwe.sdk.feature.group' version='1.6.1.v20210218-2134'>
       <repositories size='1'>
-        <repository location='http://download.eclipse.org/releases/2018-12'/>
+        <repository location='http://download.eclipse.org/releases/2021-06'/>
       </repositories>
     </iu>
-    <iu id='org.eclipse.emf.mwe2.language.sdk.feature.group' version='2.9.1.201705291011'>
+    <iu id='org.eclipse.emf.mwe2.language.sdk.feature.group' version='2.12.1.v20210218-2134'>
       <repositories size='1'>
-        <repository location='http://download.eclipse.org/releases/2018-12'/>
+        <repository location='http://download.eclipse.org/releases/2021-06'/>
       </repositories>
     </iu>
-    <iu id='org.eclipse.emf.sdk.feature.group' version='2.25.0.v20210114-1734'>
+    <iu id='org.eclipse.emf.sdk.feature.group' version='2.26.0.v20210506-1425'>
       <repositories size='1'>
-        <repository location='http://download.eclipse.org/releases/2021-03/'/>
+        <repository location='http://download.eclipse.org/releases/2021-06/'/>
       </repositories>
     </iu>
   </ius>