diff --git a/jadx-core/src/main/java/jadx/core/codegen/CodeWriter.java b/jadx-core/src/main/java/jadx/core/codegen/CodeWriter.java index 592d34ff18665fcdf6a70e43779b7691247c3795..afd017c2a400451519ab44d0e5fcccc4527d06ca 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/CodeWriter.java +++ b/jadx-core/src/main/java/jadx/core/codegen/CodeWriter.java @@ -14,6 +14,7 @@ import org.slf4j.LoggerFactory; import jadx.api.CodePosition; import jadx.core.dex.attributes.nodes.LineAttrNode; +import jadx.core.utils.StringUtils; import jadx.core.utils.files.FileUtils; import jadx.core.utils.files.ZipSecurity; @@ -93,6 +94,15 @@ public class CodeWriter { return this; } + public CodeWriter addMultiLine(String str) { + buf.append(str); + if (str.contains(NL)) { + line += StringUtils.countMatches(str, NL); + offset = 0; + } + return this; + } + public CodeWriter add(String str) { buf.append(str); offset += str.length(); diff --git a/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java b/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java index f36d03ddbb6cf077141201853e2c4b8da088d8e2..174751ef498412d86e9e26b0e152c1586ad32620 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java @@ -170,7 +170,7 @@ public class MethodGen { if (cause != null) { code.newLine(); code.add("/*"); - code.newLine().add("Error: ").add(Utils.getStackTrace(cause)); + code.newLine().add("Error: ").addMultiLine(Utils.getStackTrace(cause)); code.add("*/"); } } diff --git a/jadx-core/src/main/java/jadx/core/utils/StringUtils.java b/jadx-core/src/main/java/jadx/core/utils/StringUtils.java index ecebdcbda1353a59357d58b247d7beca6ac4e7bd..35633787095bdb874a5ec95405f49e92d6e1f026 100644 --- a/jadx-core/src/main/java/jadx/core/utils/StringUtils.java +++ b/jadx-core/src/main/java/jadx/core/utils/StringUtils.java @@ -202,4 +202,18 @@ public class StringUtils { public static boolean notEmpty(String str) { return str != null && !str.isEmpty(); } + + public static int countMatches(String str, String subStr) { + if (str == null || str.isEmpty() || subStr == null || subStr.isEmpty()) { + return 0; + } + int subStrLen = subStr.length(); + int count = 0; + int idx = 0; + while ((idx = str.indexOf(subStr, idx)) != -1) { + count++; + idx += subStrLen; + } + return count; + } }