Projects STRLCPY jadx Commits 7b1c7b96
🤬
Revision indexing in progress... (symbol navigation in revisions will be accurate after indexed)
  • ■ ■ ■ ■ ■ ■
    jadx-core/src/main/java/jadx/core/codegen/NameGen.java
    skipped 6 lines
    7 7   
    8 8  import jadx.core.Consts;
    9 9  import jadx.core.deobf.NameMapper;
     10 +import jadx.core.dex.attributes.AFlag;
    10 11  import jadx.core.dex.attributes.nodes.LoopLabelAttr;
    11 12  import jadx.core.dex.info.ClassInfo;
    12 13  import jadx.core.dex.info.MethodInfo;
    skipped 160 lines
    173 174   
    174 175   private String makeNameForType(ArgType type) {
    175 176   if (type.isPrimitive()) {
    176  - return makeNameForPrimitive(type);
     177 + return type.getPrimitiveType().getShortName().toLowerCase();
    177 178   }
    178 179   if (type.isArray()) {
    179 180   return makeNameForType(type.getArrayRootElement()) + "Arr";
    180 181   }
    181 182   return makeNameForObject(type);
    182  - }
    183  - 
    184  - private static String makeNameForPrimitive(ArgType type) {
    185  - return type.getPrimitiveType().getShortName().toLowerCase();
    186 183   }
    187 184   
    188 185   private String makeNameForObject(ArgType type) {
    skipped 5 lines
    194 191   if (alias != null) {
    195 192   return alias;
    196 193   }
    197  - ClassInfo extClsInfo = ClassInfo.fromType(mth.root(), type);
    198  - String shortName = extClsInfo.getShortName();
    199  - String vName = fromName(shortName);
    200  - if (vName != null) {
    201  - return vName;
    202  - }
    203  - if (shortName != null) {
    204  - String lower = StringUtils.escape(shortName.toLowerCase());
    205  - if (shortName.equals(lower)) {
    206  - return lower + "Var";
    207  - }
    208  - return lower;
    209  - }
     194 + return makeNameForCheckedClass(ClassInfo.fromType(mth.root(), type));
    210 195   }
    211 196   return StringUtils.escape(type.toString());
    212 197   }
    213 198   
     199 + private String makeNameForCheckedClass(ClassInfo classInfo) {
     200 + String shortName = classInfo.getAliasShortName();
     201 + String vName = fromName(shortName);
     202 + if (vName != null) {
     203 + return vName;
     204 + }
     205 + String lower = StringUtils.escape(shortName.toLowerCase());
     206 + if (shortName.equals(lower)) {
     207 + return lower + "Var";
     208 + }
     209 + return lower;
     210 + }
     211 + 
     212 + private String makeNameForClass(ClassInfo classInfo) {
     213 + String alias = getAliasForObject(classInfo.getFullName());
     214 + if (alias != null) {
     215 + return alias;
     216 + }
     217 + return makeNameForCheckedClass(classInfo);
     218 + }
     219 + 
    214 220   private static String fromName(String name) {
    215 221   if (name == null || name.isEmpty()) {
    216 222   return null;
    skipped 24 lines
    241 247   
    242 248   case CONSTRUCTOR:
    243 249   ConstructorInsn co = (ConstructorInsn) insn;
    244  - return makeNameForObject(co.getClassType().getType());
     250 + MethodNode callMth = mth.root().getMethodUtils().resolveMethod(co);
     251 + if (callMth != null && callMth.contains(AFlag.ANONYMOUS_CONSTRUCTOR)) {
     252 + // don't use name of anonymous class
     253 + return null;
     254 + }
     255 + return makeNameForClass(co.getClassType());
    245 256   
    246 257   case ARRAY_LENGTH:
    247 258   return "length";
    skipped 19 lines
    267 278   }
    268 279   
    269 280   private String makeNameFromInvoke(MethodInfo callMth) {
    270  - String name = callMth.getName();
    271  - ArgType declType = callMth.getDeclClass().getType();
     281 + String name = callMth.getAlias();
     282 + ClassInfo declClass = callMth.getDeclClass();
    272 283   if ("getInstance".equals(name)) {
    273 284   // e.g. Cipher.getInstance
    274  - return makeNameForType(declType);
     285 + return makeNameForClass(declClass);
    275 286   }
    276 287   if (name.startsWith("get") || name.startsWith("set")) {
    277 288   return fromName(name.substring(3));
    skipped 2 lines
    280 291   return "it";
    281 292   }
    282 293   if ("toString".equals(name)) {
    283  - return makeNameForType(declType);
     294 + return makeNameForClass(declClass);
    284 295   }
    285  - if ("forName".equals(name) && declType.equals(ArgType.CLASS)) {
     296 + if ("forName".equals(name) && declClass.getType().equals(ArgType.CLASS)) {
    286 297   return OBJ_ALIAS.get(Consts.CLASS_CLASS);
    287 298   }
    288 299   if (name.startsWith("to")) {
    skipped 6 lines
  • ■ ■ ■ ■ ■ ■
    jadx-core/src/main/java/jadx/core/dex/nodes/utils/MethodUtils.java
    skipped 44 lines
    45 45   return root.getClsp().getMethodDetails(callMth);
    46 46   }
    47 47   
     48 + @Nullable
     49 + public MethodNode resolveMethod(BaseInvokeNode invokeNode) {
     50 + IMethodDetails methodDetails = getMethodDetails(invokeNode);
     51 + if (methodDetails instanceof MethodNode) {
     52 + return ((MethodNode) methodDetails);
     53 + }
     54 + return null;
     55 + }
     56 + 
    48 57   /**
    49 58   * Search methods with same name and args count in class hierarchy starting from {@code startCls}
    50 59   * Beware {@code startCls} can be different from {@code mthInfo.getDeclClass()}
    skipped 101 lines
Please wait...
Page is in error, reload to recover