/*
* Copyright 2010 the original author or authors.
*
* Licensed 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.gradle.internal.service.scopes;
import org.gradle.StartParameter;
import org.gradle.api.internal.*;
import org.gradle.api.internal.changedetection.state.InMemoryTaskArtifactCache;
import org.gradle.api.internal.classpath.DefaultModuleRegistry;
import org.gradle.api.internal.classpath.DefaultPluginModuleRegistry;
import org.gradle.api.internal.classpath.ModuleRegistry;
import org.gradle.api.internal.classpath.PluginModuleRegistry;
import org.gradle.api.internal.file.*;
import org.gradle.api.internal.initialization.loadercache.ClassLoaderCacheFactory;
import org.gradle.cache.internal.*;
import org.gradle.cache.internal.locklistener.DefaultFileLockContentionHandler;
import org.gradle.cache.internal.locklistener.FileLockContentionHandler;
import org.gradle.cli.CommandLineConverter;
import org.gradle.initialization.ClassLoaderRegistry;
import org.gradle.initialization.DefaultClassLoaderRegistry;
import org.gradle.initialization.DefaultCommandLineConverter;
import org.gradle.initialization.DefaultGradleLauncherFactory;
import org.gradle.internal.classloader.ClassLoaderFactory;
import org.gradle.internal.classloader.DefaultClassLoaderFactory;
import org.gradle.internal.concurrent.DefaultExecutorFactory;
import org.gradle.internal.concurrent.ExecutorFactory;
import org.gradle.internal.environment.GradleBuildEnvironment;
import org.gradle.internal.nativeintegration.ProcessEnvironment;
import org.gradle.internal.nativeintegration.filesystem.FileSystem;
import org.gradle.internal.reflect.DirectInstantiator;
import org.gradle.internal.reflect.Instantiator;
import org.gradle.internal.service.ServiceLocator;
import org.gradle.internal.service.ServiceRegistration;
import org.gradle.internal.service.ServiceRegistry;
import org.gradle.listener.DefaultListenerManager;
import org.gradle.listener.ListenerManager;
import org.gradle.messaging.remote.MessagingServer;
import org.gradle.messaging.remote.internal.MessagingServices;
import org.gradle.messaging.remote.internal.inet.InetAddressFactory;
import java.util.List;
/**
* Defines the global services shared by all services in a given process. This includes the Gradle CLI, daemon and tooling API provider.
*/
public class GlobalScopeServices {
private GradleBuildEnvironment environment;
public GlobalScopeServices(final boolean longLiving) {
this.environment = new GradleBuildEnvironment() {
public boolean isLongLivingProcess() {
return longLiving;
}
};
}
void configure(ServiceRegistration registration, ClassLoaderRegistry classLoaderRegistry) {
final List<PluginServiceRegistry> pluginServiceFactories = new ServiceLocator(classLoaderRegistry.getRuntimeClassLoader(), classLoaderRegistry.getPluginsClassLoader()).getAll(PluginServiceRegistry.class);
for (PluginServiceRegistry pluginServiceRegistry : pluginServiceFactories) {
registration.add(PluginServiceRegistry.class, pluginServiceRegistry);
pluginServiceRegistry.registerGlobalServices(registration);
}
}
DefaultGradleLauncherFactory createGradleLauncherFactory(ServiceRegistry services) {
return new DefaultGradleLauncherFactory(services);
}
TemporaryFileProvider createTemporaryFileProvider() {
return new TmpDirTemporaryFileProvider();
}
GradleBuildEnvironment createGradleBuildEnvironment() {
return environment;
}
CommandLineConverter<StartParameter> createCommandLine2StartParameterConverter() {
return new DefaultCommandLineConverter();
}
ClassPathRegistry createClassPathRegistry(ModuleRegistry moduleRegistry, PluginModuleRegistry pluginModuleRegistry) {
return new DefaultClassPathRegistry(
new DefaultClassPathProvider(moduleRegistry),
new DynamicModulesClassPathProvider(moduleRegistry,
pluginModuleRegistry));
}
DefaultModuleRegistry createModuleRegistry() {
return new DefaultModuleRegistry();
}
DocumentationRegistry createDocumentationRegistry() {
return new DocumentationRegistry();
}
PluginModuleRegistry createPluginModuleRegistry(ModuleRegistry moduleRegistry) {
return new DefaultPluginModuleRegistry(moduleRegistry);
}
protected CacheFactory createCacheFactory(FileLockManager fileLockManager) {
return new DefaultCacheFactory(fileLockManager);
}
DefaultClassLoaderRegistry createClassLoaderRegistry(ClassPathRegistry classPathRegistry, ClassLoaderFactory classLoaderFactory) {
return new DefaultClassLoaderRegistry(classPathRegistry, classLoaderFactory);
}
ListenerManager createListenerManager() {
return new DefaultListenerManager();
}
ClassLoaderFactory createClassLoaderFactory() {
return new DefaultClassLoaderFactory();
}
MessagingServices createMessagingServices(ClassLoaderRegistry classLoaderRegistry) {
return new MessagingServices(getClass().getClassLoader());
}
MessagingServer createMessagingServer(MessagingServices messagingServices) {
return messagingServices.get(MessagingServer.class);
}
ClassGenerator createClassGenerator() {
return new AsmBackedClassGenerator();
}
Instantiator createInstantiator(ClassGenerator classGenerator) {
return new ClassGeneratorBackedInstantiator(classGenerator, new DirectInstantiator());
}
ExecutorFactory createExecutorFactory() {
return new DefaultExecutorFactory();
}
FileLockManager createFileLockManager(ProcessEnvironment processEnvironment, FileLockContentionHandler fileLockContentionHandler) {
return new DefaultFileLockManager(
new DefaultProcessMetaDataProvider(
processEnvironment),
fileLockContentionHandler);
}
InMemoryTaskArtifactCache createInMemoryTaskArtifactCache() {
return new InMemoryTaskArtifactCache();
}
DefaultFileLockContentionHandler createFileLockContentionHandler(ExecutorFactory executorFactory, MessagingServices messagingServices) {
return new DefaultFileLockContentionHandler(
executorFactory,
messagingServices.get(InetAddressFactory.class)
);
}
FileResolver createFileResolver(FileSystem fileSystem) {
return new IdentityFileResolver(fileSystem);
}
FileLookup createFileLookup(FileSystem fileSystem) {
return new DefaultFileLookup(fileSystem);
}
ClassLoaderCacheFactory createClassLoaderCacheFactory() {
return new ClassLoaderCacheFactory();
}
}