Skip to content

Commit

Permalink
Merge pull request #16 from QuiltMC/mojmap
Browse files Browse the repository at this point in the history
proposal of mojmap names and packages
  • Loading branch information
ix0rai authored Jan 21, 2025
2 parents 8d504b8 + 9a354b9 commit 2e154ad
Show file tree
Hide file tree
Showing 39 changed files with 1,375 additions and 117 deletions.
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ dependencies {
implementation libs.quilt.json5
implementation libs.tinylog
implementation libs.annotations
implementation libs.gson

testImplementation libs.junit
testImplementation libs.hamcrest
Expand Down
4 changes: 3 additions & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
[versions]
enigma = "2.5.1"
enigma = "2.6.1"

asm = "9.7.1"
quilt_json_parser = "0.3.0"
tinylog = "2.6.2"
annotations = "23.0.0"
gson = "2.10.1"

junit = "5.9.3"
hamcrest = "2.2"
Expand All @@ -22,6 +23,7 @@ asm_util = { module = "org.ow2.asm:asm-util", version.ref = "asm" }
quilt_json5 = { module = "org.quiltmc.parsers:json", version.ref = "quilt_json_parser" }
tinylog = { module = "org.tinylog:tinylog-api", version.ref = "tinylog" }
annotations = { module = "org.jetbrains:annotations", version.ref = "annotations" }
gson = { module = "com.google.code.gson:gson", version.ref = "gson" }

junit = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit" }
junit_engine = { module = "org.junit.jupiter:junit-jupiter-engine", version.ref = "junit" }
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
4 changes: 3 additions & 1 deletion src/main/java/org/quiltmc/enigma_plugin/Arguments.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,13 @@ 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_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 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) {
return getBoolean(context, arg, false);
Expand Down
10 changes: 8 additions & 2 deletions src/main/java/org/quiltmc/enigma_plugin/QuiltEnigmaPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,19 +23,25 @@
import org.quiltmc.enigma.api.service.ObfuscationTestService;
import org.quiltmc.enigma_plugin.index.JarIndexer;
import org.quiltmc.enigma_plugin.obfuscation.NameObfuscationTestService;
import org.quiltmc.enigma_plugin.proposal.NameProposerService;
import org.quiltmc.enigma_plugin.proposal.DefaultProposalService;
import org.quiltmc.enigma_plugin.proposal.FallbackProposalService;
import org.quiltmc.enigma_plugin.proposal.UncheckedProposalService;

public class QuiltEnigmaPlugin implements EnigmaPlugin {
public static final String SERVICE_ID_PREFIX = "quiltmc:";
public static final String INDEX_SERVICE_ID = SERVICE_ID_PREFIX + "jar_index";
public static final String NAME_PROPOSAL_SERVICE_ID = SERVICE_ID_PREFIX + "name_proposal";
public static final String FALLBACK_NAME_PROPOSAL_SERVICE_ID = NAME_PROPOSAL_SERVICE_ID + "/fallback";
public static final String UNCHECKED_NAME_PROPOSAL_SERVICE_ID = NAME_PROPOSAL_SERVICE_ID + "/unchecked";
public static final String OBFUSCATION_SERVICE_ID = SERVICE_ID_PREFIX + "obfuscation_test";

@Override
public void init(EnigmaPluginContext ctx) {
var indexer = new JarIndexer();
ctx.registerService(JarIndexerService.TYPE, indexer::withContext);
ctx.registerService(NameProposalService.TYPE, ctx1 -> new NameProposerService(indexer, ctx1));
ctx.registerService(NameProposalService.TYPE, ctx1 -> new DefaultProposalService(indexer, ctx1));
ctx.registerService(NameProposalService.TYPE, ctx1 -> new FallbackProposalService(indexer, ctx1));
ctx.registerService(NameProposalService.TYPE, ctx1 -> new UncheckedProposalService(indexer, ctx1));
ctx.registerService(ObfuscationTestService.TYPE, NameObfuscationTestService::new);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package org.quiltmc.enigma_plugin.proposal;

import org.quiltmc.enigma.api.Enigma;
import org.quiltmc.enigma.api.analysis.index.jar.JarIndex;
import org.quiltmc.enigma.api.translation.mapping.EntryMapping;
import org.quiltmc.enigma.api.translation.representation.entry.Entry;
Expand All @@ -36,7 +37,7 @@ public CodecNameProposer(JarIndexer index) {
}

@Override
public void insertProposedNames(JarIndex index, Map<Entry<?>, EntryMapping> mappings) {
public void insertProposedNames(Enigma enigma, JarIndex index, Map<Entry<?>, EntryMapping> mappings) {
for (FieldEntry field : this.index.getFields()) {
String name = this.index.getFieldName(field);
this.insertProposal(mappings, field, name);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package org.quiltmc.enigma_plugin.proposal;

import org.jetbrains.annotations.Nullable;
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.translation.mapping.EntryMapping;
Expand Down Expand Up @@ -105,6 +106,6 @@ private Optional<LocalVariableEntry> getConflictingParam(Map<Entry<?>, EntryMapp
}

@Override
public void insertProposedNames(JarIndex index, Map<Entry<?>, EntryMapping> mappings) {
public void insertProposedNames(Enigma enigma, JarIndex index, Map<Entry<?>, EntryMapping> mappings) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package org.quiltmc.enigma_plugin.proposal;

import org.quiltmc.enigma.api.Enigma;
import org.quiltmc.enigma.api.analysis.index.jar.JarIndex;
import org.quiltmc.enigma.api.translation.mapping.EntryMapping;
import org.quiltmc.enigma.api.translation.representation.entry.Entry;
Expand All @@ -35,7 +36,7 @@ public ConstantFieldNameProposer(JarIndexer index) {
}

@Override
public void insertProposedNames(JarIndex index, Map<Entry<?>, EntryMapping> mappings) {
public void insertProposedNames(Enigma enigma, JarIndex index, Map<Entry<?>, EntryMapping> mappings) {
for (FieldEntry field : this.fieldIndex.getFields()) {
String name = this.fieldIndex.getName(field);
this.insertProposal(mappings, field, name);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package org.quiltmc.enigma_plugin.proposal;

import org.quiltmc.enigma.api.Enigma;
import org.quiltmc.enigma.api.analysis.index.jar.JarIndex;
import org.quiltmc.enigma.api.translation.mapping.EntryMapping;
import org.quiltmc.enigma.api.translation.mapping.EntryRemapper;
Expand All @@ -37,7 +38,7 @@ public ConstructorParamsNameProposer(JarIndexer index) {
}

@Override
public void insertProposedNames(JarIndex index, Map<Entry<?>, EntryMapping> mappings) {
public void insertProposedNames(Enigma enigma, JarIndex index, Map<Entry<?>, EntryMapping> mappings) {
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/*
* Copyright 2025 QuiltMC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.quiltmc.enigma_plugin.proposal;

import org.quiltmc.enigma.api.service.EnigmaServiceContext;
import org.quiltmc.enigma.api.service.NameProposalService;
import org.quiltmc.enigma_plugin.Arguments;
import org.quiltmc.enigma_plugin.QuiltEnigmaPlugin;
import org.quiltmc.enigma_plugin.index.JarIndexer;
import org.quiltmc.enigma_plugin.index.simple_type_single.SimpleTypeSingleIndex;

public class DefaultProposalService extends NameProposerService {
public DefaultProposalService(JarIndexer indexer, EnigmaServiceContext<NameProposalService> context) {
super();
this.addIfEnabled(context, indexer, Arguments.DISABLE_RECORDS, RecordComponentNameProposer::new);
this.addIfEnabled(context, indexer, Arguments.DISABLE_CONSTANT_FIELDS, ConstantFieldNameProposer::new);
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);

if (indexer.getIndex(SimpleTypeSingleIndex.class).isEnabled()) {
this.add(indexer, SimpleTypeFieldNameProposer::new);
}

this.addIfEnabled(context, indexer, Arguments.DISABLE_CONSTRUCTOR_PARAMS, ConstructorParamsNameProposer::new);
this.addIfEnabled(context, indexer, Arguments.DISABLE_GETTER_SETTER, GetterSetterNameProposer::new);
this.addIfEnabled(context, indexer, Arguments.DISABLE_DELEGATE_PARAMS, DelegateParametersNameProposer::new);

// conflict fixer must be last in order to get context from other dynamic proposers
this.addIfEnabled(context, indexer, Arguments.DISABLE_CONFLICT_FIXER, ConflictFixProposer::new);
}

@Override
public String getId() {
return QuiltEnigmaPlugin.NAME_PROPOSAL_SERVICE_ID;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package org.quiltmc.enigma_plugin.proposal;

import org.quiltmc.enigma.api.Enigma;
import org.quiltmc.enigma.api.analysis.index.jar.JarIndex;
import org.quiltmc.enigma.api.translation.mapping.EntryMapping;
import org.quiltmc.enigma.api.translation.mapping.EntryRemapper;
Expand All @@ -42,7 +43,7 @@ public DelegateParametersNameProposer(JarIndexer index) {
}

@Override
public void insertProposedNames(JarIndex index, Map<Entry<?>, EntryMapping> mappings) {
public void insertProposedNames(Enigma enigma, JarIndex index, Map<Entry<?>, EntryMapping> mappings) {
}

private static boolean shouldNotIgnoreMapping(EntryMapping mapping) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package org.quiltmc.enigma_plugin.proposal;

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.translation.mapping.EntryMapping;
Expand All @@ -35,7 +36,7 @@ public EqualsNameProposer() {
}

@Override
public void insertProposedNames(JarIndex index, Map<Entry<?>, EntryMapping> mappings) {
public void insertProposedNames(Enigma enigma, JarIndex index, Map<Entry<?>, EntryMapping> mappings) {
EntryIndex entryIndex = index.getIndex(EntryIndex.class);

for (MethodEntry method : entryIndex.getMethods()) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/*
* Copyright 2025 QuiltMC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.quiltmc.enigma_plugin.proposal;

import org.quiltmc.enigma.api.service.EnigmaServiceContext;
import org.quiltmc.enigma.api.service.NameProposalService;
import org.quiltmc.enigma_plugin.Arguments;
import org.quiltmc.enigma_plugin.QuiltEnigmaPlugin;
import org.quiltmc.enigma_plugin.index.JarIndexer;

public class FallbackProposalService extends NameProposerService {
public FallbackProposalService(JarIndexer indexer, EnigmaServiceContext<NameProposalService> context) {
super();
this.addIfEnabled(context, Arguments.DISABLE_MAPPING_MERGE, () -> new MappingMergeNameProposer(context.getSingleArgument(Arguments.MERGED_MAPPING_PATH).orElse(null)));
}

@Override
public String getId() {
return QuiltEnigmaPlugin.FALLBACK_NAME_PROPOSAL_SERVICE_ID;
}

@Override
public boolean isFallback() {
return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package org.quiltmc.enigma_plugin.proposal;

import org.quiltmc.enigma.api.Enigma;
import org.quiltmc.enigma.api.analysis.index.jar.JarIndex;
import org.quiltmc.enigma.api.translation.mapping.EntryMapping;
import org.quiltmc.enigma.api.translation.mapping.EntryRemapper;
Expand Down Expand Up @@ -53,7 +54,7 @@ private static String getMethodName(String newName, MethodEntry method) {
}

@Override
public void insertProposedNames(JarIndex index, Map<Entry<?>, EntryMapping> mappings) {
public void insertProposedNames(Enigma enigma, JarIndex index, Map<Entry<?>, EntryMapping> mappings) {
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package org.quiltmc.enigma_plugin.proposal;

import org.quiltmc.enigma.api.Enigma;
import org.quiltmc.enigma.api.analysis.index.jar.JarIndex;
import org.quiltmc.enigma.api.translation.mapping.EntryMapping;
import org.quiltmc.enigma.api.translation.representation.entry.Entry;
Expand All @@ -38,7 +39,7 @@ public LoggerNameProposer(JarIndexer index) {
}

@Override
public void insertProposedNames(JarIndex index, Map<Entry<?>, EntryMapping> mappings) {
public void insertProposedNames(Enigma enigma, JarIndex index, Map<Entry<?>, EntryMapping> mappings) {
for (FieldEntry field : this.index.getFields()) {
this.insertProposal(mappings, field, "LOGGER");
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/*
* Copyright 2025 QuiltMC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.quiltmc.enigma_plugin.proposal;

import org.jetbrains.annotations.Nullable;
import org.quiltmc.enigma.api.Enigma;
import org.quiltmc.enigma.api.analysis.index.jar.JarIndex;
import org.quiltmc.enigma.api.translation.mapping.EntryMapping;
import org.quiltmc.enigma.api.translation.mapping.tree.EntryTree;
import org.quiltmc.enigma.api.translation.mapping.tree.EntryTreeNode;
import org.quiltmc.enigma.api.translation.representation.entry.Entry;
import org.tinylog.Logger;

import java.nio.file.Path;
import java.util.Map;

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

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
private static EntryTree<EntryMapping> mergedMappings;

@Nullable
public static EntryTree<EntryMapping> getMergedMappings() {
return mergedMappings;
}

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

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

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

private void proposeNodeAndChildren(Map<Entry<?>, EntryMapping> mappings, EntryTreeNode<EntryMapping> node) {
if (node.getValue() != null && node.getValue().targetName() != null) {
this.insertProposal(mappings, node.getEntry(), node.getValue().targetName());
}

node.getChildNodes().forEach((child) -> this.proposeNodeAndChildren(mappings, child));
}
}
Loading

0 comments on commit 2e154ad

Please sign in to comment.