From be22b07ae28cd8de11e3a32c3766aed6966ec6b5 Mon Sep 17 00:00:00 2001
From: asie
Date: Wed, 7 Nov 2018 20:18:50 +0100
Subject: update Guava, show proper constructor tree node, fix
AccessFlags.toString
---
.../enigma/analysis/ClassReferenceTreeNode.java | 96 ++++++++++++++++++++++
1 file changed, 96 insertions(+)
create mode 100644 src/main/java/cuchaz/enigma/analysis/ClassReferenceTreeNode.java
(limited to 'src/main/java/cuchaz/enigma/analysis/ClassReferenceTreeNode.java')
diff --git a/src/main/java/cuchaz/enigma/analysis/ClassReferenceTreeNode.java b/src/main/java/cuchaz/enigma/analysis/ClassReferenceTreeNode.java
new file mode 100644
index 0000000..ff5f2e9
--- /dev/null
+++ b/src/main/java/cuchaz/enigma/analysis/ClassReferenceTreeNode.java
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * 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.bytecode.AccessFlags;
+import cuchaz.enigma.mapping.Translator;
+import cuchaz.enigma.mapping.entry.ClassEntry;
+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;
+import java.util.Set;
+
+public class ClassReferenceTreeNode extends DefaultMutableTreeNode
+ implements ReferenceTreeNode {
+
+ private Translator deobfuscatingTranslator;
+ private ClassEntry entry;
+ private EntryReference reference;
+ private AccessFlags access;
+
+ public ClassReferenceTreeNode(Translator deobfuscatingTranslator, ClassEntry entry) {
+ this.deobfuscatingTranslator = deobfuscatingTranslator;
+ this.entry = entry;
+ this.reference = null;
+ }
+
+ public ClassReferenceTreeNode(Translator deobfuscatingTranslator,
+ EntryReference reference, AccessFlags access) {
+ this.deobfuscatingTranslator = deobfuscatingTranslator;
+ this.entry = reference.entry;
+ this.reference = reference;
+ this.access = access;
+ }
+
+ @Override
+ public ClassEntry 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.getTranslatedClass(this.entry).getName();
+ }
+
+ public void load(JarIndex index, boolean recurse) {
+ // get all the child nodes
+ for (EntryReference reference : index.getMethodsReferencing(this.entry)) {
+ add(new ClassReferenceTreeNode(this.deobfuscatingTranslator, reference, index.getAccessFlags(this.entry)));
+ }
+
+ if (recurse && this.children != null) {
+ for (Object child : this.children) {
+ if (child instanceof ClassReferenceTreeNode) {
+ ClassReferenceTreeNode node = (ClassReferenceTreeNode) child;
+
+ // don't recurse into ancestor
+ Set ancestors = Sets.newHashSet();
+ TreeNode n = node;
+ while (n.getParent() != null) {
+ n = n.getParent();
+ if (n instanceof ClassReferenceTreeNode) {
+ ancestors.add(((ClassReferenceTreeNode) n).getEntry());
+ }
+ }
+ if (ancestors.contains(node.getEntry())) {
+ continue;
+ }
+
+ node.load(index, true);
+ }
+ }
+ }
+ }
+}
--
cgit v1.2.3