From de7afc64ca4a794e205445ec02f1f2e7e94b2c31 Mon Sep 17 00:00:00 2001 From: Ben Gruver Date: Mon, 8 Apr 2013 18:39:55 -0700 Subject: [PATCH] Improve register merging in the case of an unresolved type --- .../jf/dexlib/Code/Analysis/RegisterType.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/dexlib/src/main/java/org/jf/dexlib/Code/Analysis/RegisterType.java b/dexlib/src/main/java/org/jf/dexlib/Code/Analysis/RegisterType.java index ed67732a..140a2122 100644 --- a/dexlib/src/main/java/org/jf/dexlib/Code/Analysis/RegisterType.java +++ b/dexlib/src/main/java/org/jf/dexlib/Code/Analysis/RegisterType.java @@ -271,19 +271,25 @@ public class RegisterType { Category mergedCategory = Category.mergeTable[this.category.ordinal()][type.category.ordinal()]; ClassDef mergedType = null; + if (this.category == Category.Unknown) { + return type; + } + if (type.category == Category.Unknown) { + return this; + } if (mergedCategory == Category.Reference) { + if (this.category == Category.Null) { + return type; + } + if (type.category == Category.Null) { + return this; + } if (this.type instanceof ClassPath.UnresolvedClassDef || type.type instanceof ClassPath.UnresolvedClassDef) { mergedType = ClassPath.getUnresolvedObjectClassDef(); } else { mergedType = ClassPath.getCommonSuperclass(this.type, type.type); } - } else if (mergedCategory == Category.UninitRef || mergedCategory == Category.UninitThis) { - if (this.category == Category.Unknown) { - return type; - } - assert type.category == Category.Unknown; - return this; } return RegisterType.getRegisterType(mergedCategory, mergedType); }