From 2b2249e873c4adfd2dd6e8f1f2489ccd9f6aa021 Mon Sep 17 00:00:00 2001
From: gegy1000
Date: Sat, 19 May 2018 17:02:46 +0200
Subject: Initial port to ASM
---
.../enigma/analysis/MethodReferenceTreeNode.java | 91 ++++++++++++++++++++++
1 file changed, 91 insertions(+)
create mode 100644 src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
(limited to 'src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java')
diff --git a/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java b/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
new file mode 100644
index 0000000..37b4073
--- /dev/null
+++ b/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Jeff Martin.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the GNU Lesser General Public
+ * License v3.0 which accompanies this distribution, and is available at
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * Contributors:
+ * Jeff Martin - initial API and implementation
+ ******************************************************************************/
+
+package cuchaz.enigma.analysis;
+
+import com.google.common.collect.Sets;
+import cuchaz.enigma.mapping.*;
+
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.TreeNode;
+import java.util.Set;
+
+public class MethodReferenceTreeNode extends DefaultMutableTreeNode
+ implements ReferenceTreeNode {
+
+ private Translator deobfuscatingTranslator;
+ private MethodEntry entry;
+ private EntryReference reference;
+ private Access access;
+
+ public MethodReferenceTreeNode(Translator deobfuscatingTranslator, MethodEntry entry) {
+ this.deobfuscatingTranslator = deobfuscatingTranslator;
+ this.entry = entry;
+ this.reference = null;
+ }
+
+ public MethodReferenceTreeNode(Translator deobfuscatingTranslator,
+ EntryReference reference, Access access) {
+ this.deobfuscatingTranslator = deobfuscatingTranslator;
+ this.entry = reference.entry;
+ this.reference = reference;
+ this.access = access;
+ }
+
+ @Override
+ public MethodEntry getEntry() {
+ return this.entry;
+ }
+
+ @Override
+ public EntryReference getReference() {
+ return this.reference;
+ }
+
+ @Override
+ public String toString() {
+ if (this.reference != null) {
+ return String.format("%s (%s)", this.deobfuscatingTranslator.getTranslatedMethodDef(this.reference.context),
+ this.access);
+ }
+ return this.deobfuscatingTranslator.getTranslatedMethod(this.entry).getName();
+ }
+
+ public void load(JarIndex index, boolean recurse) {
+ // get all the child nodes
+ for (EntryReference reference : index.getMethodReferences(this.entry)) {
+ add(new MethodReferenceTreeNode(this.deobfuscatingTranslator, reference, index.getAccess(this.entry)));
+ }
+
+ if (recurse && this.children != null) {
+ for (Object child : this.children) {
+ if (child instanceof MethodReferenceTreeNode) {
+ MethodReferenceTreeNode node = (MethodReferenceTreeNode) child;
+
+ // don't recurse into ancestor
+ Set ancestors = Sets.newHashSet();
+ TreeNode n = node;
+ while (n.getParent() != null) {
+ n = n.getParent();
+ if (n instanceof MethodReferenceTreeNode) {
+ ancestors.add(((MethodReferenceTreeNode) n).getEntry());
+ }
+ }
+ if (ancestors.contains(node.getEntry())) {
+ continue;
+ }
+
+ node.load(index, true);
+ }
+ }
+ }
+ }
+}
--
cgit v1.2.3
From 406b9a89318473571d27de60b8aa1b51f84af245 Mon Sep 17 00:00:00 2001
From: gegy1000
Date: Sat, 19 May 2018 17:06:26 +0200
Subject: Package updates
---
src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java | 3 +++
1 file changed, 3 insertions(+)
(limited to 'src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java')
diff --git a/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java b/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
index 37b4073..15ae515 100644
--- a/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
+++ b/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
@@ -13,6 +13,9 @@ package cuchaz.enigma.analysis;
import com.google.common.collect.Sets;
import cuchaz.enigma.mapping.*;
+import cuchaz.enigma.mapping.entry.Entry;
+import cuchaz.enigma.mapping.entry.MethodDefEntry;
+import cuchaz.enigma.mapping.entry.MethodEntry;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;
--
cgit v1.2.3
From 8a0e350a04e570074557ff0a53d67e82d54d3005 Mon Sep 17 00:00:00 2001
From: gegy1000
Date: Sun, 24 Jun 2018 12:24:48 +0200
Subject: Fix method reference and bridge detection
---
src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java')
diff --git a/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java b/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
index 15ae515..76c73c1 100644
--- a/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
+++ b/src/main/java/cuchaz/enigma/analysis/MethodReferenceTreeNode.java
@@ -64,7 +64,7 @@ public class MethodReferenceTreeNode extends DefaultMutableTreeNode
public void load(JarIndex index, boolean recurse) {
// get all the child nodes
- for (EntryReference reference : index.getMethodReferences(this.entry)) {
+ for (EntryReference reference : index.getMethodsReferencing(this.entry)) {
add(new MethodReferenceTreeNode(this.deobfuscatingTranslator, reference, index.getAccess(this.entry)));
}
--
cgit v1.2.3