Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor reading/writing into plugins #197

Merged
merged 48 commits into from
Jun 3, 2024
Merged
Show file tree
Hide file tree
Changes from 30 commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
2969043
https://github.com/FabricMC/Enigma/pull/532 - rai version
ix0rai Apr 16, 2024
dd1ed5c
fix ExtensionFileFilter for leading dot change
ix0rai Apr 16, 2024
e8c1d95
checkstyle
ix0rai Apr 16, 2024
67ff574
oro review + filter "open" dialogue
ix0rai Apr 17, 2024
9dc672c
start moving to plugin
ix0rai Apr 18, 2024
b969aa7
migration to read write service: begin!
ix0rai Apr 21, 2024
fc1a744
Merge branch 'refs/heads/quiltmc-master' into juuxel-file-extensions
ix0rai Apr 21, 2024
caf0dc2
add namespace parameters to MappingSaveParameters, port most of command
ix0rai Apr 21, 2024
682972c
add non functional activeByDefault parameter to service types, move D…
ix0rai Apr 21, 2024
ce11f45
decompiler service active by default
ix0rai Apr 21, 2024
6f3519a
implement active by default
ix0rai Apr 21, 2024
01f4a30
cli tests passing!
ix0rai Apr 21, 2024
1fb7da5
core tests passing!
ix0rai Apr 21, 2024
068b6cd
GUI compiles (does not work)
ix0rai Apr 21, 2024
369afa4
default to enigma format for directories
ix0rai Apr 21, 2024
3771c99
checkstyle
ix0rai Apr 21, 2024
31159b5
fix test checkstyle, remove bad API methods
ix0rai Apr 22, 2024
0a30236
add "tiny" extension for tiny format
ix0rai Apr 22, 2024
1b6e1c9
more docs
ix0rai Apr 22, 2024
d342120
add validation for plugin registration
ix0rai Apr 22, 2024
eea654d
update gradle
ix0rai Apr 23, 2024
b09b191
checkstyle
ix0rai Apr 23, 2024
d0a4f40
address gradle deprecation
ix0rai Apr 23, 2024
a921600
update gradle again, update proguard
ix0rai Apr 23, 2024
6a4074d
fix gradle deprecations
ix0rai Apr 23, 2024
6098587
actions should pass again
ix0rai Apr 23, 2024
c15b6a7
test plugin id validation
ix0rai Apr 24, 2024
872769b
test all types of plugin validation
ix0rai Apr 24, 2024
53c181d
refactor test names
ix0rai Apr 24, 2024
f6ac5f9
IN MY DOCUMENTATION ERA
ix0rai Apr 24, 2024
3c5ed9c
fix some issues
ix0rai Apr 27, 2024
3874707
reintroduce EnigmaServiceType.create
ix0rai May 1, 2024
85d3a19
private tinyWriter constructor
ix0rai May 1, 2024
17dda83
improve MappingFileNameFormat docs
ix0rai May 1, 2024
70320be
Update enigma/src/main/java/org/quiltmc/enigma/api/service/NamePropos…
ix0rai May 1, 2024
9857315
Update enigma-cli/src/main/java/org/quiltmc/enigma/command/InvertMapp…
ix0rai May 1, 2024
e3040aa
Update enigma-cli/src/test/java/org/quiltmc/enigma/command/FillClassM…
ix0rai May 1, 2024
0c079ac
only create enigma instances once in commands
ix0rai May 1, 2024
31a0df7
Merge remote-tracking branch 'origin/juuxel-file-extensions' into juu…
ix0rai May 1, 2024
430b66f
Update enigma-cli/src/test/java/org/quiltmc/enigma/command/MapSpecial…
ix0rai May 1, 2024
eb381ed
use WalkFileTree
ix0rai May 1, 2024
f4c0bae
Merge remote-tracking branch 'origin/juuxel-file-extensions' into juu…
ix0rai May 1, 2024
d0f1eda
superfluous variable in build.gradle
ix0rai May 2, 2024
629f5aa
new default namespaces
ix0rai May 2, 2024
e14101a
reimplement format detection test (no longer automatic :( )
ix0rai May 2, 2024
1c2b78d
checkstyle and NPE fix
ix0rai May 2, 2024
08fefc6
test format not found
ix0rai May 2, 2024
eedbc6d
remove pointless method
ix0rai Jun 3, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,6 @@ subprojects {
apply plugin: 'java'
apply plugin: 'maven-publish'

sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17

repositories {
mavenLocal()
mavenCentral()
Expand All @@ -33,6 +30,7 @@ subprojects {

testImplementation libs.junit
testRuntimeOnly libs.junit.engine
testRuntimeOnly libs.junit.launcher
testImplementation libs.hamcrest
}

Expand All @@ -44,6 +42,8 @@ subprojects {

java {
withSourcesJar()
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}

tasks.withType(JavaCompile).configureEach {
Expand Down
7 changes: 4 additions & 3 deletions enigma-cli/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@ dependencies {
testImplementation(testFixtures(project(':enigma')))
}

mainClassName = 'org.quiltmc.enigma.command.Main'

jar.manifest.attributes 'Main-Class': mainClassName
application {
mainClass = 'org.quiltmc.enigma.command.Main'
jar.manifest.attributes 'Main-Class': mainClass
}

publishing {
publications {
Expand Down
20 changes: 8 additions & 12 deletions enigma-cli/src/main/java/org/quiltmc/enigma/command/Argument.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,6 @@ public enum Argument {
"""
A path to the right file or folder to read mappings from, used in commands which take two mapping inputs."""
),
OUTPUT_MAPPING_FORMAT("<output-mapping-format>",
"""
The mapping format to use when writing output mappings. Allowed values are (case-insensitive):
- TINY_V2:from_namespace:to_namespace (ex: tiny_v2:intermediary:named)
- ENIGMA_FILE
- ENIGMA_DIRECTORY
- ENIGMA_ZIP
- SRG_FILE
- RECAF

Proguard is not a valid output format, as writing is unsupported."""
),
MAPPING_OUTPUT("<mapping-output>",
"""
A path to the file or folder to write mappings to. Will be created if missing."""
Expand Down Expand Up @@ -60,6 +48,14 @@ The decompiler to use when producing output. Allowed values are (case-insensitiv
ENIGMA_PROFILE("<enigma-profile>",
"""
A path to an Enigma profile JSON file, used to apply things like plugins."""
),
OBFUSCATED_NAMESPACE("<obfuscated-namespace>",
"""
The namespace to use for obfuscated names when writing mappings. Only used in certain mapping formats."""
),
DEOBFUSCATED_NAMESPACE("<deobfuscated-namespace>",
"""
The namespace to use for deobfuscated names when writing mappings. Only used in certain mapping formats."""
);

private final String displayForm;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
public class CheckMappingsCommand extends Command {
public CheckMappingsCommand() {
super(Argument.INPUT_JAR.required(),
Argument.INPUT_MAPPINGS.required());
Argument.INPUT_MAPPINGS.required()
);
}

@Override
Expand Down
12 changes: 6 additions & 6 deletions enigma-cli/src/main/java/org/quiltmc/enigma/command/Command.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import org.quiltmc.enigma.api.translation.mapping.EntryMapping;
import org.quiltmc.enigma.api.translation.mapping.MappingDelta;
import org.quiltmc.enigma.api.translation.mapping.serde.MappingParseException;
import org.quiltmc.enigma.api.translation.mapping.serde.MappingFormat;
import org.quiltmc.enigma.api.translation.mapping.serde.MappingsReader;
import org.quiltmc.enigma.api.translation.mapping.tree.DeltaTrackingTree;
import org.quiltmc.enigma.api.translation.mapping.tree.EntryTree;
import org.tinylog.Logger;
Expand Down Expand Up @@ -123,7 +123,7 @@ public static Enigma createEnigma() {
* @return the argument, as a string
*/
protected String getArg(String[] args, int index) {
if (index < this.allArguments.size()) {
if (index < this.allArguments.size() && index >= 0) {
return getArg(args, index, this.allArguments.get(index));
} else {
throw new RuntimeException("arg index is outside of range of possible arguments! (index: " + index + ", allowed arg count: " + this.allArguments.size() + ")");
Expand Down Expand Up @@ -153,17 +153,17 @@ public static EnigmaProject openProject(Path fileJarIn, Path fileMappings, Enigm
if (fileMappings != null) {
Logger.info("Reading mappings...");

EntryTree<EntryMapping> mappings = readMappings(fileMappings, progress);
EntryTree<EntryMapping> mappings = readMappings(enigma, fileMappings, progress);

project.setMappings(mappings, new ConsoleProgressListener());
}

return project;
}

protected static EntryTree<EntryMapping> readMappings(Path path, ProgressListener progress) throws MappingParseException, IOException {
MappingFormat format = MappingFormat.parseFromFile(path);
return format.read(path, progress);
protected static EntryTree<EntryMapping> readMappings(Enigma enigma, Path path, ProgressListener progress) throws MappingParseException, IOException {
MappingsReader reader = CommandsUtil.getReader(enigma, path);
return reader.read(path, progress);
}

protected static File getWritableFile(String path) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package org.quiltmc.enigma.command;

import org.quiltmc.enigma.api.Enigma;
import org.quiltmc.enigma.api.service.ReadWriteService;
import org.quiltmc.enigma.api.translation.mapping.serde.MappingsReader;
import org.quiltmc.enigma.api.translation.mapping.serde.MappingsWriter;

import java.nio.file.Path;

public class CommandsUtil {
public static ReadWriteService getReadWriteService(Enigma enigma, Path file) {
var service = enigma.getReadWriteService(file);
if (service.isEmpty()) {
throw new UnsupportedOperationException("No reader/writer found for file \"" + file + "\"");
}

return service.get();
}

public static MappingsReader getReader(Enigma enigma, Path file) {
ReadWriteService service = getReadWriteService(enigma, file);

if (!service.supportsReading()) {
throw new UnsupportedOperationException("Read/write service for file \"" + file + "\" does not support reading!");
}

return service;
}

public static MappingsWriter getWriter(Enigma enigma, Path file) {
ReadWriteService service = getReadWriteService(enigma, file);

if (!service.supportsWriting()) {
throw new UnsupportedOperationException("Read/write service for file \"" + file + "\" does not support writing!");
}

return service;
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package org.quiltmc.enigma.command;

import org.quiltmc.enigma.api.ProgressListener;
import org.quiltmc.enigma.api.translation.mapping.serde.MappingsReader;
import org.quiltmc.enigma.util.MappingOperations;
import org.quiltmc.enigma.api.translation.mapping.serde.MappingFormat;
import org.quiltmc.enigma.api.translation.mapping.serde.MappingParseException;
import org.quiltmc.enigma.api.translation.mapping.EntryMapping;
import org.quiltmc.enigma.api.translation.mapping.serde.MappingFileNameFormat;
Expand All @@ -11,27 +11,29 @@
import org.quiltmc.enigma.api.translation.mapping.tree.EntryTree;
import org.quiltmc.enigma.util.Utils;

import javax.annotation.Nullable;
import java.io.IOException;
import java.nio.file.Path;

public class ComposeMappingsCommand extends Command {
public ComposeMappingsCommand() {
super(Argument.LEFT_MAPPINGS.required(),
Argument.RIGHT_MAPPINGS.required(),
Argument.OUTPUT_MAPPING_FORMAT.required(),
Argument.MAPPING_OUTPUT.required(),
Argument.KEEP_MODE.required());
Argument.KEEP_MODE.required()
);
}

@Override
public void run(String... args) throws IOException, MappingParseException {
Path left = getReadablePath(this.getArg(args, 0));
Path right = getReadablePath(this.getArg(args, 1));
String resultFormat = this.getArg(args, 2);
Path result = getWritablePath(this.getArg(args, 3));
String keepMode = this.getArg(args, 4);
Path result = getWritablePath(this.getArg(args, 2));
String keepMode = this.getArg(args, 3);
String obfuscatedNamespace = this.getArg(args, 4);
String deobfuscatedNamespace = this.getArg(args, 5);

run(left, right, resultFormat, result, keepMode);
run(left, right, result, keepMode, obfuscatedNamespace, deobfuscatedNamespace);
}

@Override
Expand All @@ -44,17 +46,17 @@ public String getDescription() {
return "Merges the two mapping trees (left and right) into a common (middle) name set, handling conflicts according to the given \"keep mode\".";
}

public static void run(Path leftFile, Path rightFile, String resultFormat, Path resultFile, String keepMode) throws IOException, MappingParseException {
MappingSaveParameters saveParameters = new MappingSaveParameters(MappingFileNameFormat.BY_DEOBF, false);
public static void run(Path leftFile, Path rightFile, Path resultFile, String keepMode, @Nullable String obfuscatedNamespace, @Nullable String deobfuscatedNamespace) throws IOException, MappingParseException {
MappingSaveParameters saveParameters = new MappingSaveParameters(MappingFileNameFormat.BY_DEOBF, false, obfuscatedNamespace, deobfuscatedNamespace);

MappingFormat leftFormat = MappingFormat.parseFromFile(leftFile);
EntryTree<EntryMapping> left = leftFormat.read(leftFile);
MappingFormat rightFormat = MappingFormat.parseFromFile(rightFile);
EntryTree<EntryMapping> right = rightFormat.read(rightFile);
MappingsReader leftReader = CommandsUtil.getReader(createEnigma(), leftFile);
EntryTree<EntryMapping> left = leftReader.read(leftFile);
MappingsReader rightReader = CommandsUtil.getReader(createEnigma(), rightFile);
EntryTree<EntryMapping> right = rightReader.read(rightFile);
EntryTree<EntryMapping> result = MappingOperations.compose(left, right, keepMode.equals("left") || keepMode.equals("both"), keepMode.equals("right") || keepMode.equals("both"));

MappingsWriter writer = CommandsUtil.getWriter(createEnigma(), resultFile);
ix0rai marked this conversation as resolved.
Show resolved Hide resolved
Utils.delete(resultFile);
MappingsWriter writer = MappingCommandsUtil.getWriter(resultFormat);
writer.write(result, resultFile, ProgressListener.createEmpty(), saveParameters);
}
}
Original file line number Diff line number Diff line change
@@ -1,32 +1,36 @@
package org.quiltmc.enigma.command;

import org.quiltmc.enigma.api.ProgressListener;
import org.quiltmc.enigma.api.translation.mapping.serde.MappingFormat;
import org.quiltmc.enigma.api.translation.mapping.serde.MappingParseException;
import org.quiltmc.enigma.api.translation.mapping.EntryMapping;
import org.quiltmc.enigma.api.translation.mapping.serde.MappingFileNameFormat;
import org.quiltmc.enigma.api.translation.mapping.serde.MappingSaveParameters;
import org.quiltmc.enigma.api.translation.mapping.serde.MappingsReader;
import org.quiltmc.enigma.api.translation.mapping.serde.MappingsWriter;
import org.quiltmc.enigma.api.translation.mapping.tree.EntryTree;
import org.quiltmc.enigma.util.Utils;

import javax.annotation.Nullable;
import java.io.IOException;
import java.nio.file.Path;

public class ConvertMappingsCommand extends Command {
public ConvertMappingsCommand() {
super(Argument.INPUT_MAPPINGS.required(),
Argument.OUTPUT_MAPPING_FORMAT.required(),
Argument.MAPPING_OUTPUT.required());
Argument.MAPPING_OUTPUT.required(),
Argument.OBFUSCATED_NAMESPACE.required(),
Argument.DEOBFUSCATED_NAMESPACE.required()
);
}

@Override
public void run(String... args) throws IOException, MappingParseException {
Path source = getReadablePath(this.getArg(args, 0));
String resultFormat = this.getArg(args, 1);
Path result = getWritablePath(this.getArg(args, 2));
Path result = getWritablePath(this.getArg(args, 1));
String obfuscatedNamespace = this.getArg(args, 2);
String deobfuscatedNamespace = this.getArg(args, 3);

run(source, resultFormat, result);
run(source, result, obfuscatedNamespace, deobfuscatedNamespace);
}

@Override
Expand All @@ -39,14 +43,14 @@ public String getDescription() {
return "Converts the provided mappings to a different format.";
}

public static void run(Path source, String resultFormat, Path output) throws MappingParseException, IOException {
MappingSaveParameters saveParameters = new MappingSaveParameters(MappingFileNameFormat.BY_DEOBF, false);
public static void run(Path source, Path output, @Nullable String obfuscatedNamespace, @Nullable String deobfuscatedNamespace) throws MappingParseException, IOException {
MappingSaveParameters saveParameters = new MappingSaveParameters(MappingFileNameFormat.BY_DEOBF, false, obfuscatedNamespace, deobfuscatedNamespace);

MappingFormat format = MappingFormat.parseFromFile(source);
EntryTree<EntryMapping> mappings = format.read(source);
MappingsReader reader = CommandsUtil.getReader(createEnigma(), source);
EntryTree<EntryMapping> mappings = reader.read(source);

Utils.delete(output);
MappingsWriter writer = MappingCommandsUtil.getWriter(resultFormat);
MappingsWriter writer = CommandsUtil.getWriter(createEnigma(), output);
ix0rai marked this conversation as resolved.
Show resolved Hide resolved
writer.write(mappings, output, ProgressListener.createEmpty(), saveParameters);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import org.quiltmc.enigma.api.EnigmaProject;
import org.quiltmc.enigma.api.ProgressListener;
import org.quiltmc.enigma.api.EnigmaProject.DecompileErrorStrategy;
import org.quiltmc.enigma.api.source.DecompilerService;
import org.quiltmc.enigma.api.service.DecompilerService;
import org.quiltmc.enigma.api.source.Decompilers;
import org.tinylog.Logger;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ public class DeobfuscateCommand extends Command {
public DeobfuscateCommand() {
super(Argument.INPUT_JAR.required(),
Argument.OUTPUT_JAR.required(),
Argument.INPUT_MAPPINGS.optional());
Argument.INPUT_MAPPINGS.optional()
);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

import org.quiltmc.enigma.api.EnigmaProject;
import org.quiltmc.enigma.api.ProgressListener;
import org.quiltmc.enigma.api.translation.mapping.serde.MappingFormat;
import org.quiltmc.enigma.api.translation.mapping.serde.MappingSaveParameters;
import org.quiltmc.enigma.api.translation.mapping.serde.MappingsWriter;
import org.tinylog.Logger;

import java.io.IOException;
Expand Down Expand Up @@ -46,7 +46,7 @@ public static void run(Path jarIn, Path mappingsIn, Path mappingsOut) throws Exc
return;
}

MappingFormat format = MappingFormat.parseFromFile(mappingsIn);
MappingsWriter writer = CommandsUtil.getWriter(createEnigma(), mappingsIn);
EnigmaProject project = openProject(jarIn, mappingsIn);

Logger.info("Dropping invalid mappings...");
Expand Down Expand Up @@ -75,6 +75,6 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO
}

MappingSaveParameters saveParameters = project.getEnigma().getProfile().getMappingSaveParameters();
format.write(project.getRemapper().getMappings(), mappingsOut, ProgressListener.createEmpty(), saveParameters);
writer.write(project.getRemapper().getMappings(), mappingsOut, ProgressListener.createEmpty(), saveParameters);
}
}
Loading
Loading