[Releng] Update JDT.ecore for Java 20
diff --git a/plugins/org.eclipse.oomph.setup.jdt.edit/META-INF/MANIFEST.MF b/plugins/org.eclipse.oomph.setup.jdt.edit/META-INF/MANIFEST.MF
index f8792ef..95fbbb7 100644
--- a/plugins/org.eclipse.oomph.setup.jdt.edit/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.oomph.setup.jdt.edit/META-INF/MANIFEST.MF
@@ -10,7 +10,7 @@
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Export-Package: org.eclipse.oomph.setup.jdt.provider;version="1.15.0";x-internal:=true
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.24.0,4.0.0)",
- org.eclipse.oomph.setup.jdt;bundle-version="[1.19.0,2.0.0)";visibility:=reexport,
+ org.eclipse.oomph.setup.jdt;bundle-version="[1.20.0,2.0.0)";visibility:=reexport,
  org.eclipse.emf.edit;bundle-version="[2.10.0,3.0.0)";visibility:=reexport,
  org.eclipse.oomph.base.edit;bundle-version="[1.16.0,2.0.0)";visibility:=reexport,
  org.eclipse.oomph.setup.edit;bundle-version="[1.16.0,2.0.0)";visibility:=reexport,
diff --git a/plugins/org.eclipse.oomph.setup.jdt/META-INF/MANIFEST.MF b/plugins/org.eclipse.oomph.setup.jdt/META-INF/MANIFEST.MF
index 169e0b8..10f8c7f 100644
--- a/plugins/org.eclipse.oomph.setup.jdt/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.oomph.setup.jdt/META-INF/MANIFEST.MF
@@ -2,17 +2,17 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.oomph.setup.jdt;singleton:=true
-Bundle-Version: 1.19.0.qualifier
+Bundle-Version: 1.20.0.qualifier
 Bundle-ClassPath: .
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-11
-Export-Package: org.eclipse.oomph.setup.jdt;version="1.19.0";x-internal:=true,
- org.eclipse.oomph.setup.jdt.impl;version="1.19.0";x-internal:=true,
- org.eclipse.oomph.setup.jdt.util;version="1.19.0";x-internal:=true
+Export-Package: org.eclipse.oomph.setup.jdt;version="1.20.0";x-internal:=true,
+ org.eclipse.oomph.setup.jdt.impl;version="1.20.0";x-internal:=true,
+ org.eclipse.oomph.setup.jdt.util;version="1.20.0";x-internal:=true
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.24.0,4.0.0)",
  org.eclipse.emf.ecore;bundle-version="[2.10.0,3.0.0)";visibility:=reexport,
- org.eclipse.oomph.setup;bundle-version="[1.25.0,2.0.0)";visibility:=reexport,
+ org.eclipse.oomph.setup;bundle-version="[1.26.0,2.0.0)";visibility:=reexport,
  org.eclipse.jdt.launching;bundle-version="[3.6.0,4.0.0)"
 Bundle-ActivationPolicy: lazy
 Automatic-Module-Name: org.eclipse.oomph.setup.jdt
