From 373fc38ad28487e4237835e879fec08e43716f67 Mon Sep 17 00:00:00 2001 From: Konloch Date: Thu, 1 Jul 2021 02:06:12 -0700 Subject: [PATCH] Saving After Actions --- .../club/bytecodeviewer/BytecodeViewer.java | 18 +++++++++-- .../decompilers/FernFlowerDecompiler.java | 5 ++-- .../bytecodeviewer/gui/MainViewerGUI.java | 30 ++++++++++++------- .../resourceviewer/viewer/ClassViewer.java | 2 +- 4 files changed, 40 insertions(+), 15 deletions(-) diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java b/src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java index 5e818e48..b965760e 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java @@ -215,7 +215,7 @@ public class BytecodeViewer * @param cli is it running CLI mode or not */ public static void boot(boolean cli) { - cleanup(); + cleanupAsync(); Runtime.getRuntime().addShutdownHook(new Thread(() -> { for (Process proc : createdProcesses) proc.destroy(); @@ -523,9 +523,13 @@ public class BytecodeViewer */ public static void openFiles(final File[] files, boolean recentFiles) { if (recentFiles) + { for (File f : files) if (f.exists()) Settings.addRecentFile(f); + + SettingsSerializer.saveSettingsAsync(); + } BytecodeViewer.viewer.updateBusyStatus(true); Configuration.needsReDump = true; @@ -584,11 +588,21 @@ public class BytecodeViewer Objects.requireNonNull(MainViewerGUI.getComponent(SearchBoxPane.class)).resetWorkspace(); the.bytecode.club.bytecodeviewer.api.BytecodeViewer.getClassNodeLoader().clear(); } + + /** + * Clears the temp directory + */ + public static void cleanupAsync() + { + Thread cleanupThread = new Thread(BytecodeViewer::cleanup); + cleanupThread.start(); + } /** * Clears the temp directory */ - public static void cleanup() { + public static void cleanup() + { File tempF = new File(tempDirectory); try { diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/decompilers/FernFlowerDecompiler.java b/src/main/java/the/bytecode/club/bytecodeviewer/decompilers/FernFlowerDecompiler.java index ca8cb359..f85bbfcd 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/decompilers/FernFlowerDecompiler.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/decompilers/FernFlowerDecompiler.java @@ -62,7 +62,8 @@ public class FernFlowerDecompiler extends InternalDecompiler } @Override - public String decompileClassNode(final ClassNode cn, byte[] b) { + public String decompileClassNode(final ClassNode cn, byte[] b) + { String start = tempDirectory + fs + MiscUtils.getUniqueName("", ".class"); final File tempClass = new File(start + ".class"); @@ -99,7 +100,7 @@ public class FernFlowerDecompiler extends InternalDecompiler } else { try { org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler.main(generateMainMethod(tempClass.getAbsolutePath(), new File(tempDirectory).getAbsolutePath())); - } catch (StackOverflowError | Exception e) { + } catch (Throwable e) { StringWriter sw = new StringWriter(); e.printStackTrace(new PrintWriter(sw)); e.printStackTrace(); diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/MainViewerGUI.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/MainViewerGUI.java index 7d2f39f3..64a5be15 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/MainViewerGUI.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/MainViewerGUI.java @@ -407,7 +407,7 @@ public class MainViewerGUI extends JFrame { Configuration.rstaTheme = t; item.setSelected(true); - SettingsSerializer.saveSettings(); + SettingsSerializer.saveSettingsAsync(); }); rstaThemes.put(t, item); @@ -429,7 +429,7 @@ public class MainViewerGUI extends JFrame Configuration.rstaTheme = theme.getRSTATheme(); rstaThemes.get(Configuration.rstaTheme).setSelected(true); item.setSelected(true); - SettingsSerializer.saveSettings(); + SettingsSerializer.saveSettingsAsync(); try { @@ -457,7 +457,7 @@ public class MainViewerGUI extends JFrame item.addActionListener(e -> { - SettingsSerializer.saveSettings(); + SettingsSerializer.saveSettingsAsync(); MiscUtils.setLanguage(l); }); @@ -566,7 +566,7 @@ public class MainViewerGUI extends JFrame bytecodeDecompilerSettingsSecondaryMenu.add(appendBracketsToLabels); deleteForeignOutdatedLibs.addActionListener(arg0 -> showForeignLibraryWarning()); - forcePureAsciiAsText.addActionListener(arg0 -> SettingsSerializer.saveSettings()); + forcePureAsciiAsText.addActionListener(arg0 -> SettingsSerializer.saveSettingsAsync()); setPython2.addActionListener(arg0 -> selectPythonC()); setJRERT.addActionListener(arg0 -> selectJRERTLibrary()); setPython3.addActionListener(arg0 -> selectPythonC3()); @@ -574,12 +574,12 @@ public class MainViewerGUI extends JFrame setJavac.addActionListener(arg0 -> selectJavac()); showFileInTabTitle.addActionListener(arg0 -> { Configuration.displayParentInTab = BytecodeViewer.viewer.showFileInTabTitle.isSelected(); - SettingsSerializer.saveSettings(); + SettingsSerializer.saveSettingsAsync(); BytecodeViewer.refreshAllTabTitles(); }); simplifyNameInTabTitle.addActionListener(arg0 -> { Configuration.simplifiedTabNames = BytecodeViewer.viewer.simplifyNameInTabTitle.isSelected(); - SettingsSerializer.saveSettings(); + SettingsSerializer.saveSettingsAsync(); BytecodeViewer.refreshAllTabTitles(); }); } @@ -736,11 +736,14 @@ public class MainViewerGUI extends JFrame public synchronized void clearBusyStatus() { - for (int i = 0; i < waitIcons.length; i++) + SwingUtilities.invokeLater(()-> { - waitIcons[i].setIcon(null); - waitIcons[i].updateUI(); - } + for (JMenuItem waitIcon : waitIcons) + { + waitIcon.setIcon(null); + waitIcon.updateUI(); + } + }); } public synchronized void updateBusyStatus(final boolean busy) { @@ -866,6 +869,7 @@ public class MainViewerGUI extends JFrame try { Configuration.lastDirectory = fc.getSelectedFile().getAbsolutePath(); Configuration.python = fc.getSelectedFile().getAbsolutePath(); + SettingsSerializer.saveSettingsAsync(); } catch (Exception e1) { new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e1); } @@ -882,6 +886,7 @@ public class MainViewerGUI extends JFrame try { Configuration.lastDirectory = fc.getSelectedFile().getAbsolutePath(); Configuration.javac = fc.getSelectedFile().getAbsolutePath(); + SettingsSerializer.saveSettingsAsync(); } catch (Exception e1) { new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e1); } @@ -898,6 +903,7 @@ public class MainViewerGUI extends JFrame try { Configuration.lastDirectory = fc.getSelectedFile().getAbsolutePath(); Configuration.java = fc.getSelectedFile().getAbsolutePath(); + SettingsSerializer.saveSettingsAsync(); } catch (Exception e1) { new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e1); } @@ -914,6 +920,7 @@ public class MainViewerGUI extends JFrame try { Configuration.lastDirectory = fc.getSelectedFile().getAbsolutePath(); Configuration.python3 = fc.getSelectedFile().getAbsolutePath(); + SettingsSerializer.saveSettingsAsync(); } catch (Exception e1) { new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e1); } @@ -934,6 +941,7 @@ public class MainViewerGUI extends JFrame try { Configuration.lastDirectory = fc.getSelectedFile().getAbsolutePath(); Configuration.library = fc.getSelectedFile().getAbsolutePath(); + SettingsSerializer.saveSettingsAsync(); } catch (Exception e1) { new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e1); } @@ -950,6 +958,7 @@ public class MainViewerGUI extends JFrame try { Configuration.lastDirectory = fc.getSelectedFile().getAbsolutePath(); Configuration.rt = fc.getSelectedFile().getAbsolutePath(); + SettingsSerializer.saveSettingsAsync(); } catch (Exception e1) { new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e1); } @@ -970,6 +979,7 @@ public class MainViewerGUI extends JFrame BytecodeViewer.viewer.updateBusyStatus(true); BytecodeViewer.startPlugin(fc.getSelectedFile()); BytecodeViewer.viewer.updateBusyStatus(false); + SettingsSerializer.saveSettingsAsync(); } catch (Exception e1) { new ExceptionUI(e1); } diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourceviewer/viewer/ClassViewer.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourceviewer/viewer/ClassViewer.java index e38b5e63..fdc2a010 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourceviewer/viewer/ClassViewer.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourceviewer/viewer/ClassViewer.java @@ -197,7 +197,7 @@ public class ClassViewer extends ResourceViewer + "test or export your changes.\nYou can set compile automatically on refresh or on save " + "in the settings menu."); - SettingsSerializer.saveSettings(); + SettingsSerializer.saveSettingsAsync(); } } }