From 72c301dc548ceacabdc80707b42fe389046afc12 Mon Sep 17 00:00:00 2001 From: Skylot Date: Wed, 25 Feb 2015 22:15:03 +0300 Subject: [PATCH] core: print error on failed method decode --- .../java/jadx/core/codegen/MethodGen.java | 21 ++++++++++++------- .../java/jadx/core/dex/nodes/ClassNode.java | 4 ++-- .../jadx/core/dex/visitors/ClassModifier.java | 3 ++- 3 files changed, 17 insertions(+), 11 deletions(-) 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 da7267ef6..5c7d5885e 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java @@ -180,14 +180,19 @@ public class MethodGen { public void addFallbackMethodCode(CodeWriter code) { if (mth.getInstructions() == null) { - // load original instructions - try { - mth.load(); - DepthTraversal.visit(new FallbackModeVisitor(), mth); - } catch (DecodeException e) { - LOG.error("Error reload instructions in fallback mode:", e); - code.startLine("// Can't loadFile method instructions: " + e.getMessage()); - return; + JadxErrorAttr errorAttr = mth.get(AType.JADX_ERROR); + if (errorAttr == null + || errorAttr.getCause() == null + || !errorAttr.getCause().getClass().equals(DecodeException.class)) { + // load original instructions + try { + mth.load(); + DepthTraversal.visit(new FallbackModeVisitor(), mth); + } catch (DecodeException e) { + LOG.error("Error reload instructions in fallback mode:", e); + code.startLine("// Can't load method instructions: " + e.getMessage()); + return; + } } } InsnNode[] insnArr = mth.getInstructions(); 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 04d9447cf..030196c56 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 @@ -222,8 +222,8 @@ public class ClassNode extends LineAttrNode implements ILoadable { for (MethodNode mth : getMethods()) { try { mth.load(); - } catch (DecodeException e) { - LOG.error("Method load error", e); + } catch (Exception e) { + LOG.error("Method load error:", e); mth.addAttr(new JadxErrorAttr(e)); } } diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/ClassModifier.java b/jadx-core/src/main/java/jadx/core/dex/visitors/ClassModifier.java index 50c9dca65..71e7873ce 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/ClassModifier.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/ClassModifier.java @@ -156,7 +156,8 @@ public class ClassModifier extends AbstractVisitor { // remove public empty constructors if (af.isConstructor() && af.isPublic() - && mth.getArguments(false).isEmpty()) { + && mth.getArguments(false).isEmpty() + && !mth.contains(AType.JADX_ERROR)) { List bb = mth.getBasicBlocks(); if (bb == null || bb.isEmpty() || allBlocksEmpty(bb)) { mth.add(AFlag.DONT_GENERATE);