From b9d02ff4c4a3b96ce0fc75fca632590000b70395 Mon Sep 17 00:00:00 2001 From: Skylot Date: Wed, 12 Oct 2022 17:00:25 +0100 Subject: [PATCH] refactor: remove all LinkedList usage --- jadx-core/src/main/java/jadx/core/codegen/ConditionGen.java | 4 ++-- .../java/jadx/core/dex/attributes/nodes/PhiListAttr.java | 4 ++-- .../java/jadx/core/dex/visitors/blocks/BlockProcessor.java | 3 +-- .../jadx/core/dex/visitors/regions/LoopRegionVisitor.java | 6 +++--- .../main/java/jadx/core/dex/visitors/shrink/ArgsInfo.java | 4 ++-- .../main/java/jadx/core/dex/visitors/ssa/SSATransform.java | 6 +++--- .../src/main/java/jadx/core/xmlgen/ManifestAttributes.java | 6 ++---- .../java/jadx/tests/integration/names/TestNameAssign2.java | 4 ++-- 8 files changed, 17 insertions(+), 20 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/codegen/ConditionGen.java b/jadx-core/src/main/java/jadx/core/codegen/ConditionGen.java index 4281719f1..4beee4687 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/ConditionGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/ConditionGen.java @@ -1,7 +1,7 @@ package jadx.core.codegen; +import java.util.ArrayDeque; import java.util.Iterator; -import java.util.LinkedList; import java.util.Queue; import jadx.api.ICodeWriter; @@ -23,7 +23,7 @@ import jadx.core.utils.exceptions.JadxRuntimeException; public class ConditionGen extends InsnGen { private static class CondStack { - private final Queue stack = new LinkedList<>(); + private final Queue stack = new ArrayDeque<>(); public Queue getStack() { return stack; diff --git a/jadx-core/src/main/java/jadx/core/dex/attributes/nodes/PhiListAttr.java b/jadx-core/src/main/java/jadx/core/dex/attributes/nodes/PhiListAttr.java index a0a9055ba..e7e478c40 100644 --- a/jadx-core/src/main/java/jadx/core/dex/attributes/nodes/PhiListAttr.java +++ b/jadx-core/src/main/java/jadx/core/dex/attributes/nodes/PhiListAttr.java @@ -1,6 +1,6 @@ package jadx.core.dex.attributes.nodes; -import java.util.LinkedList; +import java.util.ArrayList; import java.util.List; import jadx.api.ICodeWriter; @@ -10,7 +10,7 @@ import jadx.core.dex.instructions.PhiInsn; public class PhiListAttr implements IJadxAttribute { - private final List list = new LinkedList<>(); + private final List list = new ArrayList<>(); @Override public AType getAttrType() { diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/blocks/BlockProcessor.java b/jadx-core/src/main/java/jadx/core/dex/visitors/blocks/BlockProcessor.java index 6628ea312..b50a25df8 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/blocks/BlockProcessor.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/blocks/BlockProcessor.java @@ -2,7 +2,6 @@ package jadx.core.dex.visitors.blocks; import java.util.ArrayList; import java.util.LinkedHashSet; -import java.util.LinkedList; import java.util.List; import java.util.Set; @@ -432,7 +431,7 @@ public class BlockProcessor extends AbstractVisitor { BlockNode loopHeader = loop.getStart(); List preds = loopHeader.getPredecessors(); if (preds.size() > 2) { - List blocks = new LinkedList<>(preds); + List blocks = new ArrayList<>(preds); blocks.removeIf(block -> block.contains(AFlag.LOOP_END)); BlockNode first = blocks.remove(0); BlockNode preHeader = BlockSplitter.insertBlockBetween(mth, first, loopHeader); diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/regions/LoopRegionVisitor.java b/jadx-core/src/main/java/jadx/core/dex/visitors/regions/LoopRegionVisitor.java index 327e56062..9c433bca6 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/regions/LoopRegionVisitor.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/regions/LoopRegionVisitor.java @@ -1,6 +1,6 @@ package jadx.core.dex.visitors.regions; -import java.util.LinkedList; +import java.util.ArrayList; import java.util.List; import org.slf4j.Logger; @@ -125,7 +125,7 @@ public class LoopRegionVisitor extends AbstractVisitor implements IRegionVisitor return false; } // can't make loop if argument from increment instruction is assign in loop - List args = new LinkedList<>(); + List args = new ArrayList<>(); incrInsn.getRegisterArgs(args); for (RegisterArg iArg : args) { try { @@ -268,7 +268,7 @@ public class LoopRegionVisitor extends AbstractVisitor implements IRegionVisitor || !checkInvoke(nextCall, "java.util.Iterator", "next()Ljava/lang/Object;")) { return false; } - List toSkip = new LinkedList<>(); + List toSkip = new ArrayList<>(); RegisterArg iterVar; if (nextCall.contains(AFlag.WRAPPED)) { InsnArg wrapArg = BlockUtils.searchWrappedInsnParent(mth, nextCall); diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/shrink/ArgsInfo.java b/jadx-core/src/main/java/jadx/core/dex/visitors/shrink/ArgsInfo.java index 070ac31c8..a03b3b262 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/shrink/ArgsInfo.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/shrink/ArgsInfo.java @@ -1,7 +1,7 @@ package jadx.core.dex.visitors.shrink; +import java.util.ArrayList; import java.util.BitSet; -import java.util.LinkedList; import java.util.List; import jadx.core.dex.instructions.InsnType; @@ -30,7 +30,7 @@ final class ArgsInfo { } public static List getArgs(InsnNode insn) { - List args = new LinkedList<>(); + List args = new ArrayList<>(); addArgs(insn, args); return args; } diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/ssa/SSATransform.java b/jadx-core/src/main/java/jadx/core/dex/visitors/ssa/SSATransform.java index 0801e0b85..9a21aafda 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/ssa/SSATransform.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/ssa/SSATransform.java @@ -1,10 +1,10 @@ package jadx.core.dex.visitors.ssa; +import java.util.ArrayDeque; import java.util.ArrayList; import java.util.BitSet; import java.util.Deque; import java.util.Iterator; -import java.util.LinkedList; import java.util.List; import jadx.core.dex.attributes.AFlag; @@ -81,7 +81,7 @@ public class SSATransform extends AbstractVisitor { int blocksCount = blocks.size(); BitSet hasPhi = new BitSet(blocksCount); BitSet processed = new BitSet(blocksCount); - Deque workList = new LinkedList<>(); + Deque workList = new ArrayDeque<>(); BitSet assignBlocks = la.getAssignBlocks(regNum); for (int id = assignBlocks.nextSetBit(0); id >= 0; id = assignBlocks.nextSetBit(id + 1)) { @@ -136,7 +136,7 @@ public class SSATransform extends AbstractVisitor { RenameState initState = RenameState.init(mth); initPhiInEnterBlock(initState); - Deque stack = new LinkedList<>(); + Deque stack = new ArrayDeque<>(); stack.push(initState); while (!stack.isEmpty()) { RenameState state = stack.pop(); diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/ManifestAttributes.java b/jadx-core/src/main/java/jadx/core/xmlgen/ManifestAttributes.java index d052bf57f..283d1a035 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/ManifestAttributes.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/ManifestAttributes.java @@ -4,10 +4,8 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; -import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; import javax.xml.parsers.DocumentBuilder; @@ -175,7 +173,7 @@ public class ManifestAttributes { if (attr.getType() == MAttrType.ENUM) { return attr.getValues().get(value); } else if (attr.getType() == MAttrType.FLAG) { - List flagList = new LinkedList<>(); + List flagList = new ArrayList<>(); List attrKeys = new ArrayList<>(attr.getValues().keySet()); attrKeys.sort((a, b) -> Long.compare(b, a)); // sort descending for (Long key : attrKeys) { @@ -188,7 +186,7 @@ public class ManifestAttributes { value ^= key; } } - return flagList.stream().collect(Collectors.joining("|")); + return String.join("|", flagList); } return null; } diff --git a/jadx-core/src/test/java/jadx/tests/integration/names/TestNameAssign2.java b/jadx-core/src/test/java/jadx/tests/integration/names/TestNameAssign2.java index 07387b231..2074b4b50 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/names/TestNameAssign2.java +++ b/jadx-core/src/test/java/jadx/tests/integration/names/TestNameAssign2.java @@ -1,8 +1,8 @@ package jadx.tests.integration.names; +import java.util.ArrayDeque; import java.util.BitSet; import java.util.Deque; -import java.util.LinkedList; import java.util.List; import org.junit.jupiter.api.Test; @@ -26,7 +26,7 @@ public class TestNameAssign2 extends IntegrationTest { int blocksCount = blocks.size(); BitSet hasPhi = new BitSet(blocksCount); BitSet processed = new BitSet(blocksCount); - Deque workList = new LinkedList<>(); + Deque workList = new ArrayDeque<>(); BitSet assignBlocks = la.getAssignBlocks(regNum); for (int id = assignBlocks.nextSetBit(0); id >= 0; id = assignBlocks.nextSetBit(id + 1)) {