fix: resolve multi-threaded unloading

This commit is contained in:
Skylot
2020-01-17 16:30:40 +03:00
parent 08f9722e33
commit bb0fad2834
3 changed files with 14 additions and 2 deletions
@@ -59,7 +59,7 @@ public final class JavaClass implements JavaNode {
public synchronized void refresh() {
listsLoaded = false;
cls.reloadCode();
cls.reRunDecompile();
}
public synchronized String getSmali() {
@@ -279,13 +279,21 @@ public class ClassNode extends LineAttrNode implements ILoadable, ICodeNode {
return decompile(true);
}
public synchronized ICodeInfo reRunDecompile() {
return decompile(false);
}
public synchronized ICodeInfo reloadCode() {
unload();
deepUnload();
return decompile(false);
}
private void deepUnload() {
public void deepUnload() {
if (cls == null) {
// manually added class
return;
}
clearAttributes();
root().getConstValues().removeForClass(this);
initialLoad();
@@ -222,6 +222,10 @@ public class RenameDialog extends JDialog {
refreshTabs(mainWindow.getTabbedPane(), updatedClasses);
if (updatedClasses.size() > 0) {
for (JavaClass updatedClass : updatedClasses) {
updatedClass.unload();
updatedClass.getClassNode().deepUnload();
}
setRefreshTask(updatedClasses);
}