Skip to content

Commit 9844177

Browse files
committed
Change Mavenizer dependency output check strategy
1 parent 091d0d6 commit 9844177

File tree

4 files changed

+44
-36
lines changed

4 files changed

+44
-36
lines changed

src/main/java/net/minecraftforge/gradle/internal/ForgeGradleFlowAction.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,4 +119,24 @@ protected void run(Parameters parameters) {
119119
parameters.problems().reportAccessTransformersNotApplied(e);
120120
}
121121
}
122+
123+
static abstract class MavenizerSyncCheck extends ForgeGradleFlowAction<MavenizerSyncCheck.Parameters> {
124+
static abstract class Parameters extends ForgeGradleFlowAction.Parameters {
125+
final DirectoryProperty dependencyOutput = this.getObjects().directoryProperty();
126+
final Property<String> dependency = this.getObjects().property(String.class);
127+
128+
@Inject
129+
public Parameters() { }
130+
}
131+
132+
@Inject
133+
public MavenizerSyncCheck() { }
134+
135+
@Override
136+
protected void run(Parameters parameters) {
137+
if (parameters.dependencyOutput.getAsFile().get().exists()) return;
138+
139+
parameters.problems().mavenizerOutOfDate(parameters.getFailure().isPresent(), parameters.dependency.get());
140+
}
141+
}
122142
}

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

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66

