Skip to content

Commit 7c7850b

Browse files
committed
Fix AT apply in and add tests for it when in binpatch mode.
1 parent 4fe80b2 commit 7c7850b

8 files changed

Lines changed: 128 additions & 10 deletions

File tree

dsl/common/src/main/groovy/net/neoforged/gradle/dsl/common/runtime/tasks/tree/AndTaskTreeAdapter.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class AndTaskTreeAdapter implements TaskTreeAdapter {
3131
if (currentAdapted != null)
3232
dependentTaskConfigurationHandler.accept(currentAdapted);
3333

34-
final TaskProvider<? extends Runtime> afterAdapted = right.adapt(definition, currentAdapted, runtimeWorkspace, gameArtifacts, mappingVersionData, dependentTaskConfigurationHandler);
34+
final TaskProvider<? extends Runtime> afterAdapted = right.adapt(definition, currentAdapted != null ? currentAdapted : previousTasksOutput, runtimeWorkspace, gameArtifacts, mappingVersionData, dependentTaskConfigurationHandler);
3535

3636
if (currentAdapted != null && afterAdapted == null)
3737
return currentAdapted;

userdev/src/functionalTest/groovy/net/neoforged/gradle/userdev/AccessTransformerTests.groovy

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,56 @@ class AccessTransformerTests extends BuilderBasedTestSpecification {
5858
initialRun.task(":compileJava").outcome == TaskOutcome.SUCCESS
5959
}
6060

61+
@Override
62+
protected File getTestTempDirectory() {
63+
return new File("tests")
64+
}
65+
66+
def "the userdev runtime supports loading ats from a file with the decompiler disabled"() {
67+
given:
68+
def project = create("userdev_supports_ats_from_file_decompiler_disabled", {
69+
it.build("""
70+
java {
71+
toolchain {
72+
languageVersion = JavaLanguageVersion.of(21)
73+
}
74+
}
75+
76+
minecraft.accessTransformers.file rootProject.file('src/main/resources/META-INF/accesstransformer.cfg')
77+
78+
dependencies {
79+
implementation 'net.neoforged:neoforge:+'
80+
}
81+
""")
82+
it.file("src/main/resources/META-INF/accesstransformer.cfg", """public-f net.minecraft.client.Minecraft fixerUpper # fixerUpper""")
83+
it.file("src/main/java/net/neoforged/gradle/userdev/FunctionalTests.java", """
84+
package net.neoforged.gradle.userdev;
85+
86+
import net.minecraft.client.Minecraft;
87+
88+
public class FunctionalTests {
89+
public static void main(String[] args) {
90+
System.out.println(Minecraft.getInstance().fixerUpper.getClass().toString());
91+
}
92+
}
93+
""")
94+
it.withToolchains()
95+
it.withGlobalCacheDirectory(tempDir)
96+
it.parallel()
97+
it.property("neogradle.subsystems.decompiler.enabled", "false")
98+
})
99+
100+
when:
101+
def initialRun = project.run {
102+
it.tasks('compileJava')
103+
it.stacktrace()
104+
}
105+
106+
then:
107+
initialRun.task(":compileJava").outcome == TaskOutcome.SUCCESS
108+
initialRun.task(":neoFormDecompile") == null
109+
}
110+
61111
def "the userdev runtime supports loading ats from a file after the dependencies block"() {
62112
given:
63113
def project = create("userdev_supports_ats_from_file", {

userdev/src/main/java/net/neoforged/gradle/userdev/runtime/extension/UserDevRuntimeExtension.java

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22

33
import net.neoforged.gradle.common.dependency.ExtraJarDependencyManager;
44
import net.neoforged.gradle.common.runtime.extensions.CommonRuntimeExtension;
5+
import net.neoforged.gradle.common.runtime.tasks.BinaryAccessTransformer;
56
import net.neoforged.gradle.common.util.*;
67
import net.neoforged.gradle.common.util.run.TypesUtil;
8+
import net.neoforged.gradle.dsl.common.extensions.AccessTransformers;
9+
import net.neoforged.gradle.dsl.common.extensions.Minecraft;
710
import net.neoforged.gradle.dsl.common.extensions.subsystems.Conventions;
811
import net.neoforged.gradle.dsl.common.extensions.subsystems.Decompiler;
912
import net.neoforged.gradle.dsl.common.extensions.subsystems.Subsystems;
@@ -26,6 +29,7 @@
2629
import org.gradle.api.artifacts.Dependency;
2730
import org.gradle.api.file.FileTree;
2831
import org.gradle.api.provider.Provider;
32+
import org.gradle.api.tasks.TaskProvider;
2933
import org.jetbrains.annotations.NotNull;
3034
import org.jetbrains.annotations.Nullable;
3135

@@ -47,6 +51,8 @@ public UserDevRuntimeExtension(Project project)
4751
protected @NotNull UserDevRuntimeDefinition doCreate(UserDevRuntimeSpecification spec)
4852
{
4953
final NeoFormRuntimeExtension neoFormRuntimeExtension = getProject().getExtensions().getByType(NeoFormRuntimeExtension.class);
54+
final Decompiler decompilerSubsystemConfiguration = getProject().getExtensions().getByType(Subsystems.class).getDecompiler();
55+
final Minecraft minecraftExtension = getProject().getExtensions().getByType(Minecraft.class);
5056

5157
final UserdevProfile userDevProfile = spec.getProfile();
5258
final FileTree userDevJar = spec.getUserDevArchive();
@@ -56,7 +62,7 @@ public UserDevRuntimeExtension(Project project)
5662
"AdditionalDependenciesFor" + spec.getIdentifier()
5763
);
5864

59-
if (useCombinedJarWithNeoForgeOnRecompile(spec, userDevProfile))
65+
if (useCombinedJarWithNeoForgeOnRecompile(userDevProfile))
6066
{
6167
userDevAdditionalDependenciesConfiguration.getDependencies().addLater(
6268
userDevProfile.getUniversalJarArtifactCoordinate().map(spec.getProject().getDependencies()::create)
@@ -86,7 +92,7 @@ public UserDevRuntimeExtension(Project project)
8692

8793
builder.withPostTaskAdapter("patch", createPatchAdapter(userDevJar, userDevProfile.getSourcePatchesDirectory().get()));
8894

89-
if (!useCombinedJarWithNeoForgeOnRecompile(spec, userDevProfile))
95+
if (!useCombinedJarWithNeoForgeOnRecompile(userDevProfile))
9096
{
9197
builder.withTaskCustomizer("inject", InjectZipContent.class, task -> {
9298
FileTree injectionDirectoryTree;
@@ -106,12 +112,35 @@ public UserDevRuntimeExtension(Project project)
106112
ConfigurationUtils.getArtifactProvider(getProject(), "NeoForgeRawLookupFor" + spec.getIdentifier(), userDevProfile.getUniversalJarArtifactCoordinate())
107113
);
108114
});
115+
} else if (decompilerSubsystemConfiguration.getIsDisabled().get()){
116+
builder.withPostTaskAdapter("setup", (definition, previousTasksOutput, runtimeWorkspace, gameArtifacts, mappingVersionData, dependentTaskConfigurationHandler) -> {
117+
final AccessTransformers userAts = minecraftExtension.getAccessTransformers();
118+
119+
if (accessTransformerFiles.getFiles().isEmpty()) {
120+
return null;
121+
}
122+
123+
final TaskProvider<? extends BinaryAccessTransformer> task = CommonRuntimeTaskUtils.createBinaryAccessTransformer(
124+
definition,
125+
"",
126+
userAts.getFiles().getAsFileTree()
127+
);
128+
129+
task.configure(t -> {
130+
t.getInputFile().set(previousTasksOutput.flatMap(WithOutput::getOutput));
131+
t.dependsOn(previousTasksOutput);
132+
});
133+
134+
dependentTaskConfigurationHandler.accept(task);
135+
136+
return task;
137+
});
109138
}
110139
});
111140

112141
spec.setMinecraftVersion(neoFormRuntimeDefinition.getSpecification().getMinecraftVersion());
113142

114-
if (!useCombinedJarWithNeoForgeOnRecompile(spec, userDevProfile))
143+
if (!useCombinedJarWithNeoForgeOnRecompile(userDevProfile))
115144
{
116145
//Create the client-extra jar dependency.
117146
final Dependency clientExtraJar = spec.getProject().getDependencies().create(
@@ -139,7 +168,7 @@ public UserDevRuntimeExtension(Project project)
139168
final FileTree userDevJar)
140169
{
141170
return (steps, functions) -> {
142-
if (!useCombinedJarWithNeoForgeOnRecompile(spec, userDevProfile))
171+
if (!useCombinedJarWithNeoForgeOnRecompile(userDevProfile))
143172
{
144173
return;
145174
}
@@ -170,7 +199,6 @@ public UserDevRuntimeExtension(Project project)
170199

171200
final Subsystems subsystems = spec.getProject().getExtensions().getByType(Subsystems.class);
172201
final SetupConfiguration configuration = buildSetupConfiguration(
173-
spec,
174202
userDevProfile,
175203
userDevJar
176204
);
@@ -199,10 +227,10 @@ private record SetupConfiguration(
199227
List<String> arguments,
200228
Map<String, String> values) {}
201229

202-
private SetupConfiguration buildSetupConfiguration(UserDevRuntimeSpecification spec, final UserdevProfile userDevProfile, final FileTree userDevJar)
230+
private SetupConfiguration buildSetupConfiguration(final UserdevProfile userDevProfile, final FileTree userDevJar)
203231
{
204232
final Decompiler decompilerSubsystemConfiguration = getProject().getExtensions().getByType(Subsystems.class).getDecompiler();
205-
if (decompilerSubsystemConfiguration.getIsDisabled().get() && useCombinedJarWithNeoForgeOnRecompile(spec, userDevProfile))
233+
if (decompilerSubsystemConfiguration.getIsDisabled().get() && useCombinedJarWithNeoForgeOnRecompile(userDevProfile))
206234
{
207235
return new SetupConfiguration(
208236
List.of(
@@ -245,7 +273,7 @@ private SetupConfiguration buildSetupConfiguration(UserDevRuntimeSpecification s
245273
);
246274
}
247275

248-
private boolean useCombinedJarWithNeoForgeOnRecompile(final UserDevRuntimeSpecification specification, final UserdevProfile userDevProfile)
276+
private boolean useCombinedJarWithNeoForgeOnRecompile(final UserdevProfile userDevProfile)
249277
{
250278
return userDevProfile.getFeatures()
251279
.flatMap(UserdevProfile.Features::getUsesCombinedBinaryPatches)
@@ -293,7 +321,7 @@ protected void afterRegistration(UserDevRuntimeDefinition runtime)
293321
private void bakeDefinition(UserDevRuntimeDefinition definition)
294322
{
295323
final Decompiler decompilerSubsystemConfiguration = this.getProject().getExtensions().getByType(Subsystems.class).getDecompiler();
296-
if (decompilerSubsystemConfiguration.getIsDisabled().get() && useCombinedJarWithNeoForgeOnRecompile(definition.getSpecification(), definition.getUserdevConfiguration()))
324+
if (decompilerSubsystemConfiguration.getIsDisabled().get() && useCombinedJarWithNeoForgeOnRecompile(definition.getUserdevConfiguration()))
297325
{
298326
definition.getNeoFormRuntimeDefinition().getRawJarTask().configure(task -> {
299327
task.getInput().set(definition.getNeoFormRuntimeDefinition().getTask("setup").flatMap(WithOutput::getOutput));
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
plugins {
2+
id 'net.neoforged.gradle.userdev'
3+
}
4+
5+
6+
java {
7+
toolchain {
8+
languageVersion = JavaLanguageVersion.of(21)
9+
}
10+
}
11+
12+
minecraft.accessTransformers.file rootProject.file('src/main/resources/META-INF/accesstransformer.cfg')
13+
14+
dependencies {
15+
implementation 'net.neoforged:neoforge:+'
16+
}
17+
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
neogradle.subsystems.decompiler.enabled=false
2+
org.gradle.parallel=true
3+
net.neoforged.gradle.caching.cacheDirectory=/tmp/spock_the_userdev_runtime_0_tempDir6195734133791547284/.ng-cache
4+
org.gradle.console=rich
5+
org.gradle.jvmargs=-Xmx8000m
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
plugins {
2+
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0'
3+
}
4+
5+
rootProject.name = 'userdev_supports_ats_from_file_decompiler_disabled'
6+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
2+
package net.neoforged.gradle.userdev;
3+
4+
import net.minecraft.client.Minecraft;
5+
6+
public class FunctionalTests {
7+
public static void main(String[] args) {
8+
System.out.println(Minecraft.getInstance().fixerUpper.getClass().toString());
9+
}
10+
}
11+
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
public-f net.minecraft.client.Minecraft fixerUpper # fixerUpper

0 commit comments

Comments
 (0)