From e27d5967029f4f3da8889dd673ba516dcd9f3ac8 Mon Sep 17 00:00:00 2001 From: gegy1000 Date: Sun, 16 Jun 2019 23:49:25 +0200 Subject: Plugin rework along with API rework: Enigma split from EnigmaProject; plugins now provide services configurable via a profile --- .../enigma/command/CheckMappingsCommand.java | 32 +++++++++++++++------- src/main/java/cuchaz/enigma/command/Command.java | 20 +++++++++----- .../cuchaz/enigma/command/DecompileCommand.java | 20 +++++++++----- .../cuchaz/enigma/command/DeobfuscateCommand.java | 20 +++++++++----- 4 files changed, 61 insertions(+), 31 deletions(-) (limited to 'src/main/java/cuchaz/enigma/command') diff --git a/src/main/java/cuchaz/enigma/command/CheckMappingsCommand.java b/src/main/java/cuchaz/enigma/command/CheckMappingsCommand.java index 7ec7679..08e73e6 100644 --- a/src/main/java/cuchaz/enigma/command/CheckMappingsCommand.java +++ b/src/main/java/cuchaz/enigma/command/CheckMappingsCommand.java @@ -1,6 +1,7 @@ package cuchaz.enigma.command; -import cuchaz.enigma.Deobfuscator; +import cuchaz.enigma.Enigma; +import cuchaz.enigma.EnigmaProject; import cuchaz.enigma.ProgressListener; import cuchaz.enigma.analysis.index.JarIndex; import cuchaz.enigma.translation.mapping.EntryMapping; @@ -8,10 +9,8 @@ import cuchaz.enigma.translation.mapping.serde.MappingFormat; import cuchaz.enigma.translation.mapping.tree.EntryTree; import cuchaz.enigma.translation.representation.entry.ClassEntry; -import java.io.File; import java.nio.file.Path; import java.util.Set; -import java.util.jar.JarFile; import java.util.stream.Collectors; public class CheckMappingsCommand extends Command { @@ -32,26 +31,39 @@ public class CheckMappingsCommand extends Command { @Override public void run(String... args) throws Exception { - File fileJarIn = getReadableFile(getArg(args, 0, "in jar", true)); + Path fileJarIn = getReadableFile(getArg(args, 0, "in jar", true)).toPath(); Path fileMappings = getReadablePath(getArg(args, 1, "mappings file", true)); + Enigma enigma = Enigma.create(); + System.out.println("Reading JAR..."); - Deobfuscator deobfuscator = new Deobfuscator(new JarFile(fileJarIn)); + + EnigmaProject project = enigma.openJar(fileJarIn, ProgressListener.none()); + System.out.println("Reading mappings..."); MappingFormat format = chooseEnigmaFormat(fileMappings); - EntryTree mappings = format.read(fileMappings, ProgressListener.VOID); - deobfuscator.setMappings(mappings); + EntryTree mappings = format.read(fileMappings, ProgressListener.none()); + project.setMappings(mappings); - JarIndex idx = deobfuscator.getJarIndex(); + JarIndex idx = project.getJarIndex(); boolean error = false; for (Set partition : idx.getPackageVisibilityIndex().getPartitions()) { - long packages = partition.stream().map(deobfuscator.getMapper()::deobfuscate).map(ClassEntry::getPackageName).distinct().count(); + long packages = partition.stream() + .map(project.getMapper()::deobfuscate) + .map(ClassEntry::getPackageName) + .distinct() + .count(); if (packages > 1) { error = true; - System.err.println("ERROR: Must be in one package:\n" + partition.stream().map(deobfuscator.getMapper()::deobfuscate).map(ClassEntry::toString).sorted().collect(Collectors.joining("\n"))); + System.err.println("ERROR: Must be in one package:\n" + partition.stream() + .map(project.getMapper()::deobfuscate) + .map(ClassEntry::toString) + .sorted() + .collect(Collectors.joining("\n")) + ); } } diff --git a/src/main/java/cuchaz/enigma/command/Command.java b/src/main/java/cuchaz/enigma/command/Command.java index b107fb6..41d7bfa 100644 --- a/src/main/java/cuchaz/enigma/command/Command.java +++ b/src/main/java/cuchaz/enigma/command/Command.java @@ -1,6 +1,7 @@ package cuchaz.enigma.command; -import cuchaz.enigma.Deobfuscator; +import cuchaz.enigma.Enigma; +import cuchaz.enigma.EnigmaProject; import cuchaz.enigma.ProgressListener; import cuchaz.enigma.translation.mapping.EntryMapping; import cuchaz.enigma.translation.mapping.serde.MappingFormat; @@ -10,7 +11,6 @@ import java.io.File; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.jar.JarFile; public abstract class Command { public final String name; @@ -25,15 +25,21 @@ public abstract class Command { public abstract void run(String... args) throws Exception; - protected static Deobfuscator getDeobfuscator(Path fileMappings, JarFile jar) throws Exception { + protected static EnigmaProject openProject(Path fileJarIn, Path fileMappings) throws Exception { + ProgressListener progress = new ConsoleProgressListener(); + + Enigma enigma = Enigma.create(); + System.out.println("Reading jar..."); - Deobfuscator deobfuscator = new Deobfuscator(jar); + EnigmaProject project = enigma.openJar(fileJarIn, progress); + if (fileMappings != null) { System.out.println("Reading mappings..."); - EntryTree mappings = chooseEnigmaFormat(fileMappings).read(fileMappings, new ConsoleProgressListener()); - deobfuscator.setMappings(mappings); + EntryTree mappings = chooseEnigmaFormat(fileMappings).read(fileMappings, progress); + project.setMappings(mappings); } - return deobfuscator; + + return project; } protected static MappingFormat chooseEnigmaFormat(Path path) { diff --git a/src/main/java/cuchaz/enigma/command/DecompileCommand.java b/src/main/java/cuchaz/enigma/command/DecompileCommand.java index a58d908..bc23d01 100644 --- a/src/main/java/cuchaz/enigma/command/DecompileCommand.java +++ b/src/main/java/cuchaz/enigma/command/DecompileCommand.java @@ -1,10 +1,9 @@ package cuchaz.enigma.command; -import cuchaz.enigma.Deobfuscator; +import cuchaz.enigma.EnigmaProject; +import cuchaz.enigma.ProgressListener; -import java.io.File; import java.nio.file.Path; -import java.util.jar.JarFile; public class DecompileCommand extends Command { @@ -24,10 +23,17 @@ public class DecompileCommand extends Command { @Override public void run(String... args) throws Exception { - File fileJarIn = getReadableFile(getArg(args, 0, "in jar", true)); - File fileJarOut = getWritableFolder(getArg(args, 1, "out folder", true)); + Path fileJarIn = getReadableFile(getArg(args, 0, "in jar", true)).toPath(); + Path fileJarOut = getWritableFolder(getArg(args, 1, "out folder", true)).toPath(); Path fileMappings = getReadablePath(getArg(args, 2, "mappings file", false)); - Deobfuscator deobfuscator = getDeobfuscator(fileMappings, new JarFile(fileJarIn)); - deobfuscator.writeSources(fileJarOut.toPath(), new Command.ConsoleProgressListener()); + + EnigmaProject project = openProject(fileJarIn, fileMappings); + + ProgressListener progress = new ConsoleProgressListener(); + + EnigmaProject.JarExport jar = project.exportRemappedJar(progress); + EnigmaProject.SourceExport source = jar.decompile(progress); + + source.write(fileJarOut, progress); } } diff --git a/src/main/java/cuchaz/enigma/command/DeobfuscateCommand.java b/src/main/java/cuchaz/enigma/command/DeobfuscateCommand.java index 5d49938..c24e661 100644 --- a/src/main/java/cuchaz/enigma/command/DeobfuscateCommand.java +++ b/src/main/java/cuchaz/enigma/command/DeobfuscateCommand.java @@ -1,10 +1,9 @@ package cuchaz.enigma.command; -import cuchaz.enigma.Deobfuscator; +import cuchaz.enigma.EnigmaProject; +import cuchaz.enigma.ProgressListener; -import java.io.File; import java.nio.file.Path; -import java.util.jar.JarFile; public class DeobfuscateCommand extends Command { @@ -24,10 +23,17 @@ public class DeobfuscateCommand extends Command { @Override public void run(String... args) throws Exception { - File fileJarIn = getReadableFile(getArg(args, 0, "in jar", true)); - File fileJarOut = getWritableFile(getArg(args, 1, "out jar", true)); + Path fileJarIn = getReadablePath(getArg(args, 0, "in jar", true)); + Path fileJarOut = getWritableFile(getArg(args, 1, "out jar", true)).toPath(); Path fileMappings = getReadablePath(getArg(args, 2, "mappings file", false)); - Deobfuscator deobfuscator = getDeobfuscator(fileMappings, new JarFile(fileJarIn)); - deobfuscator.writeTransformedJar(fileJarOut, new Command.ConsoleProgressListener()); + + EnigmaProject project = openProject(fileJarIn, fileMappings); + + ProgressListener progress = new ConsoleProgressListener(); + + EnigmaProject.JarExport jar = project.exportRemappedJar(progress); + EnigmaProject.SourceExport source = jar.decompile(progress); + + source.write(fileJarOut, progress); } } -- cgit v1.2.3