Add full support for remapping packages with PK: in .srg
- Includes support for the default package, '.' - Checks package mappings _after_ class mappings
This commit is contained in:
parent
8f87de55e4
commit
6640b89354
@ -266,6 +266,7 @@ public class JarMapping {
|
||||
|
||||
if (oldClassName.endsWith("/")) {
|
||||
// Special case: mapping an entire hierarchy of classes
|
||||
// TODO: support default package, '.' in .srg
|
||||
packages.put(oldClassName.substring(0, oldClassName.length() - 1), newClassName);
|
||||
} else {
|
||||
classes.put(oldClassName, newClassName);
|
||||
@ -319,23 +320,30 @@ public class JarMapping {
|
||||
classes.put(oldClassName, newClassName);
|
||||
}
|
||||
} else if (kind.equals("PK:")) {
|
||||
/* TODO: support .srg's package maps properly - not simply prefix matches(?)
|
||||
String oldPackageName = inputTransformer.transformClassName(tokens[1]);
|
||||
String newPackageName = outputTransformer.transformClassName(tokens[2]);
|
||||
String oldPackageName = inputTransformer.transformClassName(tokens[1]);
|
||||
String newPackageName = outputTransformer.transformClassName(tokens[2]);
|
||||
|
||||
if (reverse) {
|
||||
String temp = newPackageName;
|
||||
newPackageName = oldPackageName;
|
||||
oldPackageName = temp;
|
||||
}
|
||||
if (reverse) {
|
||||
String temp = newPackageName;
|
||||
newPackageName = oldPackageName;
|
||||
oldPackageName = temp;
|
||||
}
|
||||
|
||||
if (packages.containsKey(oldPackageName) && !newPackageName.equals(packages.get(oldPackageName))) {
|
||||
throw new IllegalArgumentException("Duplicate package mapping: " + oldPackageName + " ->" + newPackageName +
|
||||
" but already mapped to "+packages.get(oldPackageName)+" in line="+line);
|
||||
}
|
||||
// package names always either 1) suffixed with '/', or 2) equal to '.' to signify default package
|
||||
if (!newPackageName.equals(".") && !newPackageName.endsWith("/")) {
|
||||
newPackageName += "/";
|
||||
}
|
||||
|
||||
packages.put(oldPackageName, newPackageName);
|
||||
*/
|
||||
if (!oldPackageName.equals(".") && !oldPackageName.endsWith("/")) {
|
||||
oldPackageName += "/";
|
||||
}
|
||||
|
||||
if (packages.containsKey(oldPackageName) && !newPackageName.equals(packages.get(oldPackageName))) {
|
||||
throw new IllegalArgumentException("Duplicate package mapping: " + oldPackageName + " ->" + newPackageName +
|
||||
" but already mapped to "+packages.get(oldPackageName)+" in line="+line);
|
||||
}
|
||||
|
||||
packages.put(oldPackageName, newPackageName);
|
||||
} else if (kind.equals("FD:")) {
|
||||
String oldFull = tokens[1];
|
||||
String newFull = tokens[2];
|
||||
|
@ -101,19 +101,52 @@ public class JarRemapper extends Remapper {
|
||||
* 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) {
|
||||
if (classMap != null && classMap.containsKey(className)) {
|
||||
return classMap.get(className);
|
||||
}
|
||||
|
||||
if (packageMap != null) {
|
||||
Iterator<String> iter = packageMap.keySet().iterator();
|
||||
while (iter.hasNext()) {
|
||||
String oldPackage = iter.next();
|
||||
if (className.startsWith(oldPackage)) {
|
||||
if (matchClassPackage(oldPackage, className)) {
|
||||
String newPackage = packageMap.get(oldPackage);
|
||||
|
||||
return newPackage + className.substring(oldPackage.length());
|
||||
return moveClassPackage(newPackage, getSimpleName(oldPackage, className));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return classMap != null ? classMap.get(className) : null;
|
||||
return null;
|
||||
}
|
||||
|
||||
private static boolean matchClassPackage(String packageName, String className) {
|
||||
if (packageName.equals(".")) {
|
||||
return isDefaultPackage(className);
|
||||
}
|
||||
|
||||
return className.startsWith(packageName);
|
||||
}
|
||||
|
||||
private static String moveClassPackage(String packageName, String classSimpleName) {
|
||||
if (packageName.equals(".")) {
|
||||
System.out.println("moveClassPackage(.) "+classSimpleName);
|
||||
return classSimpleName;
|
||||
}
|
||||
|
||||
return packageName + classSimpleName;
|
||||
}
|
||||
|
||||
private static boolean isDefaultPackage(String className) {
|
||||
return className.indexOf('/') == -1;
|
||||
}
|
||||
|
||||
private static String getSimpleName(String oldPackage, String className) {
|
||||
if (oldPackage.equals(".")) {
|
||||
return className;
|
||||
}
|
||||
|
||||
return className.substring(oldPackage.length());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
Reference in New Issue
Block a user