Skip to content

Commit cd1052a

Browse files
committed
Generate access transformer during Gradle configuration phase
1 parent 52c4d26 commit cd1052a

File tree

2 files changed

+19
-38
lines changed

2 files changed

+19
-38
lines changed

build-logic/src/main/java/org/spongepowered/gradle/impl/ConvertAWToAT.java renamed to build-logic/src/main/java/org/spongepowered/gradle/impl/AWToAT.java

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -32,43 +32,27 @@
3232
import net.fabricmc.accesswidener.AccessWidenerReader;
3333
import net.fabricmc.accesswidener.AccessWidenerVisitor;
3434
import org.cadixdev.bombe.type.signature.MethodSignature;
35-
import org.gradle.api.DefaultTask;
3635
import org.gradle.api.GradleException;
37-
import org.gradle.api.file.ConfigurableFileCollection;
38-
import org.gradle.api.file.RegularFileProperty;
39-
import org.gradle.api.tasks.InputFiles;
40-
import org.gradle.api.tasks.OutputFile;
41-
import org.gradle.api.tasks.TaskAction;
36+
import org.gradle.api.logging.Logger;
37+
import org.gradle.api.logging.Logging;
4238

4339
import java.io.BufferedReader;
4440
import java.io.BufferedWriter;
4541
import java.io.File;
4642
import java.io.IOException;
4743
import java.nio.file.Files;
48-
import java.util.Set;
4944

50-
public abstract class ConvertAWToAT extends DefaultTask {
45+
public class AWToAT {
46+
private static final Logger logger = Logging.getLogger(AWToAT.class);
5147

52-
@InputFiles
53-
public abstract ConfigurableFileCollection getAccessWideners();
54-
55-
public void accessWideners(Object... paths) {
56-
this.getAccessWideners().from(paths);
57-
}
58-
59-
@OutputFile
60-
public abstract RegularFileProperty getAccessTransformer();
61-
62-
@TaskAction
63-
public void convert() {
64-
final Set<File> awFiles = this.getAccessWideners().getFiles();
65-
final File atFile = this.getAccessTransformer().get().getAsFile();
48+
public static void convert(final Iterable<File> awFiles, final File atFile) {
49+
AWToAT.logger.lifecycle("Converting AWs {} to AT {} ...", awFiles, atFile);
6650

6751
final AccessTransformSet at = AccessTransformSet.create();
6852

6953
for (final File awFile : awFiles) {
7054
try (final BufferedReader reader = Files.newBufferedReader(awFile.toPath())) {
71-
ConvertAWToAT.convert(reader, at);
55+
AWToAT.convert(reader, at);
7256
} catch (final IOException e) {
7357
throw new GradleException("Failed to read access widener: " + awFile, e);
7458
}
@@ -79,28 +63,30 @@ public void convert() {
7963
} catch (IOException e) {
8064
throw new GradleException("Failed to write access transformer: " + atFile, e);
8165
}
66+
67+
AWToAT.logger.lifecycle("Converted AWs to AT.");
8268
}
8369

84-
public static void convert(final BufferedReader reader, final AccessTransformSet at) throws IOException {
70+
private static void convert(final BufferedReader reader, final AccessTransformSet at) throws IOException {
8571
new AccessWidenerReader(new AccessWidenerVisitor() {
8672
@Override
8773
public void visitClass(final String name, final AccessWidenerReader.AccessType access, final boolean transitive) {
88-
at.getOrCreateClass(name).merge(ConvertAWToAT.convertEntry(access));
74+
at.getOrCreateClass(name).merge(AWToAT.convertEntry(access));
8975
}
9076

9177
@Override
9278
public void visitMethod(final String owner, final String name, final String descriptor, final AccessWidenerReader.AccessType access, final boolean transitive) {
93-
at.getOrCreateClass(owner).mergeMethod(MethodSignature.of(name, descriptor), ConvertAWToAT.convertEntry(access));
79+
at.getOrCreateClass(owner).mergeMethod(MethodSignature.of(name, descriptor), AWToAT.convertEntry(access));
9480
}
9581

9682
@Override
9783
public void visitField(final String owner, final String name, final String descriptor, final AccessWidenerReader.AccessType access, final boolean transitive) {
98-
at.getOrCreateClass(owner).mergeField(name, ConvertAWToAT.convertEntry(access));
84+
at.getOrCreateClass(owner).mergeField(name, AWToAT.convertEntry(access));
9985
}
10086
}).read(reader);
10187
}
10288

103-
public static AccessTransform convertEntry(final AccessWidenerReader.AccessType access) {
89+
private static AccessTransform convertEntry(final AccessWidenerReader.AccessType access) {
10490
return switch (access) {
10591
case ACCESSIBLE -> AccessTransform.of(AccessChange.PUBLIC);
10692
case EXTENDABLE, MUTABLE -> AccessTransform.of(AccessChange.PUBLIC, ModifierChange.REMOVE);

forge/build.gradle.kts

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
22
import net.minecraftforge.gradle.userdev.UserDevExtension
3-
import org.spongepowered.gradle.impl.ConvertAWToAT
3+
import org.spongepowered.gradle.impl.AWToAT
44

55
buildscript {
66
repositories {
@@ -206,30 +206,25 @@ dependencies {
206206
}
207207
}
208208

209-
val convertAWToAT = tasks.register("convertAWToAT", ConvertAWToAT::class) {
210-
accessWideners(main.get().resources.filter { it.name.endsWith(".accesswidener") })
211-
accessWideners(forgeMain.resources.filter { it.name.endsWith(".accesswidener") })
212-
accessTransformer.set(project.layout.buildDirectory.file("generated/resources/at.cfg"))
213-
}
209+
val awFiles: Set<File> = files(main.get().resources, forgeMain.resources).filter { it.name.endsWith(".accesswidener") }.files
210+
val atFile = project.layout.buildDirectory.file("generated/resources/at.cfg").get().asFile
211+
AWToAT.convert(awFiles, atFile)
214212

215213
val mixinConfigs: MutableSet<String> = spongeImpl.mixinConfigurations
216214

217215
extensions.configure(UserDevExtension::class) {
218216
mappings("official", "1.21.3")
219-
accessTransformers.from(convertAWToAT.flatMap { it.accessTransformer })
220-
217+
accessTransformers.from(atFile)
221218
reobf = false
222219

223220
runs {
224221
configureEach {
225222
ideaModule("Sponge.SpongeForge.main")
226223

227224
// property("forge.logging.console.level", "debug")
228-
229225
// jvmArgs("-Dbsl.debug=true") // Uncomment to debug bootstrap classpath
230226

231227
args(mixinConfigs.flatMap { sequenceOf("--mixin.config", it) })
232-
233228
environment("MOD_CLASSES", "nop")
234229
}
235230

0 commit comments

Comments
 (0)