This is an automated email from the ASF dual-hosted git repository.

neilcsmith pushed a commit to branch delivery
in repository https://gitbox.apache.org/repos/asf/netbeans.git


The following commit(s) were added to refs/heads/delivery by this push:
     new 49fac41e03 Try to close Gradle Daemons on exit.
     new db3c20eb85 Merge pull request #6598 from 
lkishalmi/gradle-disconnect-on-exit
49fac41e03 is described below

commit 49fac41e034dd4a163907b1830dfba5af0ac722d
Author: Laszlo Kishalmi <[email protected]>
AuthorDate: Fri Oct 20 14:40:48 2023 +0200

    Try to close Gradle Daemons on exit.
---
 .../modules/gradle/GradleConnectorManager.java     | 80 ++++++++++++++++++++++
 .../modules/gradle/GradleProjectConnection.java    |  6 +-
 .../modules/gradle/loaders/GradleDaemon.java       | 40 -----------
 .../gradle/spi/newproject/TemplateOperation.java   |  2 +
 .../modules/gradle/api/GradleBaseProjectTest.java  |  1 +
 5 files changed, 87 insertions(+), 42 deletions(-)

diff --git 
a/extide/gradle/src/org/netbeans/modules/gradle/GradleConnectorManager.java 
b/extide/gradle/src/org/netbeans/modules/gradle/GradleConnectorManager.java
new file mode 100644
index 0000000000..eb7c91501b
--- /dev/null
+++ b/extide/gradle/src/org/netbeans/modules/gradle/GradleConnectorManager.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.netbeans.modules.gradle;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.WeakHashMap;
+import java.util.logging.Logger;
+import org.gradle.tooling.GradleConnector;
+import org.netbeans.api.project.Project;
+import org.openide.modules.OnStop;
+
+/**
+ *
+ * @author lkishalmi
+ */
+public final class GradleConnectorManager {
+    
+    private final Map<Project, GradleConnector> projectConnector = new 
WeakHashMap<>();
+    private final List<GradleConnector> connectors = new ArrayList<>();
+
+    private static final GradleConnectorManager INSTANCE = new 
GradleConnectorManager();
+    private static final Logger LOG = 
Logger.getLogger(GradleConnectorManager.class.getName());
+    
+    private GradleConnectorManager() {}
+    
+    public static GradleConnectorManager getDefault() {
+        return INSTANCE;
+    } 
+    
+    public GradleConnector getConnector(Project prj) {
+        synchronized (connectors) {
+            GradleConnector ret = projectConnector.computeIfAbsent(prj, p -> {
+                GradleConnector conn = GradleConnector.newConnector();
+                connectors.add(conn);
+                return conn;
+            });
+            return ret;            
+        }
+    }
+    
+    
+    public void disconnectAll() {
+        LOG.info("Disconnecting from Gradle Daemons."); //NOI18N
+        synchronized (connectors) {
+            projectConnector.clear();
+            
+            connectors.forEach(GradleConnector::disconnect);
+            connectors.clear();
+        }
+        LOG.info("Disconnecting from Gradle Daemons. Done."); //NOI18N
+    } 
+    
+    @OnStop
+    public static class DisconnectGradle implements Runnable {
+
+        @Override
+        public void run() {
+            GradleConnectorManager.getDefault().disconnectAll();
+        }
+        
+    } 
+}
diff --git 
a/extide/gradle/src/org/netbeans/modules/gradle/GradleProjectConnection.java 
b/extide/gradle/src/org/netbeans/modules/gradle/GradleProjectConnection.java
index d74535dcd9..a8160bfd06 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/GradleProjectConnection.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/GradleProjectConnection.java
@@ -37,6 +37,8 @@ import org.gradle.tooling.ProjectConnection;
 import org.gradle.tooling.ResultHandler;
 import org.gradle.tooling.TestLauncher;
 import org.netbeans.api.project.Project;
+import org.netbeans.api.project.ProjectManager;
+import org.netbeans.api.project.ProjectUtils;
 import org.netbeans.modules.gradle.api.NbGradleProject;
 import org.netbeans.modules.gradle.api.execute.GradleDistributionManager;
 import 
org.netbeans.modules.gradle.api.execute.GradleDistributionManager.GradleDistribution;
@@ -151,8 +153,8 @@ public final class GradleProjectConnection implements 
ProjectConnection {
         return launcher;
     }
 
