diff --git a/enigma-cli/src/main/java/org/quiltmc/enigma/command/InsertProposedMappingsCommand.java b/enigma-cli/src/main/java/org/quiltmc/enigma/command/InsertProposedMappingsCommand.java index fdd7a279..b0158ac8 100644 --- a/enigma-cli/src/main/java/org/quiltmc/enigma/command/InsertProposedMappingsCommand.java +++ b/enigma-cli/src/main/java/org/quiltmc/enigma/command/InsertProposedMappingsCommand.java @@ -98,7 +98,7 @@ public static void run(Path inJar, Path source, Path output, Enigma enigma, @Nul @SuppressWarnings("unused") public static EntryTree exec(NameProposalService[] nameProposalServices, EnigmaProject project) { for (NameProposalService service : nameProposalServices) { - Map, EntryMapping> jarMappings = service.getProposedNames(project.getJarIndex()); + Map, EntryMapping> jarMappings = service.getProposedNames(project.getEnigma(), project.getJarIndex()); Map, EntryMapping> dynamicMappings = service.getDynamicProposedNames(project.getRemapper(), null, null, null); insertMappings(jarMappings, project); diff --git a/enigma-server/src/main/java/org/quiltmc/enigma/network/DedicatedEnigmaServer.java b/enigma-server/src/main/java/org/quiltmc/enigma/network/DedicatedEnigmaServer.java index 824cedeb..cc35edb9 100644 --- a/enigma-server/src/main/java/org/quiltmc/enigma/network/DedicatedEnigmaServer.java +++ b/enigma-server/src/main/java/org/quiltmc/enigma/network/DedicatedEnigmaServer.java @@ -124,10 +124,10 @@ public static void main(String[] args) { EntryRemapper mappings; if (!Files.exists(mappingsFile)) { - mappings = EntryRemapper.mapped(project.getJarIndex(), project.getMappingsIndex(), project.getRemapper().getJarProposedMappings(), new HashEntryTree<>(), enigma.getNameProposalServices()); + mappings = EntryRemapper.mapped(project.getEnigma(), project.getJarIndex(), project.getMappingsIndex(), project.getRemapper().getJarProposedMappings(), new HashEntryTree<>(), enigma.getNameProposalServices()); } else { Logger.info("Reading mappings..."); - mappings = EntryRemapper.mapped(project.getJarIndex(), project.getMappingsIndex(), project.getRemapper().getJarProposedMappings(), readWriteService.get().read(mappingsFile), enigma.getNameProposalServices()); + mappings = EntryRemapper.mapped(project.getEnigma(), project.getJarIndex(), project.getMappingsIndex(), project.getRemapper().getJarProposedMappings(), readWriteService.get().read(mappingsFile), enigma.getNameProposalServices()); } PrintWriter log = new PrintWriter(Files.newBufferedWriter(logFile)); diff --git a/enigma-swing/src/main/java/org/quiltmc/enigma/gui/GuiController.java b/enigma-swing/src/main/java/org/quiltmc/enigma/gui/GuiController.java index 8a836ec1..84534c3e 100644 --- a/enigma-swing/src/main/java/org/quiltmc/enigma/gui/GuiController.java +++ b/enigma-swing/src/main/java/org/quiltmc/enigma/gui/GuiController.java @@ -650,7 +650,7 @@ public void createClient(String username, String ip, int port, char[] password) } public void createServer(String username, int port, char[] password) throws IOException { - this.server = new IntegratedEnigmaServer(this.project.getJarChecksum(), password, EntryRemapper.mapped(this.project.getJarIndex(), this.project.getMappingsIndex(), new HashEntryTree<>(this.project.getRemapper().getJarProposedMappings()), new HashEntryTree<>(this.project.getRemapper().getDeobfMappings()), this.project.getEnigma().getNameProposalServices()), port); + this.server = new IntegratedEnigmaServer(this.project.getJarChecksum(), password, EntryRemapper.mapped(this.project.getEnigma(), this.project.getJarIndex(), this.project.getMappingsIndex(), new HashEntryTree<>(this.project.getRemapper().getJarProposedMappings()), new HashEntryTree<>(this.project.getRemapper().getDeobfMappings()), this.project.getEnigma().getNameProposalServices()), port); this.server.start(); this.client = new IntegratedEnigmaClient(this, "127.0.0.1", port); this.client.connect(); diff --git a/enigma/src/main/java/org/quiltmc/enigma/api/Enigma.java b/enigma/src/main/java/org/quiltmc/enigma/api/Enigma.java index 217d9556..e3588065 100644 --- a/enigma/src/main/java/org/quiltmc/enigma/api/Enigma.java +++ b/enigma/src/main/java/org/quiltmc/enigma/api/Enigma.java @@ -103,7 +103,7 @@ public EnigmaProject openJar(Path path, ClassProvider libraryClassProvider, Prog int j = 1; for (var service : nameProposalServices) { progress.step(j++, I18n.translateFormatted("progress.jar.name_proposal.proposer", service.getId())); - Map, EntryMapping> proposed = service.getProposedNames(index); + Map, EntryMapping> proposed = service.getProposedNames(this, index); if (proposed != null) { for (var entry : proposed.entrySet()) { diff --git a/enigma/src/main/java/org/quiltmc/enigma/api/EnigmaProject.java b/enigma/src/main/java/org/quiltmc/enigma/api/EnigmaProject.java index 5b108679..00e1e2c6 100644 --- a/enigma/src/main/java/org/quiltmc/enigma/api/EnigmaProject.java +++ b/enigma/src/main/java/org/quiltmc/enigma/api/EnigmaProject.java @@ -72,7 +72,7 @@ public EnigmaProject(Enigma enigma, Path jarPath, ClassProvider classProvider, J this.jarChecksum = jarChecksum; this.mappingsIndex = mappingsIndex; - this.remapper = EntryRemapper.mapped(jarIndex, this.mappingsIndex, proposedNames, new HashEntryTree<>(), this.enigma.getNameProposalServices()); + this.remapper = EntryRemapper.mapped(enigma, jarIndex, this.mappingsIndex, proposedNames, new HashEntryTree<>(), this.enigma.getNameProposalServices()); } /** @@ -91,12 +91,12 @@ public void setMappings(@Nullable EntryTree mappings, ProgressList EntryTree mergedTree = EntryTreeUtil.merge(jarProposedMappings, mappings); this.mappingsIndex.indexMappings(mergedTree, progress); - this.remapper = EntryRemapper.mapped(this.jarIndex, this.mappingsIndex, jarProposedMappings, mappings, this.enigma.getNameProposalServices()); + this.remapper = EntryRemapper.mapped(this.enigma, this.jarIndex, this.mappingsIndex, jarProposedMappings, mappings, this.enigma.getNameProposalServices()); } else if (!jarProposedMappings.isEmpty()) { this.mappingsIndex.indexMappings(jarProposedMappings, progress); - this.remapper = EntryRemapper.mapped(this.jarIndex, this.mappingsIndex, jarProposedMappings, new HashEntryTree<>(), this.enigma.getNameProposalServices()); + this.remapper = EntryRemapper.mapped(this.enigma, this.jarIndex, this.mappingsIndex, jarProposedMappings, new HashEntryTree<>(), this.enigma.getNameProposalServices()); } else { - this.remapper = EntryRemapper.empty(this.jarIndex, this.enigma.getNameProposalServices()); + this.remapper = EntryRemapper.empty(this.enigma, this.jarIndex, this.enigma.getNameProposalServices()); } // update dynamically proposed names diff --git a/enigma/src/main/java/org/quiltmc/enigma/api/service/NameProposalService.java b/enigma/src/main/java/org/quiltmc/enigma/api/service/NameProposalService.java index 1d4b1c85..704d1182 100644 --- a/enigma/src/main/java/org/quiltmc/enigma/api/service/NameProposalService.java +++ b/enigma/src/main/java/org/quiltmc/enigma/api/service/NameProposalService.java @@ -1,5 +1,6 @@ package org.quiltmc.enigma.api.service; +import org.quiltmc.enigma.api.Enigma; import org.quiltmc.enigma.api.analysis.index.jar.JarIndex; import org.quiltmc.enigma.api.source.TokenType; import org.quiltmc.enigma.api.translation.mapping.EntryMapping; @@ -21,11 +22,12 @@ public interface NameProposalService extends EnigmaService { * Runs when a new JAR file is opened. Note that at this point, no mapping context will exist in the remapper. * All mappings proposed should have a token type of {@link TokenType#JAR_PROPOSED} and a non-null source plugin ID. * + * @param enigma an enigma instance to use as context * @param index an index of the jar, to use as context * @return a map of obfuscated entries to their proposed names */ @Nullable - Map, EntryMapping> getProposedNames(JarIndex index); + Map, EntryMapping> getProposedNames(Enigma enigma, JarIndex index); /** * Runs when an entry is renamed, for updating proposed names that use other mappings as context. @@ -49,7 +51,7 @@ default boolean isFallback() { /** * Disables validation of proposed mappings from this service. * This allows you to return any kind of mapping you want from {@link #getDynamicProposedNames(EntryRemapper, Entry, EntryMapping, EntryMapping)} - * and {@link #getProposedNames(JarIndex)}, but should be used sparingly as it will allow creating mappings that can't be linked back to this proposer. + * and {@link #getProposedNames(Enigma, JarIndex)}, but should be used sparingly as it will allow creating mappings that can't be linked back to this proposer. * Do not use this unless you're sure there's no other way to accomplish what you're looking to do! * * @return whether validation should be bypassed diff --git a/enigma/src/main/java/org/quiltmc/enigma/api/translation/mapping/EntryRemapper.java b/enigma/src/main/java/org/quiltmc/enigma/api/translation/mapping/EntryRemapper.java index 41172c43..dd17de77 100644 --- a/enigma/src/main/java/org/quiltmc/enigma/api/translation/mapping/EntryRemapper.java +++ b/enigma/src/main/java/org/quiltmc/enigma/api/translation/mapping/EntryRemapper.java @@ -1,5 +1,6 @@ package org.quiltmc.enigma.api.translation.mapping; +import org.quiltmc.enigma.api.Enigma; import org.quiltmc.enigma.api.analysis.index.jar.InheritanceIndex; import org.quiltmc.enigma.api.analysis.index.jar.JarIndex; import org.quiltmc.enigma.api.analysis.index.mapping.MappingsIndex; @@ -33,6 +34,7 @@ public class EntryRemapper { private final EntryTree proposedMappings; private final DeltaTrackingTree mappings; + private final Enigma enigma; private final EntryResolver obfResolver; private final Translator deobfuscator; private final JarIndex jarIndex; @@ -41,13 +43,14 @@ public class EntryRemapper { private final MappingValidator validator; private final List proposalServices; - private EntryRemapper(JarIndex jarIndex, MappingsIndex mappingsIndex, EntryTree jarProposedMappings, EntryTree deobfMappings, List proposalServices) { + private EntryRemapper(Enigma enigma, JarIndex jarIndex, MappingsIndex mappingsIndex, EntryTree jarProposedMappings, EntryTree deobfMappings, List proposalServices) { this.deobfMappings = deobfMappings; this.jarProposedMappings = jarProposedMappings; this.proposedMappings = new HashEntryTree<>(jarProposedMappings); this.mappings = new DeltaTrackingTree<>(new MergedEntryMappingTree(deobfMappings, this.proposedMappings)); this.obfResolver = jarIndex.getEntryResolver(); + this.enigma = enigma; this.deobfuscator = new MappingTranslator(this.mappings, this.obfResolver); this.jarIndex = jarIndex; @@ -57,12 +60,12 @@ private EntryRemapper(JarIndex jarIndex, MappingsIndex mappingsIndex, EntryTree< this.proposalServices = proposalServices; } - public static EntryRemapper mapped(JarIndex jarIndex, MappingsIndex mappingsIndex, EntryTree proposedMappings, EntryTree deobfMappings, List proposalServices) { - return new EntryRemapper(jarIndex, mappingsIndex, proposedMappings, deobfMappings, proposalServices); + public static EntryRemapper mapped(Enigma enigma, JarIndex jarIndex, MappingsIndex mappingsIndex, EntryTree proposedMappings, EntryTree deobfMappings, List proposalServices) { + return new EntryRemapper(enigma, jarIndex, mappingsIndex, proposedMappings, deobfMappings, proposalServices); } - public static EntryRemapper empty(JarIndex index, List proposalServices) { - return new EntryRemapper(index, MappingsIndex.empty(), new HashEntryTree<>(), new HashEntryTree<>(), proposalServices); + public static EntryRemapper empty(Enigma enigma, JarIndex index, List proposalServices) { + return new EntryRemapper(enigma, index, MappingsIndex.empty(), new HashEntryTree<>(), new HashEntryTree<>(), proposalServices); } public void validatePutMapping(ValidationContext vc, Entry obfuscatedEntry, @Nonnull EntryMapping deobfMapping) { @@ -165,6 +168,13 @@ public Translator getDeobfuscator() { return this.deobfuscator; } + /** + * {@return the enigma instance used to create this remapper} + */ + public Enigma getEnigma() { + return this.enigma; + } + public Stream> getObfEntries() { return this.mappings.getAllEntries(); } diff --git a/enigma/src/main/java/org/quiltmc/enigma/impl/plugin/BuiltinPlugin.java b/enigma/src/main/java/org/quiltmc/enigma/impl/plugin/BuiltinPlugin.java index deea511a..b50a6514 100644 --- a/enigma/src/main/java/org/quiltmc/enigma/impl/plugin/BuiltinPlugin.java +++ b/enigma/src/main/java/org/quiltmc/enigma/impl/plugin/BuiltinPlugin.java @@ -1,5 +1,6 @@ package org.quiltmc.enigma.impl.plugin; +import org.quiltmc.enigma.api.Enigma; import org.quiltmc.enigma.api.analysis.index.jar.BridgeMethodIndex; import org.quiltmc.enigma.api.EnigmaPlugin; import org.quiltmc.enigma.api.EnigmaPluginContext; @@ -38,7 +39,7 @@ private static void registerEnumNamingService(EnigmaPluginContext ctx) { ctx.registerService(NameProposalService.TYPE, ctx1 -> new NameProposalService() { @Override - public Map, EntryMapping> getProposedNames(JarIndex index) { + public Map, EntryMapping> getProposedNames(Enigma enigma, JarIndex index) { Map, EntryMapping> mappings = new HashMap<>(); index.getIndex(EntryIndex.class).getFields().forEach(field -> { @@ -73,7 +74,7 @@ private static void registerRecordNamingService(EnigmaPluginContext ctx) { private static void registerSpecializedMethodNamingService(EnigmaPluginContext ctx) { ctx.registerService(NameProposalService.TYPE, ctx1 -> new NameProposalService() { @Override - public Map, EntryMapping> getProposedNames(JarIndex index) { + public Map, EntryMapping> getProposedNames(Enigma enigma, JarIndex index) { BridgeMethodIndex bridgeMethodIndex = index.getIndex(BridgeMethodIndex.class); Map, EntryMapping> mappings = new HashMap<>(); diff --git a/enigma/src/main/java/org/quiltmc/enigma/impl/plugin/RecordComponentProposalService.java b/enigma/src/main/java/org/quiltmc/enigma/impl/plugin/RecordComponentProposalService.java index 95eb8432..8715c512 100644 --- a/enigma/src/main/java/org/quiltmc/enigma/impl/plugin/RecordComponentProposalService.java +++ b/enigma/src/main/java/org/quiltmc/enigma/impl/plugin/RecordComponentProposalService.java @@ -1,5 +1,6 @@ package org.quiltmc.enigma.impl.plugin; +import org.quiltmc.enigma.api.Enigma; import org.quiltmc.enigma.api.analysis.index.jar.EntryIndex; import org.quiltmc.enigma.api.analysis.index.jar.JarIndex; import org.quiltmc.enigma.api.service.NameProposalService; @@ -20,7 +21,7 @@ public record RecordComponentProposalService(Map fieldToGetter) implements NameProposalService { @Nullable @Override - public Map, EntryMapping> getProposedNames(JarIndex index) { + public Map, EntryMapping> getProposedNames(Enigma enigma, JarIndex index) { return null; } diff --git a/enigma/src/test/java/org/quiltmc/enigma/name_proposal/TestFallbackNameProposal.java b/enigma/src/test/java/org/quiltmc/enigma/name_proposal/TestFallbackNameProposal.java index ba42ba08..a8257390 100644 --- a/enigma/src/test/java/org/quiltmc/enigma/name_proposal/TestFallbackNameProposal.java +++ b/enigma/src/test/java/org/quiltmc/enigma/name_proposal/TestFallbackNameProposal.java @@ -118,7 +118,7 @@ public void init(EnigmaPluginContext ctx) { private static class TestFieldProposerNoFallback implements NameProposalService { @Override - public Map, EntryMapping> getProposedNames(JarIndex index) { + public Map, EntryMapping> getProposedNames(Enigma enigma, JarIndex index) { Map, EntryMapping> mappings = new HashMap<>(); AtomicInteger i = new AtomicInteger(); @@ -142,7 +142,7 @@ public String getId() { private static class TestMethodProposerWithFallback implements NameProposalService { @Override - public Map, EntryMapping> getProposedNames(JarIndex index) { + public Map, EntryMapping> getProposedNames(Enigma enigma, JarIndex index) { Map, EntryMapping> mappings = new HashMap<>(); AtomicInteger i = new AtomicInteger(); diff --git a/enigma/src/test/java/org/quiltmc/enigma/name_proposal/TestNameProposal.java b/enigma/src/test/java/org/quiltmc/enigma/name_proposal/TestNameProposal.java index 9d427778..0003a224 100644 --- a/enigma/src/test/java/org/quiltmc/enigma/name_proposal/TestNameProposal.java +++ b/enigma/src/test/java/org/quiltmc/enigma/name_proposal/TestNameProposal.java @@ -132,7 +132,7 @@ private static void nameAllFields(EnigmaPluginContext ctx, String prefix) { private record TestJarNameProposer(String prefix, String id) implements NameProposalService { @Override - public Map, EntryMapping> getProposedNames(JarIndex index) { + public Map, EntryMapping> getProposedNames(Enigma enigma, JarIndex index) { Map, EntryMapping> mappings = new HashMap<>(); AtomicInteger i = new AtomicInteger(); @@ -154,7 +154,7 @@ public String getId() { private record TestDynamicNameProposer(String id) implements NameProposalService { @Override - public Map, EntryMapping> getProposedNames(JarIndex index) { + public Map, EntryMapping> getProposedNames(Enigma enigma, JarIndex index) { return null; } diff --git a/enigma/src/test/java/org/quiltmc/enigma/name_proposal/TestNameProposalBypassValidation.java b/enigma/src/test/java/org/quiltmc/enigma/name_proposal/TestNameProposalBypassValidation.java index 56331c25..50859db2 100644 --- a/enigma/src/test/java/org/quiltmc/enigma/name_proposal/TestNameProposalBypassValidation.java +++ b/enigma/src/test/java/org/quiltmc/enigma/name_proposal/TestNameProposalBypassValidation.java @@ -125,7 +125,7 @@ public void init(EnigmaPluginContext ctx) { private static class TestFieldProposerNormal implements NameProposalService { @Override - public Map, EntryMapping> getProposedNames(JarIndex index) { + public Map, EntryMapping> getProposedNames(Enigma enigma, JarIndex index) { Map, EntryMapping> mappings = new HashMap<>(); AtomicInteger i = new AtomicInteger(); @@ -149,7 +149,7 @@ public String getId() { private static class TestMethodProposerWithBypass implements NameProposalService { @Override - public Map, EntryMapping> getProposedNames(JarIndex index) { + public Map, EntryMapping> getProposedNames(Enigma enigma, JarIndex index) { Map, EntryMapping> mappings = new HashMap<>(); AtomicInteger i = new AtomicInteger(); diff --git a/enigma/src/testFixtures/java/org/quiltmc/enigma/test/plugin/TestEnigmaPlugin.java b/enigma/src/testFixtures/java/org/quiltmc/enigma/test/plugin/TestEnigmaPlugin.java index 338b3518..b1dd9586 100644 --- a/enigma/src/testFixtures/java/org/quiltmc/enigma/test/plugin/TestEnigmaPlugin.java +++ b/enigma/src/testFixtures/java/org/quiltmc/enigma/test/plugin/TestEnigmaPlugin.java @@ -1,5 +1,6 @@ package org.quiltmc.enigma.test.plugin; +import org.quiltmc.enigma.api.Enigma; import org.quiltmc.enigma.api.EnigmaPlugin; import org.quiltmc.enigma.api.EnigmaPluginContext; import org.quiltmc.enigma.api.analysis.index.jar.EntryIndex; @@ -36,7 +37,7 @@ public String getId() { } @Override - public Map, EntryMapping> getProposedNames(JarIndex index) { + public Map, EntryMapping> getProposedNames(Enigma enigma, JarIndex index) { EntryIndex entryIndex = index.getIndex(EntryIndex.class); Map, EntryMapping> names = new HashMap<>(); @@ -71,7 +72,7 @@ public String getId() { } @Override - public Map, EntryMapping> getProposedNames(JarIndex index) { + public Map, EntryMapping> getProposedNames(Enigma enigma, JarIndex index) { EntryIndex entryIndex = index.getIndex(EntryIndex.class); Map, EntryMapping> names = new HashMap<>(); for (var method : entryIndex.getMethods()) {