From e1b780ae6d60bd6a9635f6f1197dc26d2b31e3a8 Mon Sep 17 00:00:00 2001 From: gegy1000 Date: Fri, 28 Jun 2019 23:13:43 +0200 Subject: Profile option for mappings to be saved by-obf instead of by-deobf --- .../translation/mapping/MappingFileNameFormat.java | 10 ++++++++ .../translation/mapping/MappingSaveParameters.java | 16 +++++++++++++ .../mapping/serde/EnigmaMappingsReader.java | 5 ++-- .../mapping/serde/EnigmaMappingsWriter.java | 28 +++++++++++++++------- .../translation/mapping/serde/MappingFormat.java | 13 +++++----- .../translation/mapping/serde/MappingsReader.java | 3 ++- .../translation/mapping/serde/MappingsWriter.java | 7 +++--- .../mapping/serde/SrgMappingsWriter.java | 3 ++- .../mapping/serde/TinyMappingsReader.java | 3 ++- .../mapping/serde/TinyMappingsWriter.java | 3 ++- 10 files changed, 67 insertions(+), 24 deletions(-) create mode 100644 src/main/java/cuchaz/enigma/translation/mapping/MappingFileNameFormat.java create mode 100644 src/main/java/cuchaz/enigma/translation/mapping/MappingSaveParameters.java (limited to 'src/main/java/cuchaz/enigma/translation/mapping') diff --git a/src/main/java/cuchaz/enigma/translation/mapping/MappingFileNameFormat.java b/src/main/java/cuchaz/enigma/translation/mapping/MappingFileNameFormat.java new file mode 100644 index 0000000..e40bfe7 --- /dev/null +++ b/src/main/java/cuchaz/enigma/translation/mapping/MappingFileNameFormat.java @@ -0,0 +1,10 @@ +package cuchaz.enigma.translation.mapping; + +import com.google.gson.annotations.SerializedName; + +public enum MappingFileNameFormat { + @SerializedName("by_obf") + BY_OBF, + @SerializedName("by_deobf") + BY_DEOBF +} diff --git a/src/main/java/cuchaz/enigma/translation/mapping/MappingSaveParameters.java b/src/main/java/cuchaz/enigma/translation/mapping/MappingSaveParameters.java new file mode 100644 index 0000000..07065d6 --- /dev/null +++ b/src/main/java/cuchaz/enigma/translation/mapping/MappingSaveParameters.java @@ -0,0 +1,16 @@ +package cuchaz.enigma.translation.mapping; + +import com.google.gson.annotations.SerializedName; + +public class MappingSaveParameters { + @SerializedName("file_name_format") + private final MappingFileNameFormat fileNameFormat; + + public MappingSaveParameters(MappingFileNameFormat fileNameFormat) { + this.fileNameFormat = fileNameFormat; + } + + public MappingFileNameFormat getFileNameFormat() { + return fileNameFormat; + } +} diff --git a/src/main/java/cuchaz/enigma/translation/mapping/serde/EnigmaMappingsReader.java b/src/main/java/cuchaz/enigma/translation/mapping/serde/EnigmaMappingsReader.java index 3f61325..bb0f1ee 100644 --- a/src/main/java/cuchaz/enigma/translation/mapping/serde/EnigmaMappingsReader.java +++ b/src/main/java/cuchaz/enigma/translation/mapping/serde/EnigmaMappingsReader.java @@ -6,6 +6,7 @@ import cuchaz.enigma.throwables.MappingParseException; import cuchaz.enigma.translation.mapping.AccessModifier; import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.mapping.MappingPair; +import cuchaz.enigma.translation.mapping.MappingSaveParameters; import cuchaz.enigma.translation.mapping.tree.EntryTree; import cuchaz.enigma.translation.mapping.tree.HashEntryTree; import cuchaz.enigma.translation.representation.MethodDescriptor; @@ -25,7 +26,7 @@ import java.util.stream.Collectors; public enum EnigmaMappingsReader implements MappingsReader { FILE { @Override - public EntryTree read(Path path, ProgressListener progress) throws IOException, MappingParseException { + public EntryTree read(Path path, ProgressListener progress, MappingSaveParameters saveParameters) throws IOException, MappingParseException { progress.init(1, "Loading mapping file"); EntryTree mappings = new HashEntryTree<>(); @@ -38,7 +39,7 @@ public enum EnigmaMappingsReader implements MappingsReader { }, DIRECTORY { @Override - public EntryTree read(Path root, ProgressListener progress) throws IOException, MappingParseException { + public EntryTree read(Path root, ProgressListener progress, MappingSaveParameters saveParameters) throws IOException, MappingParseException { EntryTree mappings = new HashEntryTree<>(); List files = Files.walk(root) diff --git a/src/main/java/cuchaz/enigma/translation/mapping/serde/EnigmaMappingsWriter.java b/src/main/java/cuchaz/enigma/translation/mapping/serde/EnigmaMappingsWriter.java index 7a39093..7199be8 100644 --- a/src/main/java/cuchaz/enigma/translation/mapping/serde/EnigmaMappingsWriter.java +++ b/src/main/java/cuchaz/enigma/translation/mapping/serde/EnigmaMappingsWriter.java @@ -31,11 +31,12 @@ import java.util.Collection; import java.util.Objects; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; +import java.util.stream.Stream; public enum EnigmaMappingsWriter implements MappingsWriter { FILE { @Override - public void write(EntryTree mappings, MappingDelta delta, Path path, ProgressListener progress) { + public void write(EntryTree mappings, MappingDelta delta, Path path, ProgressListener progress, MappingSaveParameters saveParameters) { Collection classes = mappings.getRootNodes() .filter(entry -> entry instanceof ClassEntry) .map(entry -> (ClassEntry) entry) @@ -56,13 +57,13 @@ public enum EnigmaMappingsWriter implements MappingsWriter { }, DIRECTORY { @Override - public void write(EntryTree mappings, MappingDelta delta, Path path, ProgressListener progress) { + public void write(EntryTree mappings, MappingDelta delta, Path path, ProgressListener progress, MappingSaveParameters saveParameters) { Collection changedClasses = delta.getChangedRoots() .filter(entry -> entry instanceof ClassEntry) .map(entry -> (ClassEntry) entry) .collect(Collectors.toList()); - applyDeletions(path, changedClasses, mappings, delta.getBaseMappings()); + applyDeletions(path, changedClasses, mappings, delta.getBaseMappings(), saveParameters.getFileNameFormat()); progress.init(changedClasses.size(), "Writing classes"); @@ -73,7 +74,12 @@ public enum EnigmaMappingsWriter implements MappingsWriter { progress.step(steps.getAndIncrement(), classEntry.getFullName()); try { - Path classPath = resolve(path, translator.translate(classEntry)); + ClassEntry fileEntry = classEntry; + if (saveParameters.getFileNameFormat() == MappingFileNameFormat.BY_DEOBF) { + fileEntry = translator.translate(fileEntry); + } + + Path classPath = resolve(path, fileEntry); Files.createDirectories(classPath.getParent()); Files.deleteIfExists(classPath); @@ -87,13 +93,17 @@ public enum EnigmaMappingsWriter implements MappingsWriter { }); } - private void applyDeletions(Path root, Collection changedClasses, EntryTree mappings, EntryTree oldMappings) { + private void applyDeletions(Path root, Collection changedClasses, EntryTree mappings, EntryTree oldMappings, MappingFileNameFormat fileNameFormat) { Translator oldMappingTranslator = new MappingTranslator(oldMappings, VoidEntryResolver.INSTANCE); - Collection deletedClasses = changedClasses.stream() - .filter(e -> !Objects.equals(oldMappings.get(e), mappings.get(e))) - .map(oldMappingTranslator::translate) - .collect(Collectors.toList()); + Stream deletedClassStream = changedClasses.stream() + .filter(e -> !Objects.equals(oldMappings.get(e), mappings.get(e))); + + if (fileNameFormat == MappingFileNameFormat.BY_DEOBF) { + deletedClassStream = deletedClassStream.map(oldMappingTranslator::translate); + } + + Collection deletedClasses = deletedClassStream.collect(Collectors.toList()); for (ClassEntry classEntry : deletedClasses) { try { diff --git a/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingFormat.java b/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingFormat.java index 2528352..4799589 100644 --- a/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingFormat.java +++ b/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingFormat.java @@ -4,6 +4,7 @@ import cuchaz.enigma.ProgressListener; import cuchaz.enigma.throwables.MappingParseException; import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.mapping.MappingDelta; +import cuchaz.enigma.translation.mapping.MappingSaveParameters; import cuchaz.enigma.translation.mapping.tree.EntryTree; import javax.annotation.Nullable; @@ -24,22 +25,22 @@ public enum MappingFormat { this.reader = reader; } - public void write(EntryTree mappings, Path path, ProgressListener progressListener) { - write(mappings, MappingDelta.added(mappings), path, progressListener); + public void write(EntryTree mappings, Path path, ProgressListener progressListener, MappingSaveParameters saveParameters) { + write(mappings, MappingDelta.added(mappings), path, progressListener, saveParameters); } - public void write(EntryTree mappings, MappingDelta delta, Path path, ProgressListener progressListener) { + public void write(EntryTree mappings, MappingDelta delta, Path path, ProgressListener progressListener, MappingSaveParameters saveParameters) { if (writer == null) { throw new IllegalStateException(name() + " does not support writing"); } - writer.write(mappings, delta, path, progressListener); + writer.write(mappings, delta, path, progressListener, saveParameters); } - public EntryTree read(Path path, ProgressListener progressListener) throws IOException, MappingParseException { + public EntryTree read(Path path, ProgressListener progressListener, MappingSaveParameters saveParameters) throws IOException, MappingParseException { if (reader == null) { throw new IllegalStateException(name() + " does not support reading"); } - return reader.read(path, progressListener); + return reader.read(path, progressListener, saveParameters); } @Nullable diff --git a/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingsReader.java b/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingsReader.java index af0933f..4c60787 100644 --- a/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingsReader.java +++ b/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingsReader.java @@ -3,11 +3,12 @@ package cuchaz.enigma.translation.mapping.serde; import cuchaz.enigma.ProgressListener; import cuchaz.enigma.throwables.MappingParseException; import cuchaz.enigma.translation.mapping.EntryMapping; +import cuchaz.enigma.translation.mapping.MappingSaveParameters; import cuchaz.enigma.translation.mapping.tree.EntryTree; import java.io.IOException; import java.nio.file.Path; public interface MappingsReader { - EntryTree read(Path path, ProgressListener progress) throws MappingParseException, IOException; + EntryTree read(Path path, ProgressListener progress, MappingSaveParameters saveParameters) throws MappingParseException, IOException; } diff --git a/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingsWriter.java b/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingsWriter.java index 77f6ee0..8815986 100644 --- a/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingsWriter.java +++ b/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingsWriter.java @@ -3,14 +3,15 @@ package cuchaz.enigma.translation.mapping.serde; import cuchaz.enigma.ProgressListener; import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.mapping.MappingDelta; +import cuchaz.enigma.translation.mapping.MappingSaveParameters; import cuchaz.enigma.translation.mapping.tree.EntryTree; import java.nio.file.Path; public interface MappingsWriter { - void write(EntryTree mappings, MappingDelta delta, Path path, ProgressListener progress); + void write(EntryTree mappings, MappingDelta delta, Path path, ProgressListener progress, MappingSaveParameters saveParameters); - default void write(EntryTree mappings, Path path, ProgressListener progress) { - write(mappings, MappingDelta.added(mappings), path, progress); + default void write(EntryTree mappings, Path path, ProgressListener progress, MappingSaveParameters saveParameters) { + write(mappings, MappingDelta.added(mappings), path, progress, saveParameters); } } diff --git a/src/main/java/cuchaz/enigma/translation/mapping/serde/SrgMappingsWriter.java b/src/main/java/cuchaz/enigma/translation/mapping/serde/SrgMappingsWriter.java index 40be136..1270d51 100644 --- a/src/main/java/cuchaz/enigma/translation/mapping/serde/SrgMappingsWriter.java +++ b/src/main/java/cuchaz/enigma/translation/mapping/serde/SrgMappingsWriter.java @@ -6,6 +6,7 @@ import cuchaz.enigma.translation.MappingTranslator; import cuchaz.enigma.translation.Translator; import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.mapping.MappingDelta; +import cuchaz.enigma.translation.mapping.MappingSaveParameters; import cuchaz.enigma.translation.mapping.VoidEntryResolver; import cuchaz.enigma.translation.mapping.tree.EntryTree; import cuchaz.enigma.translation.mapping.tree.EntryTreeNode; @@ -29,7 +30,7 @@ public enum SrgMappingsWriter implements MappingsWriter { INSTANCE; @Override - public void write(EntryTree mappings, MappingDelta delta, Path path, ProgressListener progress) { + public void write(EntryTree mappings, MappingDelta delta, Path path, ProgressListener progress, MappingSaveParameters saveParameters) { try { Files.deleteIfExists(path); Files.createFile(path); diff --git a/src/main/java/cuchaz/enigma/translation/mapping/serde/TinyMappingsReader.java b/src/main/java/cuchaz/enigma/translation/mapping/serde/TinyMappingsReader.java index bc866bd..81d181b 100644 --- a/src/main/java/cuchaz/enigma/translation/mapping/serde/TinyMappingsReader.java +++ b/src/main/java/cuchaz/enigma/translation/mapping/serde/TinyMappingsReader.java @@ -5,6 +5,7 @@ import cuchaz.enigma.ProgressListener; import cuchaz.enigma.throwables.MappingParseException; import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.mapping.MappingPair; +import cuchaz.enigma.translation.mapping.MappingSaveParameters; import cuchaz.enigma.translation.mapping.tree.EntryTree; import cuchaz.enigma.translation.mapping.tree.HashEntryTree; import cuchaz.enigma.translation.representation.MethodDescriptor; @@ -23,7 +24,7 @@ public enum TinyMappingsReader implements MappingsReader { INSTANCE; @Override - public EntryTree read(Path path, ProgressListener progress) throws IOException, MappingParseException { + public EntryTree read(Path path, ProgressListener progress, MappingSaveParameters saveParameters) throws IOException, MappingParseException { return read(path, Files.readAllLines(path, Charsets.UTF_8), progress); } diff --git a/src/main/java/cuchaz/enigma/translation/mapping/serde/TinyMappingsWriter.java b/src/main/java/cuchaz/enigma/translation/mapping/serde/TinyMappingsWriter.java index 0a52dad..ee65690 100644 --- a/src/main/java/cuchaz/enigma/translation/mapping/serde/TinyMappingsWriter.java +++ b/src/main/java/cuchaz/enigma/translation/mapping/serde/TinyMappingsWriter.java @@ -7,6 +7,7 @@ import cuchaz.enigma.translation.MappingTranslator; import cuchaz.enigma.translation.Translator; import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.mapping.MappingDelta; +import cuchaz.enigma.translation.mapping.MappingSaveParameters; import cuchaz.enigma.translation.mapping.VoidEntryResolver; import cuchaz.enigma.translation.mapping.tree.EntryTree; import cuchaz.enigma.translation.mapping.tree.EntryTreeNode; @@ -40,7 +41,7 @@ public class TinyMappingsWriter implements MappingsWriter { } @Override - public void write(EntryTree mappings, MappingDelta delta, Path path, ProgressListener progress) { + public void write(EntryTree mappings, MappingDelta delta, Path path, ProgressListener progress, MappingSaveParameters saveParameters) { try { Files.deleteIfExists(path); Files.createFile(path); -- cgit v1.2.3