Fix remap classes for inheritance (#204)
This commit is contained in:
parent
3fed903fac
commit
f31f8ec2ad
@ -52,6 +52,7 @@ public class ArclightRemapper {
|
||||
public final InheritanceMap inheritanceMap;
|
||||
private final List<PluginTransformer> transformerList = new ArrayList<>();
|
||||
private final JarRemapper toBukkitRemapper;
|
||||
private final JarRemapper toNmsRemapper;
|
||||
|
||||
public ArclightRemapper() throws Exception {
|
||||
this.toNmsMapping = new JarMapping();
|
||||
@ -80,6 +81,7 @@ public class ArclightRemapper {
|
||||
ArclightPluginPatcher.load(this.transformerList);
|
||||
toBukkitMapping.setFallbackInheritanceProvider(GlobalClassRepo.inheritanceProvider());
|
||||
this.toBukkitRemapper = new LenientJarRemapper(toBukkitMapping);
|
||||
this.toNmsRemapper = new LenientJarRemapper(toNmsMapping);
|
||||
RemapSourceHandler.register();
|
||||
}
|
||||
|
||||
@ -91,6 +93,10 @@ public class ArclightRemapper {
|
||||
return INSTANCE.toBukkitRemapper;
|
||||
}
|
||||
|
||||
public static JarRemapper getNmsMapper() {
|
||||
return INSTANCE.toNmsRemapper;
|
||||
}
|
||||
|
||||
public List<PluginTransformer> getTransformerList() {
|
||||
return transformerList;
|
||||
}
|
||||
|
||||
@ -347,11 +347,11 @@ public class ClassLoaderRemapper extends LenientJarRemapper {
|
||||
|
||||
@Override
|
||||
protected String getCommonSuperClass(String type1, String type2) {
|
||||
Collection<String> parents = GlobalClassRepo.inheritanceProvider().getAll(type2);
|
||||
Collection<String> parents = GlobalClassRepo.remappingProvider().getAll(type2);
|
||||
if (parents.contains(type1)) {
|
||||
return type1;
|
||||
}
|
||||
if (GlobalClassRepo.inheritanceProvider().getAll(type1).contains(type2)) {
|
||||
if (GlobalClassRepo.remappingProvider().getAll(type1).contains(type2)) {
|
||||
return type2;
|
||||
}
|
||||
do {
|
||||
@ -366,7 +366,7 @@ public class ClassLoaderRemapper extends LenientJarRemapper {
|
||||
LOGGER.warn("Failed to find class {}", typeName);
|
||||
return "java/lang/Object";
|
||||
}
|
||||
return node.superName;
|
||||
return ArclightRemapper.getNmsMapper().map(node.superName);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -2,9 +2,6 @@ package io.izzel.arclight.common.mod.util.remapper;
|
||||
|
||||
import net.md_5.specialsource.repo.ClassRepo;
|
||||
import org.objectweb.asm.ClassReader;
|
||||
import org.objectweb.asm.ClassVisitor;
|
||||
import org.objectweb.asm.commons.ClassRemapper;
|
||||
import org.objectweb.asm.commons.Remapper;
|
||||
import org.objectweb.asm.tree.ClassNode;
|
||||
|
||||
import java.io.IOException;
|
||||
@ -32,18 +29,7 @@ public class ClassLoaderRepo implements ClassRepo {
|
||||
try (InputStream inputStream = connection.getInputStream()) {
|
||||
ClassReader reader = new ClassReader(inputStream);
|
||||
ClassNode classNode = new ClassNode();
|
||||
ClassVisitor cv;
|
||||
if (classLoader instanceof RemappingClassLoader) {
|
||||
cv = new ClassRemapper(classNode, new Remapper() {
|
||||
@Override
|
||||
public String map(String internalName) {
|
||||
return ((RemappingClassLoader) classLoader).getRemapper().map(internalName);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
cv = classNode;
|
||||
}
|
||||
reader.accept(cv, ClassReader.SKIP_CODE);
|
||||
reader.accept(classNode, ClassReader.SKIP_CODE);
|
||||
return classNode;
|
||||
}
|
||||
} catch (IOException ignored) {
|
||||
|
||||
@ -17,6 +17,7 @@ public class GlobalClassRepo implements ClassRepo {
|
||||
|
||||
public static final GlobalClassRepo INSTANCE = new GlobalClassRepo();
|
||||
private static final PluginInheritanceProvider PROVIDER = new PluginInheritanceProvider(INSTANCE);
|
||||
private static final PluginInheritanceProvider REMAPPING = new PluginInheritanceProvider.Remapping(INSTANCE, PROVIDER);
|
||||
|
||||
private final LoadingCache<String, ClassNode> cache = CacheBuilder.newBuilder().maximumSize(256)
|
||||
.expireAfterAccess(1, TimeUnit.MINUTES).build(CacheLoader.from(this::findParallel));
|
||||
@ -61,4 +62,8 @@ public class GlobalClassRepo implements ClassRepo {
|
||||
public static PluginInheritanceProvider inheritanceProvider() {
|
||||
return PROVIDER;
|
||||
}
|
||||
|
||||
public static PluginInheritanceProvider remappingProvider() {
|
||||
return REMAPPING;
|
||||
}
|
||||
}
|
||||
|
||||
@ -10,6 +10,7 @@ import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class PluginInheritanceProvider implements InheritanceProvider {
|
||||
|
||||
@ -52,4 +53,24 @@ public class PluginInheritanceProvider implements InheritanceProvider {
|
||||
SHARED_INHERITANCE_MAP.put(className, parents);
|
||||
return parents;
|
||||
}
|
||||
|
||||
static class Remapping extends PluginInheritanceProvider {
|
||||
|
||||
private final PluginInheritanceProvider provider;
|
||||
|
||||
public Remapping(ClassRepo classRepo, PluginInheritanceProvider provider) {
|
||||
super(classRepo);
|
||||
this.provider = provider;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> getAll(String className) {
|
||||
return provider.getAll(className).stream().map(ArclightRemapper.getNmsMapper()::map).collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> getParents(String className) {
|
||||
return provider.getParents(className).stream().map(ArclightRemapper.getNmsMapper()::map).collect(Collectors.toSet());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user