Make remapped configurations lazy
This commit is contained in:
		
							parent
							
								
									891870584d
								
							
						
					
					
						commit
						a5bc38a940
					
				
					 4 changed files with 131 additions and 43 deletions
				
			
		|  | @ -48,6 +48,7 @@ import org.jetbrains.annotations.ApiStatus; | |||
| 
 | ||||
| import net.fabricmc.loom.api.decompilers.LoomDecompiler; | ||||
| import net.fabricmc.loom.configuration.LoomDependencyManager; | ||||
| import net.fabricmc.loom.configuration.LoomProjectData; | ||||
| import net.fabricmc.loom.configuration.ide.RunConfigSettings; | ||||
| import net.fabricmc.loom.configuration.processors.JarProcessor; | ||||
| import net.fabricmc.loom.configuration.processors.JarProcessorManager; | ||||
|  | @ -80,6 +81,9 @@ public class LoomGradleExtension { | |||
| 	private Mercury[] srcMercuryCache = new Mercury[2]; | ||||
| 	private Set<File> mixinMappings = Collections.synchronizedSet(new HashSet<>()); | ||||
| 
 | ||||
| 	@ApiStatus.Internal | ||||
| 	private final LoomProjectData projectData; | ||||
| 
 | ||||
| 	private NamedDomainObjectContainer<RunConfigSettings> runConfigs; | ||||
| 
 | ||||
| 	/** | ||||
|  | @ -119,6 +123,7 @@ public class LoomGradleExtension { | |||
| 		this.runConfigs = project.container(RunConfigSettings.class, | ||||
| 				baseName -> new RunConfigSettings(project, baseName)); | ||||
| 		this.log4jConfigs = project.files(getDefaultLog4jConfigFile()); | ||||
| 		projectData = new LoomProjectData(project); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
|  | @ -371,4 +376,9 @@ public class LoomGradleExtension { | |||
| 	public NamedDomainObjectContainer<RunConfigSettings> getRunConfigs() { | ||||
| 		return runConfigs; | ||||
| 	} | ||||
| 
 | ||||
| 	@ApiStatus.Internal | ||||
| 	public LoomProjectData getProjectData() { | ||||
| 		return projectData; | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -46,6 +46,7 @@ import org.gradle.language.base.artifact.SourcesArtifact; | |||
| 
 | ||||
| import net.fabricmc.loom.LoomGradleExtension; | ||||
| import net.fabricmc.loom.LoomGradlePlugin; | ||||
| import net.fabricmc.loom.configuration.LoomProjectData; | ||||
| import net.fabricmc.loom.configuration.RemappedConfigurationEntry; | ||||
| import net.fabricmc.loom.configuration.mods.ModProcessor; | ||||
| import net.fabricmc.loom.configuration.processors.dependency.ModDependencyInfo; | ||||
|  | @ -64,9 +65,11 @@ public class ModCompileRemapper { | |||
| 		final File modStore = extension.getRemappedModCache(); | ||||
| 		final RemapData remapData = new RemapData(mappingsSuffix, modStore); | ||||
| 
 | ||||
| 		final LoomProjectData data = extension.getProjectData(); | ||||
| 
 | ||||
| 		for (RemappedConfigurationEntry entry : Constants.MOD_COMPILE_ENTRIES) { | ||||
| 			data.getLazyConfigurationProvider(entry.getRemappedConfiguration()).configure(remappedConfig -> { | ||||
| 				Configuration sourceConfig = project.getConfigurations().getByName(entry.getSourceConfiguration()); | ||||
| 			Configuration remappedConfig = project.getConfigurations().getByName(entry.getRemappedConfiguration()); | ||||
| 				Configuration regularConfig = project.getConfigurations().getByName(entry.getTargetConfiguration(project.getConfigurations())); | ||||
| 
 | ||||
| 				List<ModDependencyInfo> modDependencies = new ArrayList<>(); | ||||
|  | @ -118,6 +121,7 @@ public class ModCompileRemapper { | |||
| 				for (ModDependencyInfo info : modDependencies) { | ||||
| 					project.getDependencies().add(info.targetConfig.getName(), info.getRemappedNotation()); | ||||
| 				} | ||||
| 			}); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -72,11 +72,15 @@ public final class CompileConfiguration { | |||
| 		project.getConfigurations().maybeCreate(Constants.Configurations.LOOM_DEVELOPMENT_DEPENDENCIES); | ||||
| 		project.getConfigurations().maybeCreate(Constants.Configurations.UNPICK_CLASSPATH); | ||||
| 
 | ||||
| 		LoomProjectData data = project.getExtensions().getByType(LoomGradleExtension.class).getProjectData(); | ||||
| 
 | ||||
| 		for (RemappedConfigurationEntry entry : Constants.MOD_COMPILE_ENTRIES) { | ||||
| 			Configuration compileModsConfig = project.getConfigurations().maybeCreate(entry.getSourceConfiguration()); | ||||
| 			compileModsConfig.setTransitive(true); | ||||
| 			Configuration compileModsMappedConfig = project.getConfigurations().maybeCreate(entry.getRemappedConfiguration()); | ||||
| 			compileModsMappedConfig.setTransitive(false); // Don't get transitive deps of already remapped mods | ||||
| 			data.createLazyConfiguration(entry.getSourceConfiguration()) | ||||
| 					.configure(configuration -> configuration.setTransitive(true)); | ||||
| 
 | ||||
| 			// Don't get transitive deps of already remapped mods | ||||
| 			data.createLazyConfiguration(entry.getRemappedConfiguration()) | ||||
| 					.configure(configuration -> configuration.setTransitive(false)); | ||||
| 
 | ||||
| 			extendsFrom(entry.getTargetConfiguration(project.getConfigurations()), entry.getRemappedConfiguration(), project); | ||||
| 
 | ||||
|  |  | |||
|  | @ -0,0 +1,70 @@ | |||
| /* | ||||
|  * This file is part of fabric-loom, licensed under the MIT License (MIT). | ||||
|  * | ||||
|  * Copyright (c) 2016, 2017, 2018 FabricMC | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
|  * of this software and associated documentation files (the "Software"), to deal | ||||
|  * in the Software without restriction, including without limitation the rights | ||||
|  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
|  * copies of the Software, and to permit persons to whom the Software is | ||||
|  * furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in all | ||||
|  * copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
|  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||||
|  * SOFTWARE. | ||||
|  */ | ||||
| 
 | ||||
| package net.fabricmc.loom.configuration; | ||||
| 
 | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| import org.gradle.api.NamedDomainObjectProvider; | ||||
| import org.gradle.api.Project; | ||||
| import org.gradle.api.artifacts.Configuration; | ||||
| import org.jetbrains.annotations.ApiStatus; | ||||
| 
 | ||||
| @ApiStatus.Internal | ||||
| /** | ||||
|  * This class is stored in the gradle extension, and should not be used outside of loom. | ||||
|  * It contains data/info related to the current project | ||||
|  */ | ||||
| public final class LoomProjectData { | ||||
| 	private final Project project; | ||||
| 	private final Map<String, NamedDomainObjectProvider<Configuration>> lazyConfigurations = new HashMap<>(); | ||||
| 
 | ||||
| 	public LoomProjectData(Project project) { | ||||
| 		this.project = Objects.requireNonNull(project); | ||||
| 	} | ||||
| 
 | ||||
| 	public NamedDomainObjectProvider<Configuration> createLazyConfiguration(String name) { | ||||
| 		NamedDomainObjectProvider<Configuration> provider = project.getConfigurations().register(name); | ||||
| 
 | ||||
| 		if (lazyConfigurations.containsKey(name)) { | ||||
| 			throw new IllegalStateException("Duplicate configuration name" + name); | ||||
| 		} | ||||
| 
 | ||||
| 		lazyConfigurations.put(name, provider); | ||||
| 
 | ||||
| 		return provider; | ||||
| 	} | ||||
| 
 | ||||
| 	public NamedDomainObjectProvider<Configuration> getLazyConfigurationProvider(String name) { | ||||
| 		NamedDomainObjectProvider<Configuration> provider = lazyConfigurations.get(name); | ||||
| 
 | ||||
| 		if (provider == null) { | ||||
| 			throw new NullPointerException("Could not find provider with name: " + name); | ||||
| 		} | ||||
| 
 | ||||
| 		return provider; | ||||
| 	} | ||||
| } | ||||
		Loading…
	
		Reference in a new issue