From 0c85b2bb23671339e7190f84e9e5db7e421297bd Mon Sep 17 00:00:00 2001 From: Nico Mexis Date: Mon, 11 Jul 2022 22:39:36 +0200 Subject: [PATCH 1/5] Update dependencies --- pom.xml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/pom.xml b/pom.xml index 5fe5ba4f..280379df 100644 --- a/pom.xml +++ b/pom.xml @@ -23,31 +23,31 @@ 1.9.12 1.5.0 1.15 - 3.1.7 + 3.1.8 1.21 2.11.0 3.12.0 1.9 - 3.0.1-SNAPSHOT + 3.0.1 0.4.1 - 5.2.1.Final - v49 - 4281855 - 2.9.0 + 6.0.0.Final + v52 + e0d44f4 + 2.9.1 31.1-jre 4.2 - 1.3.5 + 1.4.4 1.6.6bcv 3.4.1.3 21.2.0 - 3.2 + 3.3 0.2.0 0.6.0 3.2.0 2.1.1 - 1.7.36 + 2.0.0 2.5.2 - 1.30 + 1.32 1.0.3 0.2.2 1.1.4c @@ -380,7 +380,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.9.0 + 3.10.1 ${maven.compiler.source} ${maven.compiler.target} @@ -390,7 +390,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.3.1 + 3.4.0 ${maven.compiler.source} From eaec4235148b2458869e573008d446b57c771643 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andra=CC=81s=20Oravecz?= Date: Fri, 30 Sep 2022 15:25:36 +0200 Subject: [PATCH 2/5] Optimized resource tree building --- .../gui/resourcelist/ResourceListPane.java | 29 ++----- .../gui/resourcelist/ResourceTreeNode.java | 85 ++++++++++++++++++- 2 files changed, 91 insertions(+), 23 deletions(-) diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/ResourceListPane.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/ResourceListPane.java index 5a1dacb8..e0c7ffc3 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/ResourceListPane.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/ResourceListPane.java @@ -176,29 +176,22 @@ public class ResourceListPane extends TranslatedVisibleComponent implements File for (String name : container.resourceClasses.keySet()) { final String[] spl = name.split("/"); - if (spl.length < 2) + int splLength = spl.length; + if (splLength < 2) { root.add(new ResourceTreeNode(name + ".class")); } else { ResourceTreeNode parent = root; - for (int i1 = 0; i1 < spl.length; i1++) + for (int i1 = 0; i1 < splLength; i1++) { String s = spl[i1]; - if (i1 == spl.length - 1) + if (i1 == splLength - 1) s += ".class"; - ResourceTreeNode child = null; - for (int i = 0; i < parent.getChildCount(); i++) - { - if (((ResourceTreeNode) parent.getChildAt(i)).getUserObject().equals(s)) - { - child = (ResourceTreeNode) parent.getChildAt(i); - break; - } - } + ResourceTreeNode child = parent.getChildByUserObject(s); if (child == null) { @@ -227,20 +220,14 @@ public class ResourceListPane extends TranslatedVisibleComponent implements File ResourceTreeNode parent = root; for (final String s : spl) { - ResourceTreeNode child = null; - for (int i = 0; i < parent.getChildCount(); i++) - { - if (((ResourceTreeNode) parent.getChildAt(i)).getUserObject().equals(s)) - { - child = (ResourceTreeNode) parent.getChildAt(i); - break; - } - } + ResourceTreeNode child = parent.getChildByUserObject(s); + if (child == null) { child = new ResourceTreeNode(s); parent.add(child); } + parent = child; } } diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/ResourceTreeNode.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/ResourceTreeNode.java index cac6be9a..ef18444d 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/ResourceTreeNode.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/ResourceTreeNode.java @@ -1,9 +1,10 @@ package the.bytecode.club.bytecodeviewer.gui.resourcelist; -import java.util.Comparator; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.MutableTreeNode; import javax.swing.tree.TreeNode; +import java.util.Comparator; +import java.util.HashMap; /*************************************************************************** * Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite * @@ -31,6 +32,9 @@ public class ResourceTreeNode extends DefaultMutableTreeNode { private static final long serialVersionUID = -8817777566176729571L; + + private static final int CHILD_MAP_BUILD_THRESHOLD = 3; + private HashMap userObjectToChildMap = null; public ResourceTreeNode(final Object o) { @@ -41,6 +45,7 @@ public class ResourceTreeNode extends DefaultMutableTreeNode public void insert(final MutableTreeNode newChild, final int childIndex) { super.insert(newChild, childIndex); + addToMap((ResourceTreeNode) newChild); } public void sort() @@ -60,7 +65,83 @@ public class ResourceTreeNode extends DefaultMutableTreeNode } } } - + + @Override + public void add(MutableTreeNode newChild) { + super.add(newChild); + addToMap((ResourceTreeNode) newChild); + } + + private void addToMap(ResourceTreeNode newChild) { + if (userObjectToChildMap != null) + { + userObjectToChildMap.put(newChild.getUserObject(), newChild); + } + else if (getChildCount() == CHILD_MAP_BUILD_THRESHOLD) + { + buildMap(); + } + } + + private void buildMap() { + userObjectToChildMap = new HashMap<>(); + + for (int i = 0, childCount = getChildCount(); i < childCount; i++) + { + ResourceTreeNode item = (ResourceTreeNode) getChildAt(i); + userObjectToChildMap.put(item.getUserObject(), item); + } + } + + @Override + public void remove(int childIndex) { + if (userObjectToChildMap != null) + { + TreeNode childAt = getChildAt(childIndex); + userObjectToChildMap.remove(((ResourceTreeNode) childAt).getUserObject()); + } + + super.remove(childIndex); + } + + @Override + public void remove(MutableTreeNode aChild) { + if (userObjectToChildMap != null && aChild != null) + { + userObjectToChildMap.remove(((ResourceTreeNode) aChild).getUserObject()); + } + + super.remove(aChild); + } + + @Override + public void removeAllChildren() { + if (userObjectToChildMap != null) + { + userObjectToChildMap.clear(); + } + + super.removeAllChildren(); + } + + public ResourceTreeNode getChildByUserObject(Object userObject) { + if (userObjectToChildMap != null) + { + return userObjectToChildMap.get(userObject); + } + + for (int i = 0, childCount = getChildCount(); i < childCount; i++) + { + ResourceTreeNode child = (ResourceTreeNode) getChildAt(i); + if (child.getUserObject().equals(userObject)) + { + return child; + } + } + + return null; + } + protected Comparator nodeComparator = new Comparator() { @Override From c3d94e42351b381e784ec46d9b04aa99edd6132a Mon Sep 17 00:00:00 2001 From: Nico Mexis Date: Mon, 26 Sep 2022 17:22:09 +0200 Subject: [PATCH 3/5] Fix dex2jar issues --- pom.xml | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 280379df..c5d62d6e 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,7 @@ 23.0.0 4.9.3 2.6.1 - 9.3 + 9.4 0.2.0 1.0bcv 0.152 @@ -27,11 +27,11 @@ 1.21 2.11.0 3.12.0 - 1.9 - 3.0.1 + 1.10.0 + 3.0.2 0.4.1 6.0.0.Final - v52 + v56 e0d44f4 2.9.1 31.1-jre @@ -43,11 +43,11 @@ 3.3 0.2.0 0.6.0 - 3.2.0 + 3.3.0 2.1.1 - 2.0.0 + 2.0.3 2.5.2 - 1.32 + 1.33 1.0.3 0.2.2 1.1.4c @@ -421,6 +421,26 @@ META-INF/MANIFEST.MF + + + com.github.ThexXTURBOXx.dex2jar:d2j-external + true + + com/android/** + api_database/** + META-INF/services/** + LICENSE + r8-version.properties + org/objectweb/asm/MethodWriter.class + + + + + org.ow2.asm:asm + + org/objectweb/asm/MethodWriter.class + + Date: Tue, 18 Oct 2022 16:10:27 +0200 Subject: [PATCH 4/5] Update GitHub Actions --- .github/workflows/maven.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 415e2ae4..985575f5 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -17,9 +17,9 @@ jobs: java: [ '8', '11', '17' ] # LTS versions steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Set up JDK ${{ matrix.java }} - uses: actions/setup-java@v2 + uses: actions/setup-java@v3 with: java-version: ${{ matrix.java }} distribution: 'temurin' @@ -29,7 +29,7 @@ jobs: run: echo ::set-output name=version::$(mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec) id: project - name: 'Upload Artifact' - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 if: ${{ matrix.java == '8' }} with: name: Bytecode-Viewer-${{ steps.project.outputs.version }}-SNAPSHOT From a0474fe3b22555da9012cb2644cc58ffaadd8977 Mon Sep 17 00:00:00 2001 From: Nico Mexis Date: Tue, 18 Oct 2022 16:19:18 +0200 Subject: [PATCH 5/5] Migrate away from set-output --- .github/workflows/maven.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 985575f5..40db89e2 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -26,12 +26,12 @@ jobs: - name: Build with Maven run: mvn -B package --file pom.xml - name: Extract Maven project version - run: echo ::set-output name=version::$(mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec) + run: echo "bcv_version=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec)" >> $GITHUB_ENV id: project - name: 'Upload Artifact' uses: actions/upload-artifact@v3 if: ${{ matrix.java == '8' }} with: - name: Bytecode-Viewer-${{ steps.project.outputs.version }}-SNAPSHOT - path: target/Bytecode-Viewer-${{ steps.project.outputs.version }}.jar + name: Bytecode-Viewer-${{ env.bcv_version }}-SNAPSHOT + path: target/Bytecode-Viewer-${{ env.bcv_version }}.jar retention-days: 90