diff --git a/plugins/org.eclipse.oomph.setup.jdt/model/JDT.ecore b/plugins/org.eclipse.oomph.setup.jdt/model/JDT.ecore
index 3a645cd..482e38a 100644
--- a/plugins/org.eclipse.oomph.setup.jdt/model/JDT.ecore
+++ b/plugins/org.eclipse.oomph.setup.jdt/model/JDT.ecore
@@ -89,6 +89,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-1.1"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 1.1 Location"/>
@@ -227,6 +231,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-1.3"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 1.3 Location"/>
@@ -294,6 +302,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-1.4"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 1.4 Location"/>
@@ -357,6 +369,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-1.5"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 1.5 Location"/>
@@ -416,6 +432,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-1.6"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 1.6 Location"/>
@@ -471,6 +491,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-1.7"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 1.7 Location"/>
@@ -522,6 +546,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-1.8"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 1.8 Location"/>
@@ -569,6 +597,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-9"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 9 Location"/>
@@ -612,6 +644,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-10"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 10 Location"/>
@@ -651,6 +687,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-11"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 11 Location"/>
@@ -686,6 +726,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-12"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 12 Location"/>
@@ -717,6 +761,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-13"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 13 Location"/>
@@ -744,6 +792,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-14"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 14 Location"/>
@@ -767,6 +819,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-15"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 15 Location"/>
@@ -786,6 +842,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-16"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 16 Location"/>
@@ -801,6 +861,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-17"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 17 Location"/>
@@ -812,6 +876,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-18"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 18 Location"/>
@@ -819,12 +887,23 @@
       <details key="version" value="JavaSE-18"/>
     </eAnnotations>
     <eAnnotations source="http://www.eclipse.org/oomph/setup/Variable">
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-19"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 19 Location"/>
       <details key="description" value="The location of a JDK or JRE compatible with Java 19."/>
       <details key="version" value="JavaSE-19"/>
     </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/oomph/setup/Variable">
+      <details key="name" value="jre.location-20"/>
+      <details key="type" value="JRE"/>
+      <details key="label" value="JRE 20 Location"/>
+      <details key="description" value="The location of a JDK or JRE compatible with Java 20."/>
+      <details key="version" value="JavaSE-20"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="version" lowerBound="1"
         eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="location" lowerBound="1"
diff --git a/plugins/org.eclipse.oomph.setup.jdt/pom.xml b/plugins/org.eclipse.oomph.setup.jdt/pom.xml
index 83bae35..a5d5f53 100644
--- a/plugins/org.eclipse.oomph.setup.jdt/pom.xml
+++ b/plugins/org.eclipse.oomph.setup.jdt/pom.xml
@@ -20,7 +20,7 @@
   </parent>
   <groupId>org.eclipse.oomph</groupId>
   <artifactId>org.eclipse.oomph.setup.jdt</artifactId>
-  <version>1.19.0-SNAPSHOT</version>
+  <version>1.20.0-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 
   <build>
diff --git a/plugins/org.eclipse.oomph.setup.jdt/src/org/eclipse/oomph/setup/jdt/JRETask.java b/plugins/org.eclipse.oomph.setup.jdt/src/org/eclipse/oomph/setup/jdt/JRETask.java
index d1f506c..177e250 100644
--- a/plugins/org.eclipse.oomph.setup.jdt/src/org/eclipse/oomph/setup/jdt/JRETask.java
+++ b/plugins/org.eclipse.oomph.setup.jdt/src/org/eclipse/oomph/setup/jdt/JRETask.java
@@ -53,6 +53,7 @@
  *        annotation="http://www.eclipse.org/oomph/setup/Variable name='jre.location-17' type='JRE' label='JRE 17 Location' description='The location of a JDK or JRE compatible with Java 17.' version='JavaSE-17'"
  *        annotation="http://www.eclipse.org/oomph/setup/Variable name='jre.location-18' type='JRE' label='JRE 18 Location' description='The location of a JDK or JRE compatible with Java 18.' version='JavaSE-18'"
  *        annotation="http://www.eclipse.org/oomph/setup/Variable name='jre.location-19' type='JRE' label='JRE 19 Location' description='The location of a JDK or JRE compatible with Java 19.' version='JavaSE-19'"
+ *        annotation="http://www.eclipse.org/oomph/setup/Variable name='jre.location-20' type='JRE' label='JRE 20 Location' description='The location of a JDK or JRE compatible with Java 20.' version='JavaSE-20'"
  * @generated
  */
 public interface JRETask extends SetupTask
