diff --git a/src/main/java/net/md_5/specialsource/JarMapping.java b/src/main/java/net/md_5/specialsource/JarMapping.java index 63292cf..69ff6be 100644 --- a/src/main/java/net/md_5/specialsource/JarMapping.java +++ b/src/main/java/net/md_5/specialsource/JarMapping.java @@ -49,6 +49,7 @@ public class JarMapping { public final Map methods = new HashMap(); private InheritanceMap inheritanceMap = new InheritanceMap(); private InheritanceProvider fallbackInheritanceProvider = null; + private Set ignoredPackages = new HashSet(); public JarMapping() { } @@ -70,6 +71,24 @@ public class JarMapping { this.fallbackInheritanceProvider = fallbackInheritanceProvider; } + /** + * Add a class name prefix to the mapping ignore list. + * Note: this only applies before loading mappings, not after + */ + public void addIgnorePackage(String packageName) { + ignoredPackages.add(packageName); + } + + private boolean isClassIgnored(String className) { + for (String packageName : ignoredPackages) { + if (className.startsWith(packageName)) { + return true; + } + } + + return false; + } + public String tryClimb(Map map, NodeType type, String owner, String name) { String key = owner + "/" + name; @@ -305,6 +324,10 @@ public class JarMapping { oldClassName = temp; } + if (isClassIgnored(oldClassName)) { + return; + } + if (classes.containsKey(oldClassName) && !newClassName.equals(classes.get(oldClassName))) { throw new IllegalArgumentException("Duplicate class mapping: " + oldClassName + " -> " + newClassName + " but already mapped to " + classes.get(oldClassName) + " in line=" + line); @@ -388,6 +411,7 @@ public class JarMapping { String newClassName = outputTransformer.transformClassName(newFull.substring(0, splitNew)); // TODO: verify with existing class map? (only used for reverse) String newMethodName = outputTransformer.transformMethodName(oldFull.substring(0, splitOld), newFull.substring(splitNew + 1), tokens[2]); String newMethodDescriptor = outputTransformer.transformMethodDescriptor(tokens[4]); // TODO: verify with existing class map? (only used for reverse) + // TODO: support isClassIgnored() on reversed method descriptors if (reverse) { oldClassName = newClassName;