Skip to content

Commit 8b90ecf

Browse files
committed
Automatically merge sourceSet destinations (can opt-out)
use net.minecraftforge.gradle.mergeSourceSets=false in gradle.properties or as a system property
1 parent 62ccaa9 commit 8b90ecf

File tree

6 files changed

+52
-17
lines changed

6 files changed

+52
-17
lines changed

settings.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ dependencyResolutionManagement {
3030

3131
// AccessTransformers Gradle Plugin
3232
// https://plugins.gradle.org/plugin/net.minecraftforge.accesstransformers
33-
version 'accesstransformers', '1.0.0'
33+
version 'accesstransformers', '1.0.1'
3434
library 'accesstransformers-plugin', 'net.minecraftforge.accesstransformers', 'net.minecraftforge.accesstransformers.gradle.plugin' versionRef 'accesstransformers'
3535
library 'accesstransformers-binary', 'net.minecraftforge', 'accesstransformers-gradle' versionRef 'accesstransformers'
3636
bundle 'accesstransformers', ['accesstransformers-plugin', 'accesstransformers-binary']

src/main/groovy/net/minecraftforge/gradle/ForgeGradleProblems.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public ProblemReporter getReporter() {
4646
}
4747

4848
ForgeGradleProblems(Problems problems, ProviderFactory providers) {
49-
this(problems, property -> hasProperty(providers, property));
49+
this(problems, property -> Util.isTrue(providers, property));
5050
}
5151

5252
ForgeGradleProblems(Callable<? extends @UnknownNullability Problems> problems, Callable<? extends @UnknownNullability ProviderFactory> providers) {
@@ -61,17 +61,12 @@ private static Predicate<String> unwrapProperties(Callable<? extends @UnknownNul
6161
return Util.tryElse(
6262
() -> {
6363
var providers = Objects.requireNonNull(supplier.call());
64-
return property -> hasProperty(providers, property);
64+
return property -> Util.isTrue(providers, property);
6565
},
6666
Boolean::getBoolean
6767
);
6868
}
6969

70-
private static boolean hasProperty(ProviderFactory providers, String property) {
71-
return Util.isTrue(providers.gradleProperty(property))
72-
|| Util.isTrue(providers.systemProperty(property));
73-
}
74-
7570
private static ProblemId id(String name, String displayName) {
7671
return ProblemId.create(name, displayName, GROUP);
7772
}

src/main/groovy/net/minecraftforge/gradle/ForgeGradleTask.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.gradle.api.Task;
88
import org.gradle.api.file.DirectoryProperty;
99
import org.gradle.api.provider.Provider;
10+
import org.gradle.api.tasks.Internal;
1011

1112
import java.io.File;
1213

@@ -15,10 +16,12 @@ private ForgeGradlePlugin getPlugin() {
1516
return this.getProject().getPlugins().getPlugin(ForgeGradlePlugin.class);
1617
}
1718

19+
@Internal
1820
default Provider<File> getTool(Tools tool) {
1921
return this.getPlugin().getTool(tool);
2022
}
2123

24+
@Internal
2225
default DirectoryProperty getGlobalCaches() {
2326
return this.getPlugin().getGlobalCaches();
2427
}

src/main/groovy/net/minecraftforge/gradle/MinecraftExtensionImpl.groovy

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ import java.util.function.BiFunction
8585
this.plugin = plugin
8686
this.objects = objects
8787

88-
this.output = objects.directoryProperty().convention(plugin.globalCaches.dir('mc-maven/output').map(problems.ensureDirectory()))
88+
this.output = objects.directoryProperty().convention(plugin.globalCaches.dir('mavenizer/output').map(problems.ensureDirectory()))
8989

9090
this.mappingsProp = objects.property(Mappings)
9191
}
@@ -233,8 +233,16 @@ import java.util.function.BiFunction
233233
if (!repositories.mclibs)
234234
MinecraftExtensionImpl.this.problems.reportMcLibsMavenNotDeclared()
235235

236-
if (!this.runs.empty) {
237-
this.project.getExtensions().getByType(JavaPluginExtension).sourceSets.forEach { sourceSet ->
236+
var sourceSetsDir = objects.directoryProperty().value(this.layout.buildDirectory.dir('sourceSets'))
237+
this.project.getExtensions().getByType(JavaPluginExtension).sourceSets.configureEach { sourceSet ->
238+
if (!Util.isFalse(this.providers, 'net.minecraftforge.gradle.mergeSourceSets')) {
239+
// This is documented in SourceSetOutput's javadoc comment
240+
var unifiedDir = sourceSetsDir.dir(sourceSet.name)
241+
sourceSet.output.resourcesDir = unifiedDir
242+
sourceSet.java.destinationDirectory.set unifiedDir
243+
}
244+
245+
if (!this.runs.empty) {
238246
var allDependencies = this.project.configurations.findByName(sourceSet.runtimeClasspathConfigurationName)?.allDependencies?.findAll { this.minecraftDependencies.contains(it) }
239247

240248
if (allDependencies === null || allDependencies.empty) {

src/main/groovy/net/minecraftforge/gradle/SyncMinecraftMaven.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,9 @@ public SyncMinecraftMaven(Problems problems, ObjectFactory objects, ProviderFact
7575
this.getMainClass().convention(Constants.MCMAVEN_MAIN);
7676

7777
// Minecraft Maven
78-
var defaultDirectory = objects.directoryProperty().value(this.getGlobalCaches().dir("mcmaven"));
79-
this.getCaches().convention(defaultDirectory.dir("cache"));
80-
this.getOutput().convention(defaultDirectory.dir("output"));
78+
var defaultDirectory = objects.directoryProperty().value(this.getGlobalCaches().dir("mavenizer").map(this.problems.ensureDirectory()));
79+
this.getCaches().convention(defaultDirectory.dir("cache").map(this.problems.ensureDirectory()));
80+
this.getOutput().convention(defaultDirectory.dir("output").map(this.problems.ensureDirectory()));
8181

8282
this.onlyIf(
8383
"Minecraft Mavenizer will not run if no Minecraft dependencies are present.",
@@ -97,7 +97,7 @@ public void exec() {
9797
private void exec(Request request) {
9898
this.execOperations.javaexec(spec -> {
9999
spec.setClasspath(this.getExecutable());
100-
spec.setExecutable(this.getJavaLauncher());
100+
spec.setExecutable(this.getJavaLauncher().get());
101101
spec.getMainClass().set(this.getMainClass());
102102

103103
spec.setArgs(this.argsFor(request));
@@ -108,6 +108,7 @@ private List<String> argsFor(Request request) {
108108
return List.of(
109109
"--maven",
110110
"--cache", this.getCaches().get().getAsFile().getAbsolutePath(),
111+
"--output", this.getOutput().get().getAsFile().getAbsolutePath(),
111112
"--jdk-cache", this.getCaches().dir("jdks").get().getAsFile().getAbsolutePath(),
112113
"--artifact", request.module,
113114
"--version", request.version

src/main/groovy/net/minecraftforge/gradle/Util.java

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.gradle.api.artifacts.ModuleVersionSelector;
1414
import org.gradle.api.plugins.JavaPluginExtension;
1515
import org.gradle.api.provider.Provider;
16+
import org.gradle.api.provider.ProviderFactory;
1617
import org.gradle.api.tasks.TaskProvider;
1718
import org.gradle.jvm.toolchain.JavaLanguageVersion;
1819
import org.gradle.jvm.toolchain.JavaLauncher;
@@ -98,8 +99,35 @@ static String artifactPath(String group, String name, String version, @Nullable
9899
return s == null || s.isBlank() ? null : s;
99100
}
100101

101-
static boolean isTrue(Provider<? extends String> provider) {
102-
return provider.map(Boolean::parseBoolean).getOrElse(false);
102+
static @Nullable String getProperty(ProviderFactory providers, String property) {
103+
return providers.gradleProperty(property).orElse(providers.systemProperty(property)).getOrNull();
104+
}
105+
106+
static @Nullable Boolean getBoolean(ProviderFactory providers, String property) {
107+
var gradleBoolean = getBoolean(providers.gradleProperty(property));
108+
return gradleBoolean != null ? gradleBoolean : getBoolean(providers.systemProperty(property));
109+
}
110+
111+
private static @Nullable Boolean getBoolean(Provider<? extends String> provider) {
112+
if (Boolean.TRUE.equals(provider.map("true"::equalsIgnoreCase).getOrNull())) return true;
113+
if (Boolean.FALSE.equals(provider.map("false"::equalsIgnoreCase).getOrNull())) return false;
114+
return null;
115+
}
116+
117+
static boolean isTrue(ProviderFactory providers, String property) {
118+
return isTrue(providers.gradleProperty(property)) || isTrue(providers.systemProperty(property));
119+
}
120+
121+
private static boolean isTrue(Provider<? extends String> provider) {
122+
return Boolean.TRUE.equals(getBoolean(provider));
123+
}
124+
125+
static boolean isFalse(ProviderFactory providers, String property) {
126+
return isFalse(providers.gradleProperty(property)) || isFalse(providers.systemProperty(property));
127+
}
128+
129+
private static boolean isFalse(Provider<? extends String> provider) {
130+
return Boolean.FALSE.equals(getBoolean(provider));
103131
}
104132

105133
static <T> T tryElse(Callable<? extends T> value, T orElse) {

0 commit comments

Comments
 (0)