Add support for remapping class name prefixes

Adds support for interpreting "CL: xxx/* yyy/*" in .srg for remapping
all class names beginning with xxx/ to yyy/. Previously this functionality
was only programmatically accessible when SpecialSource was used as a
library, but now you can use it from .srg mappings as well.

May be replaced with "PK: xxx yyy" support in .srg files later,
but needs to be first thoroughly tested for full compatibility,
to ensure identical semantics as in MCP (e.g. remapping ".").

Adding CL: /* class name prefix remapping for now, separate from PK:,
which simply remaps class names matching the given prefix substring.
This commit is contained in:
Agaricus 2013-05-17 21:31:21 -07:00
parent 0cf7f47ce7
commit 78494b5ff1

View File

@ -309,21 +309,29 @@ public class JarMapping {
+ " but already mapped to " + classes.get(oldClassName) + " in line=" + line); + " but already mapped to " + classes.get(oldClassName) + " in line=" + line);
} }
classes.put(oldClassName, newClassName); if (oldClassName.endsWith("/*") && newClassName.endsWith("/*")) {
// extension for remapping class name prefixes
oldClassName = oldClassName.substring(0, oldClassName.length() - 1);
newClassName = newClassName.substring(0, newClassName.length() - 1);
packages.put(oldClassName, newClassName);
} else {
classes.put(oldClassName, newClassName);
}
} else if (kind.equals("PK:")) { } else if (kind.equals("PK:")) {
/* TODO: support .srg's package maps /* TODO: support .srg's package maps properly - not simply prefix matches(?)
String oldPackageName = inputTransformer.transformClassName(tokens[1]); String oldPackageName = inputTransformer.transformClassName(tokens[1]);
String newPackageName = outputTransformer.transformClassName(tokens[2]); String newPackageName = outputTransformer.transformClassName(tokens[2]);
if (reverse) { if (reverse) {
String temp = newPackageName; String temp = newPackageName;
newPackageName = oldPackageName; newPackageName = oldPackageName;
oldPackageName = temp; oldPackageName = temp;
} }
if (packages.containsKey(oldPackageName) && !newPackageName.equals(packages.get(oldPackageName))) { if (packages.containsKey(oldPackageName) && !newPackageName.equals(packages.get(oldPackageName))) {
throw new IllegalArgumentException("Duplicate package mapping: " + oldPackageName + " ->" + newPackageName + throw new IllegalArgumentException("Duplicate package mapping: " + oldPackageName + " ->" + newPackageName +
" but already mapped to "+packages.get(oldPackageName)+" in line="+line); " but already mapped to "+packages.get(oldPackageName)+" in line="+line);
} }
packages.put(oldPackageName, newPackageName); packages.put(oldPackageName, newPackageName);