mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Gradle daemon services: pass custom gradle user home using the main classloader
This commit is contained in:
@@ -3,14 +3,12 @@
|
||||
*/
|
||||
package org.jetbrains.plugins.gradle.internal.daemon;
|
||||
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import org.gradle.initialization.BuildLayoutParameters;
|
||||
import org.gradle.internal.logging.events.OutputEvent;
|
||||
import org.gradle.internal.logging.events.OutputEventListener;
|
||||
import org.gradle.internal.service.ServiceRegistry;
|
||||
import org.gradle.launcher.daemon.client.DaemonClientFactory;
|
||||
import org.gradle.launcher.daemon.configuration.DaemonParameters;
|
||||
import org.jetbrains.plugins.gradle.settings.GradleSystemSettings;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
@@ -18,11 +16,16 @@ import java.io.File;
|
||||
* @author Vladislav.Soroka
|
||||
*/
|
||||
public abstract class DaemonAction {
|
||||
private final String myServiceDirectoryPath;
|
||||
|
||||
public DaemonAction(String serviceDirectoryPath) {
|
||||
myServiceDirectoryPath = serviceDirectoryPath;
|
||||
}
|
||||
|
||||
protected ServiceRegistry getDaemonServices(DaemonClientFactory daemonClientFactory) {
|
||||
BuildLayoutParameters layout = new BuildLayoutParameters();
|
||||
String serviceDirectoryPath = GradleSystemSettings.getInstance().getServiceDirectoryPath();
|
||||
if (StringUtil.isNotEmpty(serviceDirectoryPath)) {
|
||||
layout.setGradleUserHomeDir(new File(serviceDirectoryPath));
|
||||
if (myServiceDirectoryPath != null && !myServiceDirectoryPath.isEmpty()) {
|
||||
layout.setGradleUserHomeDir(new File(myServiceDirectoryPath));
|
||||
}
|
||||
DaemonParameters daemonParameters = new DaemonParameters(layout);
|
||||
return daemonClientFactory.createStopDaemonServices(new OutputEventListener() {
|
||||
|
||||
+4
@@ -26,6 +26,10 @@ import java.util.Locale;
|
||||
* @author Vladislav.Soroka
|
||||
*/
|
||||
public class DaemonStatusAction extends DaemonAction {
|
||||
public DaemonStatusAction(String serviceDirectoryPath) {
|
||||
super(serviceDirectoryPath);
|
||||
}
|
||||
|
||||
public List<DaemonState> run(DaemonClientFactory daemonClientFactory) {
|
||||
ServiceRegistry daemonServices = getDaemonServices(daemonClientFactory);
|
||||
DaemonConnector daemonConnector = daemonServices.get(DaemonConnector.class);
|
||||
|
||||
@@ -24,6 +24,10 @@ import java.util.List;
|
||||
* @author Vladislav.Soroka
|
||||
*/
|
||||
public class DaemonStopAction extends DaemonAction {
|
||||
public DaemonStopAction(String serviceDirectoryPath) {
|
||||
super(serviceDirectoryPath);
|
||||
}
|
||||
|
||||
public void run(DaemonClientFactory daemonClientFactory) {
|
||||
ServiceRegistry daemonServices = getDaemonServices(daemonClientFactory);
|
||||
DaemonStopClient stopClient = daemonServices.get(DaemonStopClient.class);
|
||||
|
||||
+5
-3
@@ -15,6 +15,7 @@ import org.gradle.tooling.internal.consumer.loader.CachingToolingImplementationL
|
||||
import org.gradle.tooling.internal.consumer.loader.SynchronizedToolingImplementationLoader
|
||||
import org.gradle.tooling.internal.consumer.loader.ToolingImplementationLoader
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
import org.jetbrains.plugins.gradle.settings.GradleSystemSettings
|
||||
|
||||
import java.lang.reflect.Method
|
||||
|
||||
@@ -61,6 +62,7 @@ class GradleDaemonServices {
|
||||
.allowLock(false)
|
||||
.get()
|
||||
|
||||
String serviceDirectoryPath = GradleSystemSettings.instance.getServiceDirectoryPath()
|
||||
def myRawArgData = getSerialized(arg)
|
||||
byte[] myRawResultData = null
|
||||
final ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader()
|
||||
@@ -69,9 +71,9 @@ class GradleDaemonServices {
|
||||
Class<?> clazz = daemonClientClassLoader.loadClass(actionClass.name)
|
||||
def _arg = getObject(myRawArgData)
|
||||
Method method = findMethod(clazz, daemonClientFactory, _arg)
|
||||
|
||||
def result = arg == null ? method.invoke(clazz.newInstance(), daemonClientFactory) :
|
||||
method.invoke(clazz.newInstance(), daemonClientFactory, _arg)
|
||||
Object[] serviceDirParam = [serviceDirectoryPath]
|
||||
def result = arg == null ? method.invoke(clazz.newInstance(serviceDirParam), daemonClientFactory) :
|
||||
method.invoke(clazz.newInstance(serviceDirParam), daemonClientFactory, _arg)
|
||||
if (result instanceof Serializable) {
|
||||
myRawResultData = getSerialized(result)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user