Skip to content

Commit

Permalink
Replace Lorenz with mapping-io
Browse files Browse the repository at this point in the history
  • Loading branch information
Juuxel committed Dec 15, 2023
1 parent caa2ed5 commit a388184
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 20 deletions.
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ repositories {

dependencies {
api("org.cadixdev:bombe:0.3.4")
compileOnly("org.cadixdev:lorenz:0.5.5")
api("net.fabricmc:mapping-io:0.4.2")

testImplementation("org.junit.jupiter:junit-jupiter-api:5.3.1")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.3.1")
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/org/cadixdev/at/AccessTransformSet.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@

package org.cadixdev.at;

import net.fabricmc.mappingio.tree.MappingTreeView;
import org.cadixdev.at.impl.AccessTransformSetImpl;
import org.cadixdev.bombe.analysis.InheritanceCompletable;
import org.cadixdev.bombe.analysis.InheritanceProvider;
import org.cadixdev.bombe.type.signature.MethodSignature;
import org.cadixdev.lorenz.MappingSet;

import java.util.Map;
import java.util.Optional;
Expand All @@ -41,7 +41,7 @@ public interface AccessTransformSet {
Class getOrCreateClass(String name);
Optional<Class> removeClass(String name);

AccessTransformSet remap(MappingSet mappings);
AccessTransformSet remap(MappingTreeView mappings, String from, String to);
void merge(AccessTransformSet other);

static AccessTransformSet create() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@

package org.cadixdev.at.impl;

import net.fabricmc.mappingio.tree.MappingTreeView;
import org.cadixdev.at.AccessTransformSet;
import org.cadixdev.lorenz.MappingSet;

import java.util.Collections;
import java.util.HashMap;
Expand Down Expand Up @@ -62,8 +62,8 @@ public Optional<Class> removeClass(String name) {
}

@Override
public AccessTransformSet remap(MappingSet mappings) {
return AccessTransformSetMapper.remap(this, mappings);
public AccessTransformSet remap(MappingTreeView mappings, String from, String to) {
return AccessTransformSetMapper.remap(this, mappings, from, to);
}

@Override
Expand Down
41 changes: 27 additions & 14 deletions src/main/java/org/cadixdev/at/impl/AccessTransformSetMapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,10 @@

package org.cadixdev.at.impl;

import net.fabricmc.mappingio.tree.MappingTreeView;
import org.cadixdev.at.AccessTransformSet;
import org.cadixdev.bombe.type.MethodDescriptor;
import org.cadixdev.bombe.type.signature.MethodSignature;
import org.cadixdev.lorenz.MappingSet;
import org.cadixdev.lorenz.model.ClassMapping;
import org.cadixdev.lorenz.model.FieldMapping;
import org.cadixdev.lorenz.model.Mapping;
import org.cadixdev.lorenz.model.MethodMapping;

import java.util.Objects;
import java.util.Optional;
Expand All @@ -41,19 +38,29 @@ final class AccessTransformSetMapper {
private AccessTransformSetMapper() {
}

static AccessTransformSet remap(AccessTransformSet set, MappingSet mappings) {
static AccessTransformSet remap(AccessTransformSet set, MappingTreeView mappings, String from, String to) {
Objects.requireNonNull(set, "set");
Objects.requireNonNull(mappings, "mappings");

int fromNs = mappings.getNamespaceId(from);
int toNs = mappings.getNamespaceId(to);

if (fromNs == MappingTreeView.NULL_NAMESPACE_ID) {
throw new IllegalArgumentException("Source namespace '" + from + "' is not present in the mapping tree");
} else if (toNs == MappingTreeView.NULL_NAMESPACE_ID) {
throw new IllegalArgumentException("Target namespace '" + to + "' is not present in the mapping tree");
}

AccessTransformSet remapped = AccessTransformSet.create();
set.getClasses().forEach((className, classSet) -> {
Optional<? extends ClassMapping<?, ?>> mapping = mappings.getClassMapping(className);
remap(mapping.orElse(null), classSet, remapped.getOrCreateClass(mapping.map(Mapping::getFullDeobfuscatedName).orElse(className)));
MappingTreeView.ClassMappingView mapping = mappings.getClass(className, fromNs);
String newClassName = mapping != null ? mapping.getName(toNs) : className;
remap(mappings, mapping, classSet, remapped.getOrCreateClass(newClassName), fromNs, toNs);
});
return remapped;
}

private static void remap(ClassMapping<?, ?> mapping, AccessTransformSet.Class set, AccessTransformSet.Class remapped) {
private static void remap(MappingTreeView mappings, MappingTreeView.ClassMappingView mapping, AccessTransformSet.Class set, AccessTransformSet.Class remapped, int fromNs, int toNs) {
remapped.merge(set.get());
remapped.mergeAllFields(set.allFields());
remapped.mergeAllMethods(set.allMethods());
Expand All @@ -64,20 +71,26 @@ private static void remap(ClassMapping<?, ?> mapping, AccessTransformSet.Class s
} else {
set.getFields().forEach((name, transform) ->
remapped.mergeField(
mapping.getFieldMapping(name)
.map(FieldMapping::getDeobfuscatedName)
Optional.ofNullable(mapping.getField(name, null, fromNs))
.flatMap(field -> Optional.ofNullable(field.getName(toNs)))
.orElse(name),
transform
)
);

set.getMethods().forEach((signature, transform) -> {
remapped.mergeMethod(
mapping.getMethodMapping(signature)
.map(MethodMapping::getDeobfuscatedSignature)
Optional.ofNullable(mapping.getMethod(signature.getName(), signature.getDescriptor().toString(), fromNs))
.map(method -> {
String name = method.getName(toNs);
if (name == null) name = signature.getName();

String desc = method.getDesc(toNs);
return MethodSignature.of(name, desc);
})
.orElseGet(() -> new MethodSignature(
signature.getName(),
mapping.getMappings().deobfuscate(signature.getDescriptor())
MethodDescriptor.of(mappings.mapDesc(signature.getDescriptor().toString(), fromNs, toNs))
)),
transform
);
Expand Down

0 comments on commit a388184

Please sign in to comment.