Projects STRLCPY jadx Commits 18a1788d
🤬
Revision indexing in progress... (symbol navigation in revisions will be accurate after indexed)
  • ■ ■ ■ ■ ■ ■
    jadx-core/src/main/java/jadx/api/Decompiler.java
    skipped 53 lines
    54 54   
    55 55   private RootNode root;
    56 56   private List<IDexTreeVisitor> passes;
     57 + private List<JavaClass> classes;
    57 58   
    58 59   public Decompiler() {
    59 60   this.args = new DefaultJadxArgs();
    skipped 35 lines
    95 96   public void save() {
    96 97   try {
    97 98   ExecutorService ex = getSaveExecutor();
     99 + ex.shutdown();
    98 100   ex.awaitTermination(1, TimeUnit.DAYS);
    99 101   } catch (InterruptedException e) {
    100 102   LOG.error("Save interrupted", e);
    skipped 21 lines
    122 124   }
    123 125   });
    124 126   }
    125  - executor.shutdown();
    126 127   return executor;
    127 128   }
    128 129   
    129 130   public List<JavaClass> getClasses() {
    130  - List<ClassNode> classNodeList = root.getClasses(false);
    131  - List<JavaClass> classes = new ArrayList<JavaClass>(classNodeList.size());
    132  - for (ClassNode classNode : classNodeList) {
    133  - classes.add(new JavaClass(this, classNode));
     131 + if (classes == null) {
     132 + List<ClassNode> classNodeList = root.getClasses(false);
     133 + List<JavaClass> clsList = new ArrayList<JavaClass>(classNodeList.size());
     134 + for (ClassNode classNode : classNodeList) {
     135 + clsList.add(new JavaClass(this, classNode));
     136 + }
     137 + classes = Collections.unmodifiableList(clsList);
    134 138   }
    135  - return Collections.unmodifiableList(classes);
     139 + return classes;
    136 140   }
    137 141   
    138 142   public List<JavaPackage> getPackages() {
    139  - List<JavaClass> classes = getClasses();
    140 143   Map<String, List<JavaClass>> map = new HashMap<String, List<JavaClass>>();
    141  - for (JavaClass javaClass : classes) {
     144 + for (JavaClass javaClass : getClasses()) {
    142 145   String pkg = javaClass.getPackage();
    143 146   List<JavaClass> clsList = map.get(pkg);
    144 147   if (clsList == null) {
    skipped 23 lines
    168 171   }
    169 172   
    170 173   void parse() throws DecodeException {
    171  - ClassInfo.clearCache();
    172  - ErrorsCounter.reset();
    173  - 
     174 + reset();
    174 175   root = new RootNode();
    175 176   LOG.info("loading ...");
    176 177   root.load(inputFiles);
    177 178   }
    178 179   
     180 + private void reset() {
     181 + ClassInfo.clearCache();
     182 + ErrorsCounter.reset();
     183 + classes = null;
     184 + }
     185 + 
    179 186   void processClass(ClassNode cls) {
    180 187   LOG.info("processing class {} ...", cls);
    181 188   ProcessClass.process(cls, passes);
    skipped 1 lines
    183 190   
    184 191   RootNode getRoot() {
    185 192   return root;
     193 + }
     194 + 
     195 + JavaClass findJavaClass(ClassNode cls) {
     196 + if (cls == null) {
     197 + return null;
     198 + }
     199 + for (JavaClass javaClass : getClasses()) {
     200 + if (javaClass.getClassNode().equals(cls)) {
     201 + return javaClass;
     202 + }
     203 + }
     204 + return null;
    186 205   }
    187 206  }
    188 207   
  • ■ ■ ■ ■ ■ ■
    jadx-core/src/main/java/jadx/api/JavaClass.java
    skipped 47 lines
    48 48   }
    49 49   }
    50 50   
     51 + ClassNode getClassNode() {
     52 + return cls;
     53 + }
     54 + 
    51 55   private void load() {
    52 56   int inClsCount = cls.getInnerClasses().size();
    53 57   if (inClsCount != 0) {
    skipped 38 lines
    92 96   }
    93 97   
    94 98   private Map<CodePosition, Object> getCodeAnnotations() {
    95  - getCode();
     99 + decompile();
    96 100   return cls.getCode().getAnnotations();
    97 101   }
    98 102   
    skipped 9 lines
    108 112   } else if (obj instanceof FieldNode) {
    109 113   clsNode = ((FieldNode) obj).getParentClass();
    110 114   }
    111  - if (clsNode != null) {
    112  - clsNode = clsNode.getParentClass();
    113  - JavaClass jCls = new JavaClass(decompiler, clsNode);
    114  - jCls.decompile();
    115  - int defLine = ((LineAttrNode) obj).getDecompiledLine();
    116  - return new CodePosition(jCls, defLine, 0);
     115 + if (clsNode == null) {
     116 + return null;
    117 117   }
     118 + clsNode = clsNode.getParentClass();
     119 + JavaClass jCls = decompiler.findJavaClass(clsNode);
     120 + if (jCls == null) {
     121 + return null;
     122 + }
     123 + jCls.decompile();
     124 + int defLine = ((LineAttrNode) obj).getDecompiledLine();
     125 + return new CodePosition(jCls, defLine, 0);
    118 126   }
    119 127   return null;
    120 128   }
    skipped 49 lines
  • ■ ■ ■ ■ ■
    jadx-gui/src/main/java/jadx/gui/JadxWrapper.java
    skipped 42 lines
    43 43   try {
    44 44   decompiler.setOutputDir(dir);
    45 45   ThreadPoolExecutor ex = decompiler.getSaveExecutor();
     46 + ex.shutdown();
    46 47   while (ex.isTerminating()) {
    47 48   long total = ex.getTaskCount();
    48 49   long done = ex.getCompletedTaskCount();
    skipped 26 lines
  • ■ ■ ■ ■
    jadx-gui/src/main/java/jadx/gui/treemodel/JClass.java
    skipped 44 lines
    45 45   if (!loaded) {
    46 46   cls.decompile();
    47 47   loaded = true;
    48  - update();
    49 48   }
     49 + update();
    50 50   }
    51 51   
    52 52   public synchronized void update() {
    skipped 77 lines
Please wait...
Page is in error, reload to recover