Warmup Maven Embedder to improve first-project-creation UX

performance:

 - first embedder initialization can take a while, async-profiler
   showed that a big chunk of it is spent within google guice
 - this starts the warmup task early, which solves the problem, since
   this will happen while the user is looking at the wizard
 - the warmup task is a no-op if it was already initialized

cleanup:

 - small jdk 17 renovation
diff --git a/java/maven.embedder/nbproject/project.properties b/java/maven.embedder/nbproject/project.properties
index bb898d7..9ffd2ba 100644
--- a/java/maven.embedder/nbproject/project.properties
+++ b/java/maven.embedder/nbproject/project.properties
@@ -16,7 +16,7 @@
 # under the License.
 
 is.autoload=true
-javac.source=1.8
+javac.release=17
 javac.compilerargs=-Xlint -Xlint:-serial
 release.external/jdom2-2.0.6.1.jar=modules/ext/maven/jdom2-2.0.6.1.jar
 release.external/maven-dependency-tree-2.2.jar=modules/ext/maven/maven-dependency-tree-2.2.jar
diff --git a/java/maven.embedder/src/org/netbeans/modules/maven/embedder/DependencyTreeFactory.java b/java/maven.embedder/src/org/netbeans/modules/maven/embedder/DependencyTreeFactory.java
index be01e6e..01251a2 100644
--- a/java/maven.embedder/src/org/netbeans/modules/maven/embedder/DependencyTreeFactory.java
+++ b/java/maven.embedder/src/org/netbeans/modules/maven/embedder/DependencyTreeFactory.java
@@ -19,7 +19,7 @@
 package org.netbeans.modules.maven.embedder;
 
 import java.util.Collection;