diff --git a/plugins/org.eclipse.oomph.setup.jdt/src/org/eclipse/oomph/setup/jdt/impl/JDTPackageImpl.java b/plugins/org.eclipse.oomph.setup.jdt/src/org/eclipse/oomph/setup/jdt/impl/JDTPackageImpl.java
index 48e8c7c..9eebe27 100644
--- a/plugins/org.eclipse.oomph.setup.jdt/src/org/eclipse/oomph/setup/jdt/impl/JDTPackageImpl.java
+++ b/plugins/org.eclipse.oomph.setup.jdt/src/org/eclipse/oomph/setup/jdt/impl/JDTPackageImpl.java
@@ -463,6 +463,10 @@
         new String[] { "value", "${jre.location-19}", //$NON-NLS-1$ //$NON-NLS-2$
             "label", "JRE 19 Location" //$NON-NLS-1$ //$NON-NLS-2$
         });
+    addAnnotation(jreTaskEClass, new boolean[] { true }, "Choice", //$NON-NLS-1$
+        new String[] { "value", "${jre.location-20}", //$NON-NLS-1$ //$NON-NLS-2$
+            "label", "JRE 20 Location" //$NON-NLS-1$ //$NON-NLS-2$
+        });
     addAnnotation(jreTaskEClass, source, new String[] { "name", "jre.location-1.2", //$NON-NLS-1$ //$NON-NLS-2$
         "type", "JRE", //$NON-NLS-1$ //$NON-NLS-2$
         "label", "JRE 1.2 Location", //$NON-NLS-1$ //$NON-NLS-2$
@@ -599,6 +603,10 @@
         new String[] { "value", "${jre.location-19}", //$NON-NLS-1$ //$NON-NLS-2$
             "label", "JRE 19 Location" //$NON-NLS-1$ //$NON-NLS-2$
         });
+    addAnnotation(jreTaskEClass, new boolean[] { true }, "Choice", //$NON-NLS-1$
+        new String[] { "value", "${jre.location-20}", //$NON-NLS-1$ //$NON-NLS-2$
+            "label", "JRE 20 Location" //$NON-NLS-1$ //$NON-NLS-2$
+        });
     addAnnotation(jreTaskEClass, source, new String[] { "name", "jre.location-1.4", //$NON-NLS-1$ //$NON-NLS-2$
         "type", "JRE", //$NON-NLS-1$ //$NON-NLS-2$
         "label", "JRE 1.4 Location", //$NON-NLS-1$ //$NON-NLS-2$
@@ -665,6 +673,10 @@
         new String[] { "value", "${jre.location-19}", //$NON-NLS-1$ //$NON-NLS-2$
             "label", "JRE 19 Location" //$NON-NLS-1$ //$NON-NLS-2$
         });
+    addAnnotation(jreTaskEClass, new boolean[] { true }, "Choice", //$NON-NLS-1$
+        new String[] { "value", "${jre.location-20}", //$NON-NLS-1$ //$NON-NLS-2$
+            "label", "JRE 20 Location" //$NON-NLS-1$ //$NON-NLS-2$
+        });
     addAnnotation(jreTaskEClass, source, new String[] { "name", "jre.location-1.5", //$NON-NLS-1$ //$NON-NLS-2$
         "type", "JRE", //$NON-NLS-1$ //$NON-NLS-2$
         "label", "JRE 1.5 Location", //$NON-NLS-1$ //$NON-NLS-2$
@@ -727,6 +739,10 @@
         new String[] { "value", "${jre.location-19}", //$NON-NLS-1$ //$NON-NLS-2$
             "label", "JRE 19 Location" //$NON-NLS-1$ //$NON-NLS-2$
         });
+    addAnnotation(jreTaskEClass, new boolean[] { true }, "Choice", //$NON-NLS-1$
+        new String[] { "value", "${jre.location-20}", //$NON-NLS-1$ //$NON-NLS-2$
+            "label", "JRE 20 Location" //$NON-NLS-1$ //$NON-NLS-2$
+        });
     addAnnotation(jreTaskEClass, source, new String[] { "name", "jre.location-1.6", //$NON-NLS-1$ //$NON-NLS-2$
         "type", "JRE", //$NON-NLS-1$ //$NON-NLS-2$
         "label", "JRE 1.6 Location", //$NON-NLS-1$ //$NON-NLS-2$
@@ -785,6 +801,10 @@
         new String[] { "value", "${jre.location-19}", //$NON-NLS-1$ //$NON-NLS-2$
             "label", "JRE 19 Location" //$NON-NLS-1$ //$NON-NLS-2$
         });
+    addAnnotation(jreTaskEClass, new boolean[] { true }, "Choice", //$NON-NLS-1$
+        new String[] { "value", "${jre.location-20}", //$NON-NLS-1$ //$NON-NLS-2$
+            "label", "JRE 20 Location" //$NON-NLS-1$ //$NON-NLS-2$
+        });
     addAnnotation(jreTaskEClass, source, new String[] { "name", "jre.location-1.7", //$NON-NLS-1$ //$NON-NLS-2$
         "type", "JRE", //$NON-NLS-1$ //$NON-NLS-2$
         "label", "JRE 1.7 Location", //$NON-NLS-1$ //$NON-NLS-2$
@@ -839,6 +859,10 @@
         new String[] { "value", "${jre.location-19}", //$NON-NLS-1$ //$NON-NLS-2$
             "label", "JRE 19 Location" //$NON-NLS-1$ //$NON-NLS-2$
         });
+    addAnnotation(jreTaskEClass, new boolean[] { true }, "Choice", //$NON-NLS-1$
+        new String[] { "value", "${jre.location-20}", //$NON-NLS-1$ //$NON-NLS-2$
+            "label", "JRE 20 Location" //$NON-NLS-1$ //$NON-NLS-2$
+        });
     addAnnotation(jreTaskEClass, source, new String[] { "name", "jre.location-1.8", //$NON-NLS-1$ //$NON-NLS-2$
         "type", "JRE", //$NON-NLS-1$ //$NON-NLS-2$
         "label", "JRE 1.8 Location", //$NON-NLS-1$ //$NON-NLS-2$
@@ -889,6 +913,10 @@
         new String[] { "value", "${jre.location-19}", //$NON-NLS-1$ //$NON-NLS-2$
             "label", "JRE 19 Location" //$NON-NLS-1$ //$NON-NLS-2$
         });
+    addAnnotation(jreTaskEClass, new boolean[] { true }, "Choice", //$NON-NLS-1$
+        new String[] { "value", "${jre.location-20}", //$NON-NLS-1$ //$NON-NLS-2$
+            "label", "JRE 20 Location" //$NON-NLS-1$ //$NON-NLS-2$
+        });
     addAnnotation(jreTaskEClass, source, new String[] { "name", "jre.location-9", //$NON-NLS-1$ //$NON-NLS-2$
         "type", "JRE", //$NON-NLS-1$ //$NON-NLS-2$
         "label", "JRE 9 Location", //$NON-NLS-1$ //$NON-NLS-2$
@@ -935,6 +963,10 @@
         new String[] { "value", "${jre.location-19}", //$NON-NLS-1$ //$NON-NLS-2$
             "label", "JRE 19 Location" //$NON-NLS-1$ //$NON-NLS-2$
         });
+    addAnnotation(jreTaskEClass, new boolean[] { true }, "Choice", //$NON-NLS-1$
+        new String[] { "value", "${jre.location-20}", //$NON-NLS-1$ //$NON-NLS-2$
+            "label", "JRE 20 Location" //$NON-NLS-1$ //$NON-NLS-2$
+        });
     addAnnotation(jreTaskEClass, source, new String[] { "name", "jre.location-10", //$NON-NLS-1$ //$NON-NLS-2$
         "type", "JRE", //$NON-NLS-1$ //$NON-NLS-2$
         "label", "JRE 10 Location", //$NON-NLS-1$ //$NON-NLS-2$
@@ -977,6 +1009,10 @@
         new String[] { "value", "${jre.location-19}", //$NON-NLS-1$ //$NON-NLS-2$
             "label", "JRE 19 Location" //$NON-NLS-1$ //$NON-NLS-2$
         });
+    addAnnotation(jreTaskEClass, new boolean[] { true }, "Choice", //$NON-NLS-1$
+        new String[] { "value", "${jre.location-20}", //$NON-NLS-1$ //$NON-NLS-2$
+            "label", "JRE 20 Location" //$NON-NLS-1$ //$NON-NLS-2$
+        });
     addAnnotation(jreTaskEClass, source, new String[] { "name", "jre.location-11", //$NON-NLS-1$ //$NON-NLS-2$
         "type", "JRE", //$NON-NLS-1$ //$NON-NLS-2$
         "label", "JRE 11 Location", //$NON-NLS-1$ //$NON-NLS-2$
@@ -1015,6 +1051,10 @@
         new String[] { "value", "${jre.location-19}", //$NON-NLS-1$ //$NON-NLS-2$
             "label", "JRE 19 Location" //$NON-NLS-1$ //$NON-NLS-2$
         });
+    addAnnotation(jreTaskEClass, new boolean[] { true }, "Choice", //$NON-NLS-1$
+        new String[] { "value", "${jre.location-20}", //$NON-NLS-1$ //$NON-NLS-2$
+            "label", "JRE 20 Location" //$NON-NLS-1$ //$NON-NLS-2$
+        });
     addAnnotation(jreTaskEClass, source, new String[] { "name", "jre.location-12", //$NON-NLS-1$ //$NON-NLS-2$
         "type", "JRE", //$NON-NLS-1$ //$NON-NLS-2$
         "label", "JRE 12 Location", //$NON-NLS-1$ //$NON-NLS-2$
@@ -1049,6 +1089,10 @@
         new String[] { "value", "${jre.location-19}", //$NON-NLS-1$ //$NON-NLS-2$
             "label", "JRE 19 Location" //$NON-NLS-1$ //$NON-NLS-2$
         });
+    addAnnotation(jreTaskEClass, new boolean[] { true }, "Choice", //$NON-NLS-1$
+        new String[] { "value", "${jre.location-20}", //$NON-NLS-1$ //$NON-NLS-2$
+            "label", "JRE 20 Location" //$NON-NLS-1$ //$NON-NLS-2$
+        });
     addAnnotation(jreTaskEClass, source, new String[] { "name", "jre.location-13", //$NON-NLS-1$ //$NON-NLS-2$
         "type", "JRE", //$NON-NLS-1$ //$NON-NLS-2$
         "label", "JRE 13 Location", //$NON-NLS-1$ //$NON-NLS-2$
@@ -1079,6 +1123,10 @@
         new String[] { "value", "${jre.location-19}", //$NON-NLS-1$ //$NON-NLS-2$
             "label", "JRE 19 Location" //$NON-NLS-1$ //$NON-NLS-2$
         });
+    addAnnotation(jreTaskEClass, new boolean[] { true }, "Choice", //$NON-NLS-1$
+        new String[] { "value", "${jre.location-20}", //$NON-NLS-1$ //$NON-NLS-2$
+            "label", "JRE 20 Location" //$NON-NLS-1$ //$NON-NLS-2$
+        });
     addAnnotation(jreTaskEClass, source, new String[] { "name", "jre.location-14", //$NON-NLS-1$ //$NON-NLS-2$
         "type", "JRE", //$NON-NLS-1$ //$NON-NLS-2$
         "label", "JRE 14 Location", //$NON-NLS-1$ //$NON-NLS-2$
@@ -1105,6 +1153,10 @@
         new String[] { "value", "${jre.location-19}", //$NON-NLS-1$ //$NON-NLS-2$
             "label", "JRE 19 Location" //$NON-NLS-1$ //$NON-NLS-2$
         });
+    addAnnotation(jreTaskEClass, new boolean[] { true }, "Choice", //$NON-NLS-1$
+        new String[] { "value", "${jre.location-20}", //$NON-NLS-1$ //$NON-NLS-2$
+            "label", "JRE 20 Location" //$NON-NLS-1$ //$NON-NLS-2$
+        });
     addAnnotation(jreTaskEClass, source, new String[] { "name", "jre.location-15", //$NON-NLS-1$ //$NON-NLS-2$
         "type", "JRE", //$NON-NLS-1$ //$NON-NLS-2$
         "label", "JRE 15 Location", //$NON-NLS-1$ //$NON-NLS-2$
@@ -1127,6 +1179,10 @@
         new String[] { "value", "${jre.location-19}", //$NON-NLS-1$ //$NON-NLS-2$
             "label", "JRE 19 Location" //$NON-NLS-1$ //$NON-NLS-2$
         });
+    addAnnotation(jreTaskEClass, new boolean[] { true }, "Choice", //$NON-NLS-1$
+        new String[] { "value", "${jre.location-20}", //$NON-NLS-1$ //$NON-NLS-2$
+            "label", "JRE 20 Location" //$NON-NLS-1$ //$NON-NLS-2$
+        });
     addAnnotation(jreTaskEClass, source, new String[] { "name", "jre.location-16", //$NON-NLS-1$ //$NON-NLS-2$
         "type", "JRE", //$NON-NLS-1$ //$NON-NLS-2$
         "label", "JRE 16 Location", //$NON-NLS-1$ //$NON-NLS-2$
@@ -1145,6 +1201,10 @@
         new String[] { "value", "${jre.location-19}", //$NON-NLS-1$ //$NON-NLS-2$
             "label", "JRE 19 Location" //$NON-NLS-1$ //$NON-NLS-2$
         });
+    addAnnotation(jreTaskEClass, new boolean[] { true }, "Choice", //$NON-NLS-1$
+        new String[] { "value", "${jre.location-20}", //$NON-NLS-1$ //$NON-NLS-2$
+            "label", "JRE 20 Location" //$NON-NLS-1$ //$NON-NLS-2$
+        });
     addAnnotation(jreTaskEClass, source, new String[] { "name", "jre.location-17", //$NON-NLS-1$ //$NON-NLS-2$
         "type", "JRE", //$NON-NLS-1$ //$NON-NLS-2$
         "label", "JRE 17 Location", //$NON-NLS-1$ //$NON-NLS-2$
@@ -1159,6 +1219,10 @@
         new String[] { "value", "${jre.location-19}", //$NON-NLS-1$ //$NON-NLS-2$
             "label", "JRE 19 Location" //$NON-NLS-1$ //$NON-NLS-2$
         });
+    addAnnotation(jreTaskEClass, new boolean[] { true }, "Choice", //$NON-NLS-1$
+        new String[] { "value", "${jre.location-20}", //$NON-NLS-1$ //$NON-NLS-2$
+            "label", "JRE 20 Location" //$NON-NLS-1$ //$NON-NLS-2$
+        });
     addAnnotation(jreTaskEClass, source, new String[] { "name", "jre.location-18", //$NON-NLS-1$ //$NON-NLS-2$
         "type", "JRE", //$NON-NLS-1$ //$NON-NLS-2$
         "label", "JRE 18 Location", //$NON-NLS-1$ //$NON-NLS-2$
@@ -1169,12 +1233,26 @@
         new String[] { "value", "${jre.location-19}", //$NON-NLS-1$ //$NON-NLS-2$
             "label", "JRE 19 Location" //$NON-NLS-1$ //$NON-NLS-2$
         });
+    addAnnotation(jreTaskEClass, new boolean[] { true }, "Choice", //$NON-NLS-1$
+        new String[] { "value", "${jre.location-20}", //$NON-NLS-1$ //$NON-NLS-2$
+            "label", "JRE 20 Location" //$NON-NLS-1$ //$NON-NLS-2$
+        });
     addAnnotation(jreTaskEClass, source, new String[] { "name", "jre.location-19", //$NON-NLS-1$ //$NON-NLS-2$
         "type", "JRE", //$NON-NLS-1$ //$NON-NLS-2$
         "label", "JRE 19 Location", //$NON-NLS-1$ //$NON-NLS-2$
         "description", "The location of a JDK or JRE compatible with Java 19.", //$NON-NLS-1$ //$NON-NLS-2$
         "version", "JavaSE-19" //$NON-NLS-1$ //$NON-NLS-2$
     });
+    addAnnotation(jreTaskEClass, new boolean[] { true }, "Choice", //$NON-NLS-1$
+        new String[] { "value", "${jre.location-20}", //$NON-NLS-1$ //$NON-NLS-2$
+            "label", "JRE 20 Location" //$NON-NLS-1$ //$NON-NLS-2$
+        });
+    addAnnotation(jreTaskEClass, source, new String[] { "name", "jre.location-20", //$NON-NLS-1$ //$NON-NLS-2$
+        "type", "JRE", //$NON-NLS-1$ //$NON-NLS-2$
+        "label", "JRE 20 Location", //$NON-NLS-1$ //$NON-NLS-2$
+        "description", "The location of a JDK or JRE compatible with Java 20.", //$NON-NLS-1$ //$NON-NLS-2$
+        "version", "JavaSE-20" //$NON-NLS-1$ //$NON-NLS-2$
+    });
   }
 
   /**
diff --git a/setups/models/JDT.ecore b/setups/models/JDT.ecore
index 53bfb5c..afaeac1 100644
--- a/setups/models/JDT.ecore
+++ b/setups/models/JDT.ecore
@@ -89,6 +89,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-1.1"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 1.1 Location"/>
@@ -227,6 +231,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-1.3"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 1.3 Location"/>
@@ -294,6 +302,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-1.4"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 1.4 Location"/>
@@ -357,6 +369,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-1.5"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 1.5 Location"/>
@@ -416,6 +432,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-1.6"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 1.6 Location"/>
@@ -471,6 +491,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-1.7"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 1.7 Location"/>
@@ -522,6 +546,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-1.8"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 1.8 Location"/>
@@ -569,6 +597,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-9"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 9 Location"/>
@@ -612,6 +644,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-10"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 10 Location"/>
@@ -651,6 +687,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-11"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 11 Location"/>
@@ -686,6 +726,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-12"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 12 Location"/>
@@ -717,6 +761,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-13"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 13 Location"/>
@@ -744,6 +792,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-14"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 14 Location"/>
@@ -767,6 +819,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-15"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 15 Location"/>
@@ -786,6 +842,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-16"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 16 Location"/>
@@ -801,6 +861,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-17"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 17 Location"/>
@@ -812,6 +876,10 @@
         <details key="value" value="${jre.location-19}"/>
         <details key="label" value="JRE 19 Location"/>
       </eAnnotations>
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-18"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 18 Location"/>
@@ -819,12 +887,23 @@
       <details key="version" value="JavaSE-18"/>
     </eAnnotations>
     <eAnnotations source="http://www.eclipse.org/oomph/setup/Variable">
+      <eAnnotations source="Choice">
+        <details key="value" value="${jre.location-20}"/>
+        <details key="label" value="JRE 20 Location"/>
+      </eAnnotations>
       <details key="name" value="jre.location-19"/>
       <details key="type" value="JRE"/>
       <details key="label" value="JRE 19 Location"/>
       <details key="description" value="The location of a JDK or JRE compatible with Java 19."/>
       <details key="version" value="JavaSE-19"/>
     </eAnnotations>
+    <eAnnotations source="http://www.eclipse.org/oomph/setup/Variable">
+      <details key="name" value="jre.location-20"/>
+      <details key="type" value="JRE"/>
+      <details key="label" value="JRE 20 Location"/>
+      <details key="description" value="The location of a JDK or JRE compatible with Java 20."/>
+      <details key="version" value="JavaSE-20"/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="version" lowerBound="1"
         eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="location" lowerBound="1"