Add support for remapping subpackages in package map
Change data structure to a linked hash map, preserving insertion order. This allows subpackages to be inserted into the package map for remapping, before their parent package. For example, A/B/C -> X and A/B -> Y. With the unordered HashMap data structure, this was not possible (reliably). With LinkedHashMap, now it is.
This commit is contained in:
parent
fc8bae3e04
commit
a430689c64
@ -33,7 +33,7 @@ import java.util.*;
|
|||||||
|
|
||||||
public class JarMapping {
|
public class JarMapping {
|
||||||
|
|
||||||
public final Map<String, String> packages = new HashMap<String, String>();
|
public final LinkedHashMap<String, String> packages = new LinkedHashMap<String, String>();
|
||||||
public final Map<String, String> classes = new HashMap<String, String>();
|
public final Map<String, String> classes = new HashMap<String, String>();
|
||||||
public final Map<String, String> fields = new HashMap<String, String>();
|
public final Map<String, String> fields = new HashMap<String, String>();
|
||||||
public final Map<String, String> methods = new HashMap<String, String>();
|
public final Map<String, String> methods = new HashMap<String, String>();
|
||||||
|
@ -33,10 +33,7 @@ import java.io.File;
|
|||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Enumeration;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.jar.JarEntry;
|
import java.util.jar.JarEntry;
|
||||||
import java.util.jar.JarOutputStream;
|
import java.util.jar.JarOutputStream;
|
||||||
import org.objectweb.asm.ClassReader;
|
import org.objectweb.asm.ClassReader;
|
||||||
@ -59,7 +56,7 @@ public class JarRemapper extends Remapper {
|
|||||||
return mapTypeName(typeName, jarMapping.packages, jarMapping.classes, typeName);
|
return mapTypeName(typeName, jarMapping.packages, jarMapping.classes, typeName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String mapTypeName(String typeName, Map<String, String> packageMap, Map<String, String> classMap, String defaultIfUnmapped) {
|
public static String mapTypeName(String typeName, LinkedHashMap<String, String> packageMap, Map<String, String> classMap, String defaultIfUnmapped) {
|
||||||
int index = typeName.indexOf('$');
|
int index = typeName.indexOf('$');
|
||||||
String key = (index == -1) ? typeName : typeName.substring(0, index);
|
String key = (index == -1) ? typeName : typeName.substring(0, index);
|
||||||
String mapped = mapClassName(key, packageMap, classMap);
|
String mapped = mapClassName(key, packageMap, classMap);
|
||||||
@ -70,9 +67,11 @@ public class JarRemapper extends Remapper {
|
|||||||
/**
|
/**
|
||||||
* Helper method to map a class name by package (prefix) or class (exact)
|
* Helper method to map a class name by package (prefix) or class (exact)
|
||||||
*/
|
*/
|
||||||
private static String mapClassName(String className, Map<String, String> packageMap, Map<String, String> classMap) {
|
private static String mapClassName(String className, LinkedHashMap<String, String> packageMap, Map<String, String> classMap) {
|
||||||
if (packageMap != null) {
|
if (packageMap != null) {
|
||||||
for (String oldPackage : packageMap.keySet()) {
|
Iterator<String> iter = packageMap.keySet().iterator();
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
String oldPackage = iter.next();
|
||||||
if (className.startsWith(oldPackage)) {
|
if (className.startsWith(oldPackage)) {
|
||||||
String newPackage = packageMap.get(oldPackage);
|
String newPackage = packageMap.get(oldPackage);
|
||||||
|
|
||||||
|
@ -28,13 +28,14 @@
|
|||||||
*/
|
*/
|
||||||
package net.md_5.specialsource;
|
package net.md_5.specialsource;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class MethodDescriptorTransformer {
|
public class MethodDescriptorTransformer {
|
||||||
private Map<String, String> packageMap;
|
private LinkedHashMap<String, String> packageMap;
|
||||||
private Map<String, String> classMap;
|
private Map<String, String> classMap;
|
||||||
|
|
||||||
public MethodDescriptorTransformer(Map<String, String> packageMap, Map<String, String> classMap) {
|
public MethodDescriptorTransformer(LinkedHashMap<String, String> packageMap, Map<String, String> classMap) {
|
||||||
this.packageMap = packageMap;
|
this.packageMap = packageMap;
|
||||||
this.classMap = classMap;
|
this.classMap = classMap;
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
package net.md_5.specialsource;
|
package net.md_5.specialsource;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@ -38,7 +39,7 @@ import java.util.Map;
|
|||||||
*/
|
*/
|
||||||
public class ShadeRelocationSimulator {
|
public class ShadeRelocationSimulator {
|
||||||
|
|
||||||
public Map<String, String> relocations = new HashMap<String, String>();
|
public LinkedHashMap<String, String> relocations = new LinkedHashMap<String, String>();
|
||||||
// No relocations
|
// No relocations
|
||||||
public static final ShadeRelocationSimulator IDENTITY = new ShadeRelocationSimulator();
|
public static final ShadeRelocationSimulator IDENTITY = new ShadeRelocationSimulator();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user