-import java.util.Collections;
+import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import org.apache.maven.MavenExecutionException;
@@ -45,7 +45,7 @@
     @Deprecated
     public static DependencyNode createDependencyTree(MavenProject project, MavenEmbedder embedder, String scope) {
         try {
-            return createDependencyTree(project, embedder, Collections.singleton(scope));
+            return createDependencyTree(project, embedder, List.of(scope));
         } catch (MavenExecutionException ex) {
             LOG.log(Level.INFO, "Dependency tree scan failed", ex);
             return null;
diff --git a/java/maven.embedder/src/org/netbeans/modules/maven/embedder/EmbedderConfiguration.java b/java/maven.embedder/src/org/netbeans/modules/maven/embedder/EmbedderConfiguration.java
index 07208d8..19f2f2d 100644
--- a/java/maven.embedder/src/org/netbeans/modules/maven/embedder/EmbedderConfiguration.java
+++ b/java/maven.embedder/src/org/netbeans/modules/maven/embedder/EmbedderConfiguration.java
@@ -27,39 +27,26 @@
  *
  * @author mkleint
  */
-class EmbedderConfiguration {
-    private final PlexusContainer cont;
-    private final Properties props;
-    private final boolean offline;
-    private final File settingsXml;
-    private final Properties userprops;
-
-    EmbedderConfiguration(PlexusContainer cont, Properties props, Properties userprops, boolean offline, File settingsXml) {
-        this.cont = cont;
-        this.props = props;
-        this.offline = offline;
-        this.settingsXml = settingsXml;
-        this.userprops = userprops;
-    }
+record EmbedderConfiguration(PlexusContainer container, Properties systemProps, Properties userProps, boolean offline, File settingsXml) {
 
     Properties getSystemProperties() {
-        return props;
+        return systemProps();
     }
-    
+
     Properties getUserProperties() {
-        return userprops;
+        return userProps();
     }
 
     PlexusContainer getContainer() {
-        return cont;
+        return container();
     }
 
     public boolean isOffline() {
-        return offline;
+        return offline();
     }
 
     File getSettingsXml() {
-        return settingsXml;
+        return settingsXml();
     }
 
 }
diff --git a/java/maven.embedder/src/org/netbeans/modules/maven/embedder/EmbedderFactory.java b/java/maven.embedder/src/org/netbeans/modules/maven/embedder/EmbedderFactory.java
index 88e1d2d..752f59f 100644
--- a/java/maven.embedder/src/org/netbeans/modules/maven/embedder/EmbedderFactory.java
+++ b/java/maven.embedder/src/org/netbeans/modules/maven/embedder/EmbedderFactory.java
@@ -60,35 +60,33 @@
     
     //same prop constant in MavenSettings.java
     static final String PROP_DEFAULT_OPTIONS = "defaultOptions"; 
-    private static final Set<String> forbidden = new HashSet<String>();
-    static {
-        forbidden.add("netbeans.logger.console"); //NOI18N
-        forbidden.add("java.util.logging.config.class"); //NOI18N
-        forbidden.add("netbeans.autoupdate.language"); //NOI18N
-        forbidden.add("netbeans.dirs"); //NOI18N
-        forbidden.add("netbeans.home"); //NOI18N
-        forbidden.add("sun.awt.exception.handler"); //NOI18N
-        forbidden.add("org.openide.TopManager.GUI"); //NOI18N
-        forbidden.add("org.openide.major.version"); //NOI18N
-        forbidden.add("netbeans.autoupdate.variant"); //NOI18N
-        forbidden.add("netbeans.dynamic.classpath"); //NOI18N
-        forbidden.add("netbeans.autoupdate.country"); //NOI18N
-        forbidden.add("netbeans.hash.code"); //NOI18N
-        forbidden.add("org.openide.TopManager"); //NOI18N
-        forbidden.add("org.openide.version"); //NOI18N
-        forbidden.add("netbeans.buildnumber"); //NOI18N
-        forbidden.add("javax.xml.parsers.DocumentBuilderFactory"); //NOI18N
-        forbidden.add("javax.xml.parsers.SAXParserFactory"); //NOI18N
-        forbidden.add("rave.build"); //NOI18N
-        forbidden.add("netbeans.accept_license_class"); //NOI18N
-        forbidden.add("rave.version"); //NOI18N
-        forbidden.add("netbeans.autoupdate.version"); //NOI18N
-        forbidden.add("netbeans.importclass"); //NOI18N
-        forbidden.add("netbeans.user"); //NOI18N
-//        forbidden.add("java.class.path");
-//        forbidden.add("https.nonProxyHosts");
-
-    }    
+    private static final Set<String> forbidden = Set.of(
+        "netbeans.logger.console", //NOI18N
+        "java.util.logging.config.class", //NOI18N
+        "netbeans.autoupdate.language", //NOI18N
+        "netbeans.dirs", //NOI18N
+        "netbeans.home", //NOI18N
+        "sun.awt.exception.handler", //NOI18N
+        "org.openide.TopManager.GUI", //NOI18N
+        "org.openide.major.version", //NOI18N
+        "netbeans.autoupdate.variant", //NOI18N
+        "netbeans.dynamic.classpath", //NOI18N
+        "netbeans.autoupdate.country", //NOI18N
+        "netbeans.hash.code", //NOI18N
+        "org.openide.TopManager", //NOI18N
+        "org.openide.version", //NOI18N
+        "netbeans.buildnumber", //NOI18N
+        "javax.xml.parsers.DocumentBuilderFactory", //NOI18N
+        "javax.xml.parsers.SAXParserFactory", //NOI18N
+        "rave.build", //NOI18N
+        "netbeans.accept_license_class", //NOI18N
+        "rave.version", //NOI18N
+        "netbeans.autoupdate.version", //NOI18N
+        "netbeans.importclass", //NOI18N
+        "netbeans.user" //NOI18N
+//        "java.class.path",
+//        "https.nonProxyHosts"
+    ); 
 
     private static final Logger LOG = Logger.getLogger(EmbedderFactory.class.getName());
 
@@ -100,31 +98,24 @@
     
     private static final RequestProcessor RP = new RequestProcessor("Maven Embedder warmup");
     
-    private static final RequestProcessor.Task warmupTask = RP.create(new Runnable() {
-            @Override
-            public void run() {
-                //#211158 after being reset, recreate the instance for followup usage. 
-                //makes the performance stats of the project embedder after resetting more predictable
-                getProjectEmbedder();
-            }
-        });
+    //#211158 after being reset, recreate the instance for followup usage. 
+    //makes the performance stats of the project embedder after resetting more predictable
+    private static final RequestProcessor.Task warmupTask = RP.create(EmbedderFactory::getProjectEmbedder);
 
     static {
-        RP.post(new Runnable() {
-            @Override
-            public void run() { //#228379
-                OpenProjects.getDefault().addProjectGroupChangeListener(new ProjectGroupChangeListener() {
-                    @Override
-                    public void projectGroupChanging(ProjectGroupChangeEvent event) {
-                        resetCachedEmbedders();
-                    }
-
-                    @Override
-                    public void projectGroupChanged(ProjectGroupChangeEvent event) {
-                    }
-                });
-            }
+        RP.post(() -> { //#228379
+            OpenProjects.getDefault().addProjectGroupChangeListener(new ProjectGroupChangeListener() {
+                @Override
+                public void projectGroupChanging(ProjectGroupChangeEvent event) {
+                    resetCachedEmbedders();
+                }
+                @Override
+                public void projectGroupChanged(ProjectGroupChangeEvent event) {}
+            });
         });
+        // start initialization; guice can take a while the first time it runs
+        // if something calls getProjectEmbedder() in the mean time, this is becomes a no-op
+        warmupTask.schedule(100);
     }
     
     private EmbedderFactory() {
@@ -236,7 +227,7 @@
     
     static Map<String, String> getCustomGlobalUserProperties() {
         //maybe set org.eclipse.aether.ConfigurationProperties.USER_AGENT with netbeans specific value.
-        Map<String, String> toRet = new HashMap<String, String>();
+        Map<String, String> toRet = new HashMap<>();
         String options = getPreferences().get(PROP_DEFAULT_OPTIONS, "");
         try {
             
diff --git a/java/maven.embedder/src/org/netbeans/modules/maven/embedder/MavenEmbedder.java b/java/maven.embedder/src/org/netbeans/modules/maven/embedder/MavenEmbedder.java
index 7f36705..9cbd392 100644
--- a/java/maven.embedder/src/org/netbeans/modules/maven/embedder/MavenEmbedder.java
+++ b/java/maven.embedder/src/org/netbeans/modules/maven/embedder/MavenEmbedder.java
@@ -142,8 +142,8 @@
         settingsDecrypter = plexus.lookup(SettingsDecrypter.class);
         
         VersionResolver vr = plexus.lookup(VersionResolver.class);
-        if (vr instanceof NbVersionResolver2) {
-            versionResolver = (NbVersionResolver2)vr;
+        if (vr instanceof NbVersionResolver2 vr2) {
+            versionResolver = vr2;
         } else {
             versionResolver = null;
         }
@@ -454,7 +454,7 @@
      */
     public List<Model> createModelLineage(File pom) throws ModelBuildingException {
         ModelBuildingResult res = executeModelBuilder(pom);
-        List<Model> toRet = new ArrayList<Model>();
+        List<Model> toRet = new ArrayList<>();
 
         for (String id : res.getModelIds()) {
             Model m = res.getRawModel(id);
@@ -550,12 +550,12 @@
 
         LifecycleMapping lifecycleMapping = lookupComponent(LifecycleMapping.class);
         if (lifecycleMapping != null) {
-            Set<String> phases = new TreeSet<String>();
+            Set<String> phases = new TreeSet<>();
             Map<String, Lifecycle> lifecycles = lifecycleMapping.getLifecycles();
             for (Lifecycle lifecycle : lifecycles.values()) {
                 phases.addAll(lifecycle.getPhases().keySet());
             }
-            return new ArrayList<String>(phases);
+            return new ArrayList<>(phases);
         }
 
         return Collections.<String>emptyList();
diff --git a/java/maven.embedder/src/org/netbeans/modules/maven/embedder/NBRepositoryModelResolver.java b/java/maven.embedder/src/org/netbeans/modules/maven/embedder/NBRepositoryModelResolver.java
index df98391..84681bf 100644
--- a/java/maven.embedder/src/org/netbeans/modules/maven/embedder/NBRepositoryModelResolver.java
+++ b/java/maven.embedder/src/org/netbeans/modules/maven/embedder/NBRepositoryModelResolver.java
@@ -34,7 +34,6 @@
 import org.apache.maven.model.resolution.ModelResolver;
 import org.apache.maven.model.resolution.UnresolvableModelException;
 import org.apache.maven.repository.RepositorySystem;
-import org.openide.util.Exceptions;
 
 /**
  *
@@ -44,7 +43,7 @@
         implements ModelResolver {
 
     private final MavenEmbedder embedder;
-    private List<ArtifactRepository> remoteRepositories = new ArrayList<ArtifactRepository>();
+    private List<ArtifactRepository> remoteRepositories = new ArrayList<>();
 
 
     NBRepositoryModelResolver(MavenEmbedder embedder) {
@@ -53,7 +52,7 @@
 
     private NBRepositoryModelResolver(NBRepositoryModelResolver original) {
         this(original.embedder);
-        this.remoteRepositories = new ArrayList<ArtifactRepository>(original.remoteRepositories);
+        this.remoteRepositories = new ArrayList<>(original.remoteRepositories);
     }
 
     @Override
@@ -72,10 +71,8 @@
         Artifact artifactParent = embedder.lookupComponent(RepositorySystem.class).createProjectArtifact(groupId, artifactId, version);
         try {
             embedder.resolveArtifact(artifactParent, remoteRepositories, embedder.getLocalRepository());
-        } catch (ArtifactResolutionException ex) {
+        } catch (ArtifactResolutionException | ArtifactNotFoundException ex) {
              throw new UnresolvableModelException(ex.getMessage(),  groupId , artifactId , version );
-        } catch (ArtifactNotFoundException ex) {
-            throw new UnresolvableModelException( ex.getMessage(),  groupId , artifactId , version );
         }
 
         return new FileModelSource(artifactParent.getFile());