77
import net.minecraftforge.gradle.MinecraftMappings;
88
import net.minecraftforge.gradleutils.shared.EnhancedProblems;
9+
import org.gradle.api.Action;
910
import org.gradle.api.artifacts.Dependency;
1011
import org.gradle.api.artifacts.ExternalModuleDependency;
12+
import org.gradle.api.problems.ProblemSpec;
1113
import org.gradle.api.problems.Problems;
1214
import org.gradle.api.problems.Severity;
1315
import org.gradle.api.provider.ProviderFactory;
@@ -127,10 +129,12 @@ RuntimeException changingMinecraftDependency(Dependency dependency) {
127129
//endregion
128130

129131
//region Minecraft Maven
130-
RuntimeException mavenizerOutOfDateCompile(Object dependency) {
131-
return this.throwing(new IllegalStateException(), "mavenizer-out-of-date-for-compile", "Minecraft Mavenizer is out-of-date", spec -> spec
132+
void mavenizerOutOfDate(boolean throwIt, Object dependency) {
133+
String name = "mavenizer-out-of-date";
134+
String displayName = "Minecraft Mavenizer is out-of-date";
135+
Action<? super ProblemSpec> problemSpec = spec -> spec
132136
.details("""
133-
Gradle cannot compile your sources because the Minecraft Mavenizer is out-of-date.
137+
Gradle cannot compile your sources or run the game because the Minecraft Mavenizer is out-of-date.
134138
The Mavenizer must be re-run in order for the changes made to the Minecraft dependency to take effect.
135139
Affected dependency: '%s'"""
136140
.formatted(dependency))
@@ -139,22 +143,12 @@ RuntimeException mavenizerOutOfDateCompile(Object dependency) {
139143
.solution("Run `gradlew` with no arguments, as this will automatically synchronize the Mavenizer.")
140144
.solution("Manually run the `syncMavenizer` task, located in the 'Build Setup' group.")
141145
.solution("Temporary revert any edits to the Minecraft dependency until the Mavenizer is re-run.")
142-
.solution(HELP_MESSAGE));
143-
}
146+
.solution(HELP_MESSAGE);
144147

145-
RuntimeException mavenizerOutOfDateRunTask(Object dependency) {
146-
return this.throwing(new IllegalStateException(), "mavenizer-out-of-date-for-run", "Minecraft Mavenizer is out-of-date", spec -> spec
147-
.details("""
148-
Gradle cannot run the game with Slime Launcher because the Minecraft Mavenizer is out-of-date.
149-
The Mavenizer must be re-run in order for the changes made to the Minecraft dependency to take effect.
150-
Affected dependency: '%s'"""
151-
.formatted(dependency))
152-
.severity(Severity.ERROR)
153-
.solution("Re-import your project in your IDE, as this will automatically synchronize the Mavenizer.")
154-
.solution("Run `gradlew` with no arguments, as this will automatically synchronize the Mavenizer.")
155-
.solution("Manually run the `syncMavenizer` task, located in the 'Build Setup' group.")
156-
.solution("Temporary revert any edits to the Minecraft dependency until the Mavenizer is re-run.")
157-
.solution(HELP_MESSAGE));
148+
if (throwIt)
149+
throw this.throwing(new IllegalStateException(displayName), name, displayName, problemSpec);
150+
else
151+
this.report(name, displayName, problemSpec);
158152
}
159153

160154
void reportMcMavenNotDeclared() {

src/main/java/net/minecraftforge/gradle/internal/MinecraftDependencyImpl.java

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import org.gradle.api.file.Directory;
2828
import org.gradle.api.file.ProjectLayout;
2929
import org.gradle.api.file.RegularFileProperty;
30+
import org.gradle.api.flow.FlowProviders;
31+
import org.gradle.api.flow.FlowScope;
3032
import org.gradle.api.model.ObjectFactory;
3133
import org.gradle.api.plugins.ExtensionAware;
3234
import org.gradle.api.plugins.JavaPluginExtension;
@@ -36,6 +38,7 @@
3638
import org.gradle.api.tasks.SourceSet;
3739
import org.gradle.api.tasks.TaskProvider;
3840
import org.gradle.api.tasks.compile.JavaCompile;
41+
import org.gradle.internal.impldep.com.google.common.base.Optional;
3942
import org.jetbrains.annotations.Nullable;
4043

4144
import javax.inject.Inject;
@@ -60,6 +63,10 @@ abstract class MinecraftDependencyImpl implements MinecraftDependencyInternal {
6063

6164
protected abstract @Inject Project getProject();
6265

66+
protected abstract @Inject FlowScope getFlowScope();
67+
68+
protected abstract @Inject FlowProviders getFlowProviders();
69+
6370
protected abstract @Inject ObjectFactory getObjects();
6471

6572
protected abstract @Inject ProjectLayout getProjectLayout();
@@ -155,13 +162,13 @@ public void handle(Configuration configuration) {
155162

156163
@Override
157164
public void handle(SourceSet sourceSet) {
158-
var problems = this.problems;
159165
var asString = this.asString.get();
160166
var dependencyOutput = this.mavenizerOutput.map(dir -> dir.dir(this.asPath)).get().get().getAsFile();
161-
getProject().getTasks().named(sourceSet.getCompileJavaTaskName(), JavaCompile.class, task -> {
162-
task.doFirst(t -> {
163-
if (!dependencyOutput.exists())
164-
throw problems.mavenizerOutOfDateCompile(asString);
167+
getFlowScope().always(ForgeGradleFlowAction.MavenizerSyncCheck.class, spec -> {
168+
spec.parameters(parameters -> {
169+
parameters.getFailure().set(getFlowProviders().getBuildWorkResult().map(r -> r.getFailure().orElse(null)));
170+
parameters.dependencyOutput.set(dependencyOutput);
171+
parameters.dependency.set(asString);
165172
});
166173
});
167174

@@ -176,18 +183,6 @@ public void handle(SourceSet sourceSet) {
176183
this.sourceSetName = sourceSet.getName();
177184
}
178185

179-
void handle(TaskProvider<SlimeLauncherExec> runTask) {
180-
var problems = this.problems;
181-
var asString = this.asString.get();
182-
var dependencyOutput = this.mavenizerOutput.map(dir -> dir.dir(this.asPath)).get().get().getAsFile();
183-
runTask.configure(task -> {
184-
task.doFirst(t -> {
185-
if (!dependencyOutput.exists())
186-
throw problems.mavenizerOutOfDateRunTask(asString);
187-
});
188-
});
189-
}
190-
191186
@Override
192187
public MinecraftMappings getMappings() {
193188
try {

src/main/java/net/minecraftforge/gradle/internal/MinecraftExtensionImpl.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,6 @@ private void finish(Project project) {
270270
var impl = (MinecraftDependencyImpl) minecraftDependency;
271271
this.runs.forEach(options -> {
272272
var task = SlimeLauncherExec.register(project, sourceSet, options, impl.module.get(), impl.version.get(), impl.asPath.get(), impl.asString.get(), single);
273-
impl.handle(task);
274273
});
275274
}
276275
});

0 commit comments

Comments
 (0)