From ef8bdf506c48d7c9d2bd1f97030d123015c3ae44 Mon Sep 17 00:00:00 2001 From: Adrian Siekierka Date: Sun, 9 Dec 2018 12:38:11 +0100 Subject: add option to view calls to a method in general, not just the specific instance of the method --- src/main/java/cuchaz/enigma/analysis/JarIndex.java | 16 +++++++++++++++- .../cuchaz/enigma/analysis/MethodReferenceTreeNode.java | 7 ++++++- 2 files changed, 21 insertions(+), 2 deletions(-) (limited to 'src/main/java/cuchaz/enigma/analysis') diff --git a/src/main/java/cuchaz/enigma/analysis/JarIndex.java b/src/main/java/cuchaz/enigma/analysis/JarIndex.java index 820ecbb..361c8e7 100644 --- a/src/main/java/cuchaz/enigma/analysis/JarIndex.java +++ b/src/main/java/cuchaz/enigma/analysis/JarIndex.java @@ -447,8 +447,22 @@ public class JarIndex { return this.methodsReferencingClasses.get(classEntry); } + @Deprecated public Collection> getMethodsReferencing(MethodEntry methodEntry) { - return this.methodsReferencing.get(methodEntry); + return getMethodsReferencing(methodEntry, false); + } + + public Collection> getMethodsReferencing(MethodEntry methodEntry, boolean recurse) { + if (!recurse) { + return this.methodsReferencing.get(methodEntry); + } + + List> references = new ArrayList<>(); + Set methodEntries = getRelatedMethodImplementations(methodEntry); + for (MethodEntry entry : methodEntries) { + references.addAll(getMethodsReferencing(entry, false)); + } + return references; } public Collection getReferencedMethods(MethodDefEntry methodEntry) { diff --git a/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java b/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java index 0eae5cc..ac05acd 100644 --- a/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java +++ b/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java @@ -63,9 +63,14 @@ public class MethodReferenceTreeNode extends DefaultMutableTreeNode return this.deobfuscatingTranslator.getTranslatedMethod(this.entry).getName(); } + @Deprecated public void load(JarIndex index, boolean recurse) { + load(index, recurse, false); + } + + public void load(JarIndex index, boolean recurse, boolean recurseMethod) { // get all the child nodes - for (EntryReference reference : index.getMethodsReferencing(this.entry)) { + for (EntryReference reference : index.getMethodsReferencing(this.entry, recurseMethod)) { add(new MethodReferenceTreeNode(this.deobfuscatingTranslator, reference, index.getAccessFlags(this.entry))); } -- cgit v1.2.3