-    private static ProjectConnection createConnection(GradleDistribution dist, 
File projectDir) {
-        GradleConnector gconn = GradleConnector.newConnector();
+    private ProjectConnection createConnection(GradleDistribution dist, File 
projectDir) {
+        GradleConnector gconn = 
GradleConnectorManager.getDefault().getConnector(project);
         gconn = gconn.useGradleUserHomeDir(dist.getGradleUserHome());
         if (dist.isAvailable()) {
             gconn = gconn.useInstallation(dist.getDistributionDir());
diff --git 
a/extide/gradle/src/org/netbeans/modules/gradle/loaders/GradleDaemon.java 
b/extide/gradle/src/org/netbeans/modules/gradle/loaders/GradleDaemon.java
index a068117a5b..2d87172c1b 100644
--- a/extide/gradle/src/org/netbeans/modules/gradle/loaders/GradleDaemon.java
+++ b/extide/gradle/src/org/netbeans/modules/gradle/loaders/GradleDaemon.java
@@ -20,7 +20,6 @@
 package org.netbeans.modules.gradle.loaders;
 
 import org.netbeans.modules.gradle.api.NbGradleProject;
-import org.netbeans.modules.gradle.api.execute.GradleCommandLine;
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
@@ -31,12 +30,6 @@ import java.util.logging.Logger;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import org.gradle.tooling.BuildAction;
-import org.gradle.tooling.BuildActionExecuter;
-import org.gradle.tooling.BuildController;
-import org.gradle.tooling.GradleConnectionException;
-import org.gradle.tooling.GradleConnector;
-import org.gradle.tooling.ProjectConnection;
 import org.openide.modules.InstalledFileLocator;
 import org.openide.modules.Places;
 import org.openide.util.RequestProcessor;
@@ -55,11 +48,6 @@ public final class GradleDaemon {
     private static final String PROP_TOOLING_JAR = "NETBEANS_TOOLING_JAR";
     private static final String TOOLING_JAR = 
InstalledFileLocator.getDefault().locate(TOOLING_JAR_NAME, 
NbGradleProject.CODENAME_BASE, false).getAbsolutePath().replace("\\", "\\\\");
 
-    private static final String DAEMON_LOADED = "Daemon Loaded."; //NOI18N
-    private static final String LOADER_PROJECT_NAME = 
"modules/gradle/daemon-loader"; //NOI18N
-    private static final File LOADER_PROJECT_DIR = 
InstalledFileLocator.getDefault().locate(LOADER_PROJECT_NAME, 
NbGradleProject.CODENAME_BASE, false);
-    private static final DummyBuildAction DUMMY_ACTION = new 
DummyBuildAction();
-    
     private static final Logger LOG = 
Logger.getLogger(GradleDaemon.class.getName());
 
     private GradleDaemon() {}
@@ -82,32 +70,4 @@ public final class GradleDaemon {
         }
         return initScript.getAbsolutePath();
     }
-    
-    private static void doLoadDaemon() {
-        GradleConnector gconn = GradleConnector.newConnector();
-        ProjectConnection pconn = 
gconn.forProjectDirectory(LOADER_PROJECT_DIR).connect();
-        BuildActionExecuter<String> action = pconn.action(DUMMY_ACTION);
-        GradleCommandLine cmd = new GradleCommandLine();
-        cmd.setFlag(GradleCommandLine.Flag.OFFLINE, true);
-        cmd.addParameter(GradleCommandLine.Parameter.INIT_SCRIPT, 
initScript());
-        cmd.configure(action);
-        try {
-            action.run();
-        } catch (GradleConnectionException | IllegalStateException ex) {
-            // Well for some reason we were  not able to load Gradle.
-            // Ignoring that for now
-        } finally {
-            pconn.close();
-        }
-    }
-
-    private static class DummyBuildAction implements BuildAction<String> {
-
-        @Override
-        public String execute(BuildController bc) {
-            return DAEMON_LOADED;
-        }
-
-    }
-
 }
diff --git 
a/extide/gradle/src/org/netbeans/modules/gradle/spi/newproject/TemplateOperation.java
 
b/extide/gradle/src/org/netbeans/modules/gradle/spi/newproject/TemplateOperation.java
index b8afbfbb41..f065d391bf 100644
--- 
a/extide/gradle/src/org/netbeans/modules/gradle/spi/newproject/TemplateOperation.java
+++ 
b/extide/gradle/src/org/netbeans/modules/gradle/spi/newproject/TemplateOperation.java
@@ -318,6 +318,7 @@ public final class TemplateOperation implements Runnable {
                 // Well for some reason we were  not able to load Gradle.
                 // Ignoring that for now
             }
+            gconn.disconnect();
             return Collections.singleton(FileUtil.toFileObject(target));
         }
     }
@@ -492,6 +493,7 @@ public final class TemplateOperation implements Runnable {
                 // Well for some reason we were  not able to load Gradle.
                 // Ignoring that for now
             }
+            gconn.disconnect();
             return null;
         }
 
diff --git 
a/extide/gradle/test/unit/src/org/netbeans/modules/gradle/api/GradleBaseProjectTest.java
 
b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/api/GradleBaseProjectTest.java
index e8b2313fd8..546178028e 100644
--- 
a/extide/gradle/test/unit/src/org/netbeans/modules/gradle/api/GradleBaseProjectTest.java
+++ 
b/extide/gradle/test/unit/src/org/netbeans/modules/gradle/api/GradleBaseProjectTest.java
@@ -245,6 +245,7 @@ public class GradleBaseProjectTest extends 
AbstractGradleProjectTestCase {
         OpenProjects.getDefault().openProjects().get();
         
         NbGradleProject.get(p).toQuality("Load data", 
NbGradleProject.Quality.FULL, false).toCompletableFuture().get();
+        gconn.disconnect();
         return p;
     }
     


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to