diff --git a/jadx-core/src/main/java/jadx/core/codegen/ClassGen.java b/jadx-core/src/main/java/jadx/core/codegen/ClassGen.java index dec89c983..a2cabde56 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/ClassGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/ClassGen.java @@ -18,7 +18,6 @@ import jadx.core.dex.attributes.AttrNode; import jadx.core.dex.attributes.nodes.EnumClassAttr; import jadx.core.dex.attributes.nodes.EnumClassAttr.EnumField; import jadx.core.dex.attributes.nodes.JadxError; -import jadx.core.dex.attributes.nodes.JadxWarn; import jadx.core.dex.attributes.nodes.LineAttrNode; import jadx.core.dex.attributes.nodes.SourceFileAttr; import jadx.core.dex.info.AccessInfo; @@ -327,7 +326,6 @@ public class ClassGen { private void insertDecompilationProblems(CodeWriter code, AttrNode node) { List errors = node.getAll(AType.JADX_ERROR); - List warns = node.getAll(AType.JADX_WARN); if (!errors.isEmpty()) { errors.forEach(err -> { code.startLine("/* JADX ERROR: ").add(err.getError()); @@ -340,8 +338,10 @@ public class ClassGen { code.add("*/"); }); } + List warns = node.getAll(AType.JADX_WARN); if (!warns.isEmpty()) { - warns.forEach(warn -> code.startLine("/* JADX WARNING: ").addMultiLine(warn.getWarn()).add(" */")); + warns.stream().distinct() + .forEach(warn -> code.startLine("/* JADX WARNING: ").addMultiLine(warn).add(" */")); } } diff --git a/jadx-core/src/main/java/jadx/core/dex/attributes/AType.java b/jadx-core/src/main/java/jadx/core/dex/attributes/AType.java index 2277b2add..c18f01f67 100644 --- a/jadx-core/src/main/java/jadx/core/dex/attributes/AType.java +++ b/jadx-core/src/main/java/jadx/core/dex/attributes/AType.java @@ -10,7 +10,6 @@ import jadx.core.dex.attributes.nodes.FieldReplaceAttr; import jadx.core.dex.attributes.nodes.ForceReturnAttr; import jadx.core.dex.attributes.nodes.IgnoreEdgeAttr; import jadx.core.dex.attributes.nodes.JadxError; -import jadx.core.dex.attributes.nodes.JadxWarn; import jadx.core.dex.attributes.nodes.JumpInfo; import jadx.core.dex.attributes.nodes.LocalVarsDebugInfoAttr; import jadx.core.dex.attributes.nodes.LoopInfo; @@ -37,7 +36,7 @@ public class AType { public static final AType> EDGE_INSN = new AType<>(); public static final AType> JADX_ERROR = new AType<>(); // code failed to decompile completely - public static final AType> JADX_WARN = new AType<>(); // mark code as inconsistent (code can be viewed) + public static final AType> JADX_WARN = new AType<>(); // mark code as inconsistent (code can be viewed) public static final AType> COMMENTS = new AType<>(); // any additional info about decompilation public static final AType EXC_HANDLER = new AType<>(); diff --git a/jadx-core/src/main/java/jadx/core/dex/attributes/nodes/JadxWarn.java b/jadx-core/src/main/java/jadx/core/dex/attributes/nodes/JadxWarn.java deleted file mode 100644 index 9a6e258c5..000000000 --- a/jadx-core/src/main/java/jadx/core/dex/attributes/nodes/JadxWarn.java +++ /dev/null @@ -1,21 +0,0 @@ -package jadx.core.dex.attributes.nodes; - -import java.util.Objects; - -public class JadxWarn { - - private final String warn; - - public JadxWarn(String warn) { - this.warn = Objects.requireNonNull(warn); - } - - public String getWarn() { - return warn; - } - - @Override - public String toString() { - return "JadxWarn: " + warn; - } -} diff --git a/jadx-core/src/main/java/jadx/core/utils/CodegenUtils.java b/jadx-core/src/main/java/jadx/core/utils/CodegenUtils.java index 7d588d987..22af53fd9 100644 --- a/jadx-core/src/main/java/jadx/core/utils/CodegenUtils.java +++ b/jadx-core/src/main/java/jadx/core/utils/CodegenUtils.java @@ -1,5 +1,7 @@ package jadx.core.utils; +import java.util.List; + import jadx.core.codegen.CodeWriter; import jadx.core.dex.attributes.AType; import jadx.core.dex.attributes.AttrNode; @@ -7,8 +9,10 @@ import jadx.core.dex.attributes.AttrNode; public class CodegenUtils { public static void addComments(CodeWriter code, AttrNode node) { - for (String comment : node.getAll(AType.COMMENTS)) { - code.startLine("/* ").addMultiLine(comment).add(" */"); + List comments = node.getAll(AType.COMMENTS); + if (!comments.isEmpty()) { + comments.stream().distinct() + .forEach(comment -> code.startLine("/* ").addMultiLine(comment).add(" */")); } } } diff --git a/jadx-core/src/main/java/jadx/core/utils/ErrorsCounter.java b/jadx-core/src/main/java/jadx/core/utils/ErrorsCounter.java index 2328479fb..fc88a662e 100644 --- a/jadx-core/src/main/java/jadx/core/utils/ErrorsCounter.java +++ b/jadx-core/src/main/java/jadx/core/utils/ErrorsCounter.java @@ -14,7 +14,6 @@ import jadx.core.dex.attributes.AFlag; import jadx.core.dex.attributes.AType; import jadx.core.dex.attributes.IAttributeNode; import jadx.core.dex.attributes.nodes.JadxError; -import jadx.core.dex.attributes.nodes.JadxWarn; import jadx.core.dex.nodes.ClassNode; import jadx.core.dex.nodes.IDexNode; import jadx.core.dex.nodes.MethodNode; @@ -60,7 +59,7 @@ public class ErrorsCounter { warnNodes.add(node); warnsCount++; - node.addAttr(AType.JADX_WARN, new JadxWarn(warn)); + node.addAttr(AType.JADX_WARN, warn); if (!node.contains(AType.JADX_ERROR)) { node.add(AFlag.INCONSISTENT_CODE); }