From 16b203164dcf4cf9ae3ff79b61634dc5d80fbc7e Mon Sep 17 00:00:00 2001
From: Linnea Gräf <nea@nea.moe>
Date: Wed, 6 Mar 2024 18:01:26 +0100
Subject: Add constructor status

---
 .../plugin/EnrichSeargeWithConstructorsTask.java   | 43 ++++++++++++++++++++++
 .../nea/zwirn/plugin/FixFieldDescriptorsTask.java  |  3 +-
 .../moe/nea/zwirn/plugin/ZwirnPluginUtils.java     | 12 +++---
 3 files changed, 52 insertions(+), 6 deletions(-)
 create mode 100644 plugin/src/main/java/moe/nea/zwirn/plugin/EnrichSeargeWithConstructorsTask.java

(limited to 'plugin/src')

diff --git a/plugin/src/main/java/moe/nea/zwirn/plugin/EnrichSeargeWithConstructorsTask.java b/plugin/src/main/java/moe/nea/zwirn/plugin/EnrichSeargeWithConstructorsTask.java
new file mode 100644
index 0000000..e194070
--- /dev/null
+++ b/plugin/src/main/java/moe/nea/zwirn/plugin/EnrichSeargeWithConstructorsTask.java
@@ -0,0 +1,43 @@
+package moe.nea.zwirn.plugin;
+
+import moe.nea.zwirn.Zwirn;
+import org.gradle.api.DefaultTask;
+import org.gradle.api.file.FileCollection;
+import org.gradle.api.file.RegularFileProperty;
+import org.gradle.api.tasks.InputFile;
+import org.gradle.api.tasks.InputFiles;
+import org.gradle.api.tasks.OutputFile;
+import org.gradle.api.tasks.TaskAction;
+
+import java.io.IOException;
+import java.nio.file.FileSystems;
+
+public abstract class EnrichSeargeWithConstructorsTask extends DefaultTask {
+    @InputFiles
+    FileCollection srgArchive;
+
+    public void setSrgArchive(FileCollection srgArchive) {
+        this.srgArchive = srgArchive;
+    }
+
+    public FileCollection getSrgArchive() {
+        return srgArchive;
+    }
+
+    @InputFile
+    public abstract RegularFileProperty getSrgTinyFile();
+
+    @OutputFile
+    public abstract RegularFileProperty getEnrichedTinyFile();
+
+    @TaskAction
+    public void enrich() throws IOException {
+        var srgFs = FileSystems.newFileSystem(ZwirnPluginUtils.getPath(getSrgArchive()));
+        var enriched = Zwirn.enrichSeargeWithConstructors(
+                ZwirnPluginUtils.readTiny(getSrgTinyFile()),
+                srgFs.getPath("/")
+        );
+        srgFs.close();
+        ZwirnPluginUtils.writeTiny(enriched, getEnrichedTinyFile());
+    }
+}
diff --git a/plugin/src/main/java/moe/nea/zwirn/plugin/FixFieldDescriptorsTask.java b/plugin/src/main/java/moe/nea/zwirn/plugin/FixFieldDescriptorsTask.java
index fa8576d..9b4d28c 100644
--- a/plugin/src/main/java/moe/nea/zwirn/plugin/FixFieldDescriptorsTask.java
+++ b/plugin/src/main/java/moe/nea/zwirn/plugin/FixFieldDescriptorsTask.java
@@ -6,6 +6,7 @@ import net.fabricmc.stitch.commands.tinyv2.TinyV2Writer;
 import org.gradle.api.DefaultTask;
 import org.gradle.api.file.RegularFileProperty;
 import org.gradle.api.tasks.InputFile;
+import org.gradle.api.tasks.OutputFile;
 import org.gradle.api.tasks.TaskAction;
 
 import java.io.IOException;
@@ -19,7 +20,7 @@ public abstract class FixFieldDescriptorsTask extends DefaultTask {
     @InputFile
     public abstract RegularFileProperty getInputTinyFile();
 
-    @InputFile
+    @OutputFile
     public abstract RegularFileProperty getOutputTinyFile();
 
     @TaskAction
diff --git a/plugin/src/main/java/moe/nea/zwirn/plugin/ZwirnPluginUtils.java b/plugin/src/main/java/moe/nea/zwirn/plugin/ZwirnPluginUtils.java
index fd1a5ee..08cb42b 100644
--- a/plugin/src/main/java/moe/nea/zwirn/plugin/ZwirnPluginUtils.java
+++ b/plugin/src/main/java/moe/nea/zwirn/plugin/ZwirnPluginUtils.java
@@ -7,8 +7,10 @@ import net.fabricmc.stitch.commands.tinyv2.TinyFile;
 import net.fabricmc.stitch.commands.tinyv2.TinyV2Reader;
 import net.fabricmc.stitch.commands.tinyv2.TinyV2Writer;
 import org.gradle.api.file.FileCollection;
-import org.gradle.api.file.FileSystemLocationProperty;
+import org.gradle.api.file.FileSystemLocation;
+import org.gradle.api.file.RegularFile;
 import org.gradle.api.file.RegularFileProperty;
+import org.gradle.api.provider.Property;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -28,7 +30,7 @@ class ZwirnPluginUtils {
         }
     }
 
-    public static Path getPath(FileSystemLocationProperty<?> property) {
+    public static Path getPath(Property<? extends FileSystemLocation> property) {
         return property.get().getAsFile().toPath();
     }
 
@@ -53,7 +55,7 @@ class ZwirnPluginUtils {
         return collection.getSingleFile().toPath();
     }
 
-    public static TinyFile readTiny(RegularFileProperty tinyFile) {
+    public static TinyFile readTiny(Property<RegularFile> tinyFile) {
         try {
             return TinyV2Reader.read(getPath(tinyFile));
         } catch (IOException e) {
@@ -61,8 +63,8 @@ class ZwirnPluginUtils {
         }
     }
 
-    public static void writeTiny(TinyFile tiny, RegularFileProperty tinyFile) {
-        try{
+    public static void writeTiny(TinyFile tiny, Property<RegularFile> tinyFile) {
+        try {
             TinyV2Writer.write(tiny, getPath(tinyFile));
         } catch (IOException e) {
             throw new RuntimeException(e);
-- 
cgit