diff --git a/jadx-core/src/main/java/jadx/core/codegen/RegionGen.java b/jadx-core/src/main/java/jadx/core/codegen/RegionGen.java index 79a9c2213..7fcd2fae1 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/RegionGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/RegionGen.java @@ -173,7 +173,12 @@ public class RegionGen extends InsnGen { if (sb.length() != 0) { sb.append(mode); } - sb.append('(').append(makeCondition(arg)).append(')'); + String s = makeCondition(arg); + if (arg.isCompare()) { + sb.append(s); + } else { + sb.append('(').append(s).append(')'); + } } return sb.toString(); default: @@ -209,7 +214,7 @@ public class RegionGen extends InsnGen { return false; } InsnNode insn = ((InsnWrapArg) arg).getWrapInsn(); - if(insn.getType() == InsnType.ARITH) { + if (insn.getType() == InsnType.ARITH) { ArithNode arith = ((ArithNode) insn); switch (arith.getOp()) { case ADD: diff --git a/jadx-core/src/main/java/jadx/core/dex/instructions/args/ArgType.java b/jadx-core/src/main/java/jadx/core/dex/instructions/args/ArgType.java index 5dfa4bdee..a55d1228f 100644 --- a/jadx-core/src/main/java/jadx/core/dex/instructions/args/ArgType.java +++ b/jadx-core/src/main/java/jadx/core/dex/instructions/args/ArgType.java @@ -46,10 +46,6 @@ public abstract class ArgType { private static ClspGraph clsp; - public static ClspGraph getClsp() { - return clsp; - } - public static void setClsp(ClspGraph clsp) { ArgType.clsp = clsp; } @@ -107,6 +103,11 @@ public abstract class ArgType { return true; } + @Override + boolean internalEquals(Object obj) { + return type == ((PrimitiveArg) obj).type; + } + @Override public String toString() { return type.toString(); @@ -118,7 +119,7 @@ public abstract class ArgType { public ObjectArg(String obj) { this.object = Utils.cleanObjectName(obj); - this.hash = obj.hashCode(); + this.hash = object.hashCode(); } @Override @@ -136,6 +137,11 @@ public abstract class ArgType { return PrimitiveType.OBJECT; } + @Override + boolean internalEquals(Object obj) { + return object.equals(((ObjectArg) obj).object); + } + @Override public String toString() { return object; @@ -167,6 +173,12 @@ public abstract class ArgType { return generics; } + @Override + boolean internalEquals(Object obj) { + return super.internalEquals(obj) + && Arrays.equals(generics, ((GenericObjectArg) obj).generics); + } + @Override public String toString() { return super.toString() + "<" + Utils.arrayToString(generics) + ">"; @@ -206,6 +218,11 @@ public abstract class ArgType { return arrayElement.getArrayRootElement(); } + @Override + boolean internalEquals(Object obj) { + return arrayElement.equals(((ArrayArg) obj).arrayElement); + } + @Override public String toString() { return arrayElement.toString() + "[]"; @@ -247,6 +264,11 @@ public abstract class ArgType { return primitive(f); } + @Override + boolean internalEquals(Object obj) { + return Arrays.equals(possibleTypes, ((UnknownArg) obj).possibleTypes); + } + @Override public String toString() { if (possibleTypes.length == PrimitiveType.values().length) @@ -591,13 +613,14 @@ public abstract class ArgType { return hash; } + abstract boolean internalEquals(Object obj); + @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (hash != obj.hashCode()) return false; if (getClass() != obj.getClass()) return false; - // TODO: don't use toString - return toString().equals(obj.toString()); + return internalEquals(obj); } } diff --git a/jadx-core/src/main/java/jadx/core/dex/regions/IfCondition.java b/jadx-core/src/main/java/jadx/core/dex/regions/IfCondition.java index a829de649..c3cea54f5 100644 --- a/jadx-core/src/main/java/jadx/core/dex/regions/IfCondition.java +++ b/jadx-core/src/main/java/jadx/core/dex/regions/IfCondition.java @@ -107,7 +107,7 @@ public final class IfCondition { case AND: return "&& " + args; case OR: - return "||" + args; + return "|| " + args; } return "??"; }