Skip to content

Commit

Permalink
de-mojmappify
Browse files Browse the repository at this point in the history
  • Loading branch information
ix0rai committed Jan 16, 2025
1 parent cb9b4ee commit ffbce65
Show file tree
Hide file tree
Showing 11 changed files with 77 additions and 216 deletions.
5 changes: 2 additions & 3 deletions src/main/java/org/quiltmc/enigma_plugin/Arguments.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,12 @@ public class Arguments {
public static final String DISABLE_CONSTRUCTOR_PARAMS = "disable_constructor_params";
public static final String DISABLE_GETTER_SETTER = "disable_getter_setter";
public static final String DISABLE_CODECS = "disable_codecs";
public static final String DISABLE_MAP_NON_HASHED = "disable_map_non_hashed";
public static final String DISABLE_DELEGATE_PARAMS = "disable_delegate_params";
public static final String DISABLE_CONFLICT_FIXER = "disable_conflict_fixer";
public static final String DISABLE_MOJMAP = "disable_mojmap";
public static final String DISABLE_MAPPING_MERGE = "disable_mapping_merge";
public static final String CUSTOM_CODECS = "custom_codecs";
public static final String SIMPLE_TYPE_FIELD_NAMES_PATH = "simple_type_field_names_path";
public static final String MOJMAP_PATH = "mojmap_path";
public static final String MERGED_MAPPING_PATH = "merged_mapping_path";
public static final String PACKAGE_NAME_OVERRIDES_PATH = "package_name_overrides_path";

public static <T extends EnigmaService> boolean getBoolean(EnigmaServiceContext<T> context, String arg) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ public DefaultProposalService(JarIndexer indexer, EnigmaServiceContext<NamePropo
this.addIfEnabled(context, Arguments.DISABLE_EQUALS, EqualsNameProposer::new);
this.addIfEnabled(context, indexer, Arguments.DISABLE_LOGGER, LoggerNameProposer::new);
this.addIfEnabled(context, indexer, Arguments.DISABLE_CODECS, CodecNameProposer::new);
this.addIfNotDisabled(context, Arguments.DISABLE_MAP_NON_HASHED, NonHashedNameProposer::new);

if (indexer.getIndex(SimpleTypeSingleIndex.class).isEnabled()) {
this.add(indexer, SimpleTypeFieldNameProposer::new);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
public class FallbackProposalService extends NameProposerService {
public FallbackProposalService(JarIndexer indexer, EnigmaServiceContext<NameProposalService> context) {
super();
this.addIfEnabled(context, Arguments.DISABLE_MOJMAP, () -> new MojmapNameProposer(context.getSingleArgument(Arguments.MOJMAP_PATH).orElse(null)));
this.addIfEnabled(context, Arguments.DISABLE_MAPPING_MERGE, () -> new MappingMergeNameProposer(context.getSingleArgument(Arguments.MERGED_MAPPING_PATH).orElse(null)));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,37 +29,37 @@
import java.util.Map;

/**
* An extremely simple proposer that provides the mojmap names of all entries.
* An extremely simple proposer that provides the names of all entries from the provided mappings.
* This proposer is meant to be run first so that the names are overridden by all other proposers.
*/
public class MojmapNameProposer extends NameProposer {
public static final String ID = "mojmap";
public class MappingMergeNameProposer extends NameProposer {
public static final String ID = "mapping_merge";

private final String mojmapPath;
// must be static for now. nasty hack to make sure we don't read mojmaps twice
private final String mappingPath;
// must be static for now. nasty hack to make sure we don't read mappings twice when also using the package proposer
// we can guarantee that this is nonnull for the other proposer because jar proposal blocks dynamic proposal
public static EntryTree<EntryMapping> mojmaps;
public static EntryTree<EntryMapping> mergedMappings;

public MojmapNameProposer(@Nullable String mojmapPath) {
public MappingMergeNameProposer(@Nullable String mappingPath) {
super(ID);
this.mojmapPath = mojmapPath;
this.mappingPath = mappingPath;
}

@Override
public void insertProposedNames(Enigma enigma, JarIndex index, Map<Entry<?>, EntryMapping> mappings) {
if (this.mojmapPath != null) {
Path path = Path.of(this.mojmapPath);
if (this.mappingPath != null) {
Path path = Path.of(this.mappingPath);
try {
mojmaps = enigma.readMappings(path).orElse(null);
mergedMappings = enigma.readMappings(path).orElse(null);
} catch (Exception e) {
Logger.error(e, "could not read mojmaps!");
Logger.error(e, "could not read mappings to merge (path: " + path + ")!");
}
} else {
Logger.error("no mojmap path provided, disabling " + this.getSourcePluginId());
Logger.error("no mapping path provided for merge, disabling " + this.getSourcePluginId());
}

if (mojmaps != null) {
mojmaps.getRootNodes().forEach((node) -> this.proposeNodeAndChildren(mappings, node));
if (mergedMappings != null) {
mergedMappings.getRootNodes().forEach((node) -> this.proposeNodeAndChildren(mappings, node));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,17 +47,17 @@
import java.util.function.Consumer;
import java.util.function.Function;

import static org.quiltmc.enigma_plugin.proposal.MojmapNameProposer.mojmaps;
import static org.quiltmc.enigma_plugin.proposal.MappingMergeNameProposer.mergedMappings;

/**
* Proposes Mojang's packages onto all top-level classes.
* These package names can be changed via overrides, which are a simple set of package names keyed by Mojang's versions.
* Proposes the packages from the mappings stored in {@link MappingMergeNameProposer} onto all top-level classes.
* These package names can be changed via overrides, which are a simple set of package names keyed by the versions from the mappings in {@link MappingMergeNameProposer}.
* This proposer must override the user-inputted mappings in order to work, and thus will generate mappings that take priority over manually input ones.
*
* <p>
* This works via stripping out the class name and replacing the package dynamically after each rename.
* For example, if a class is renamed {@code package/Class} and the mojmap name for the class is {@code net/minecraft/MojangClass},
* the manually input class name will be attached to the Mojang package, resulting in {@code net/minecraft/Class}.
* For example, if a class is renamed {@code package/Class} and the name for the class in the mappings to merge is {@code net/minecraft/MojangClass},
* the manually input class name will changed according to the mappings, resulting in {@code net/minecraft/Class}.
* </p>
* <p>
* The override format is JSON, with a structure mimicking a package tree and entirely composed of one object type:
Expand Down Expand Up @@ -85,7 +85,7 @@
* The elements of each package object are as follows:
* <ul>
* <li>
* {@code obf}: the unqualified Mojang name of the package
* {@code obf}: the unqualified name of the package in the provided mappings
* </li>
* <li>
* {@code deobf}: the unqualified, overridden name of the package
Expand All @@ -97,12 +97,12 @@
* </ul>
* </p>
*/
public class MojmapPackageProposer extends NameProposer {
public static final String ID = "mojmap_packages";
public class MappingMergePackageProposer extends NameProposer {
public static final String ID = "merge_packages";
private final String packageNameOverridesPath;
private PackageEntryList packageOverrides;

public MojmapPackageProposer(@Nullable String packageNameOverridesPath) {
public MappingMergePackageProposer(@Nullable String packageNameOverridesPath) {
super(ID);
this.packageNameOverridesPath = packageNameOverridesPath;
}
Expand All @@ -114,7 +114,7 @@ public void insertProposedNames(Enigma enigma, JarIndex index, Map<Entry<?>, Ent

@Override
public void proposeDynamicNames(EntryRemapper remapper, Entry<?> obfEntry, EntryMapping oldMapping, EntryMapping newMapping, Map<Entry<?>, EntryMapping> mappings) {
if (mojmaps != null) {
if (mergedMappings != null) {
if (this.packageOverrides == null) {
if (this.packageNameOverridesPath != null) {
this.packageOverrides = readPackageJson(this.packageNameOverridesPath);
Expand Down Expand Up @@ -142,21 +142,21 @@ private void proposePackageName(ClassEntry entry, @Nullable EntryMapping oldMapp
return;
}

EntryMapping mojmap = mojmaps.get(entry);
if (mojmap == null || mojmap.targetName() == null) {
Logger.error("no mojmap for outer class: " + entry);
EntryMapping mappingToMerge = mergedMappings.get(entry);
if (mappingToMerge == null || mappingToMerge.targetName() == null) {
Logger.error("no available mapping to merge for outer class: " + entry);
return;
}

String mojTarget = mojmap.targetName();
String mergeTarget = mappingToMerge.targetName();
String target;
String obfPackage = mojTarget.substring(0, mojTarget.lastIndexOf('/'));
String obfPackage = mergeTarget.substring(0, mergeTarget.lastIndexOf('/'));

if (newMapping != null && newMapping.targetName() != null) {
target = mojTarget.substring(0, mojTarget.lastIndexOf('/'))
target = mergeTarget.substring(0, mergeTarget.lastIndexOf('/'))
+ newMapping.targetName().substring(newMapping.targetName().lastIndexOf('/'));
} else {
target = mojTarget;
target = mergeTarget;
}

Optional<PackageEntry> optionalPackageEntry = this.packageOverrides.findEntry(obfPackage);
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
public class UncheckedProposalService extends NameProposerService {
public UncheckedProposalService(JarIndexer indexer, EnigmaServiceContext<NameProposalService> context) {
super();
this.addIfEnabled(context, Arguments.DISABLE_MOJMAP, () -> new MojmapPackageProposer(context.getSingleArgument(Arguments.PACKAGE_NAME_OVERRIDES_PATH).orElse(null)));
this.addIfEnabled(context, Arguments.DISABLE_MAPPING_MERGE, () -> new MappingMergePackageProposer(context.getSingleArgument(Arguments.PACKAGE_NAME_OVERRIDES_PATH).orElse(null)));
}

@Override
Expand Down
Loading

0 comments on commit ffbce65

Please sign in to comment.