From edf6ce273c763168a27d8e3e47b7ee8ba0962e2b Mon Sep 17 00:00:00 2001 From: Skylot Date: Tue, 6 Feb 2024 18:17:13 +0000 Subject: [PATCH] fix: clear node flags for custom decompilation mode --- .../src/main/java/jadx/core/dex/attributes/AttrNode.java | 4 +--- .../main/java/jadx/core/dex/attributes/AttributeStorage.java | 4 ++++ jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java | 2 +- jadx-core/src/main/java/jadx/core/dex/nodes/FieldNode.java | 4 ++++ 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/dex/attributes/AttrNode.java b/jadx-core/src/main/java/jadx/core/dex/attributes/AttrNode.java index bbc996965..e5964179c 100644 --- a/jadx-core/src/main/java/jadx/core/dex/attributes/AttrNode.java +++ b/jadx-core/src/main/java/jadx/core/dex/attributes/AttrNode.java @@ -139,14 +139,12 @@ public abstract class AttrNode implements IAttributeNode { storage = EMPTY_ATTR_STORAGE; } - /** - * Remove all attribute - */ public void unloadAttributes() { if (storage == EMPTY_ATTR_STORAGE) { return; } storage.unloadAttributes(); + storage.clearFlags(); unloadIfEmpty(); } diff --git a/jadx-core/src/main/java/jadx/core/dex/attributes/AttributeStorage.java b/jadx-core/src/main/java/jadx/core/dex/attributes/AttributeStorage.java index 2b476ecf3..a3bbb860e 100644 --- a/jadx-core/src/main/java/jadx/core/dex/attributes/AttributeStorage.java +++ b/jadx-core/src/main/java/jadx/core/dex/attributes/AttributeStorage.java @@ -102,6 +102,10 @@ public class AttributeStorage { flags.remove(flag); } + public void clearFlags() { + flags.clear(); + } + public void remove(IJadxAttrType type) { if (!attributes.isEmpty()) { writeAttributes(map -> map.remove(type)); diff --git a/jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java b/jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java index a0aff4b5f..5aab2eef9 100644 --- a/jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java +++ b/jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java @@ -432,7 +432,7 @@ public class ClassNode extends NotificationAttrNode } methods.forEach(MethodNode::unload); innerClasses.forEach(ClassNode::unload); - fields.forEach(FieldNode::unloadAttributes); + fields.forEach(FieldNode::unload); unloadAttributes(); setState(NOT_LOADED); this.loadStage = LoadStage.NONE; diff --git a/jadx-core/src/main/java/jadx/core/dex/nodes/FieldNode.java b/jadx-core/src/main/java/jadx/core/dex/nodes/FieldNode.java index b4a5a244f..b73392ccd 100644 --- a/jadx-core/src/main/java/jadx/core/dex/nodes/FieldNode.java +++ b/jadx-core/src/main/java/jadx/core/dex/nodes/FieldNode.java @@ -38,6 +38,10 @@ public class FieldNode extends NotificationAttrNode implements ICodeNode { this.accFlags = new AccessInfo(accessFlags, AFType.FIELD); } + public void unload() { + unloadAttributes(); + } + public void updateType(ArgType type) { this.type = type; }