diff --git a/src/main/java/net/md_5/specialsource/JarRemapper.java b/src/main/java/net/md_5/specialsource/JarRemapper.java index 71e2196..8d0a331 100644 --- a/src/main/java/net/md_5/specialsource/JarRemapper.java +++ b/src/main/java/net/md_5/specialsource/JarRemapper.java @@ -57,20 +57,19 @@ public class JarRemapper extends Remapper { @Override public String map(String typeName) { - return mapTypeName(typeName, jarMapping.packages, jarMapping.classes); + return mapTypeName(typeName, jarMapping.packages, jarMapping.classes, typeName); } - public static String mapTypeName(String typeName, Map packageMap, Map classMap) { + public static String mapTypeName(String typeName, Map packageMap, Map classMap, String defaultIfUnmapped) { int index = typeName.indexOf('$'); String key = (index == -1) ? typeName : typeName.substring(0, index); String mapped = mapClassName(key, packageMap, classMap); - return mapped != null ? mapped + (index == -1 ? "" : typeName.substring(index, typeName.length())) : typeName; + return mapped != null ? mapped + (index == -1 ? "" : typeName.substring(index, typeName.length())) : defaultIfUnmapped; } /** * Helper method to map a class name by package (prefix) or class (exact) - * map */ private static String mapClassName(String className, Map packageMap, Map classMap) { if (packageMap != null) { diff --git a/src/main/java/net/md_5/specialsource/MethodDescriptorTransformer.java b/src/main/java/net/md_5/specialsource/MethodDescriptorTransformer.java index a35cd28..20bfbe8 100644 --- a/src/main/java/net/md_5/specialsource/MethodDescriptorTransformer.java +++ b/src/main/java/net/md_5/specialsource/MethodDescriptorTransformer.java @@ -57,7 +57,7 @@ public class MethodDescriptorTransformer { String className = rest.substring(1, end); i += className.length() + 1; - String newClassName = JarRemapper.mapTypeName(className, packageMap, classMap); + String newClassName = JarRemapper.mapTypeName(className, packageMap, classMap, className); output.append("L").append(newClassName).append(";"); break; diff --git a/src/main/java/net/md_5/specialsource/RemappedRuntimeInheritanceProvider.java b/src/main/java/net/md_5/specialsource/RemappedRuntimeInheritanceProvider.java index eaa66fe..8db1db7 100644 --- a/src/main/java/net/md_5/specialsource/RemappedRuntimeInheritanceProvider.java +++ b/src/main/java/net/md_5/specialsource/RemappedRuntimeInheritanceProvider.java @@ -31,7 +31,14 @@ public class RemappedRuntimeInheritanceProvider extends RuntimeInheritanceProvid @Override public List getParents(String before) { // Remap the input (example: cb -> obf) - String after = JarRemapper.mapTypeName(before, jarMapping.packages, jarMapping.classes); + // If the type is not mapped, return immediately + String after = JarRemapper.mapTypeName(before, jarMapping.packages, jarMapping.classes, null); + if (after == null) { + if (verbose) { + System.out.println("RemappedRuntimeInheritanceProvider doesn't know about "+before); + } + return null; + } if (verbose) { System.out.println("RemappedRuntimeInheritanceProvider getParents "+before+" -> "+after); @@ -48,7 +55,7 @@ public class RemappedRuntimeInheritanceProvider extends RuntimeInheritanceProvid // Un-remap the output (example: obf -> cb) List afterParents = new ArrayList(); for (String beforeParent : beforeParents) { - String afterParent = JarRemapper.mapTypeName(beforeParent, inverseJarMapping.packages, inverseJarMapping.classes); + String afterParent = JarRemapper.mapTypeName(beforeParent, inverseJarMapping.packages, inverseJarMapping.classes, beforeParent); if (verbose) { System.out.println("- " + beforeParent + " -> " + afterParent); }