diff options
Diffstat (limited to 'third_party/java/proguard/proguard5.3.3/src/proguard/gui/ProGuardRunnable.java')
-rw-r--r-- | third_party/java/proguard/proguard5.3.3/src/proguard/gui/ProGuardRunnable.java | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/third_party/java/proguard/proguard5.3.3/src/proguard/gui/ProGuardRunnable.java b/third_party/java/proguard/proguard5.3.3/src/proguard/gui/ProGuardRunnable.java new file mode 100644 index 0000000000..2f2a1d643f --- /dev/null +++ b/third_party/java/proguard/proguard5.3.3/src/proguard/gui/ProGuardRunnable.java @@ -0,0 +1,154 @@ +/* + * ProGuard -- shrinking, optimization, obfuscation, and preverification + * of Java bytecode. + * + * Copyright (c) 2002-2017 Eric Lafortune @ GuardSquare + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +package proguard.gui; + +import proguard.*; + +import javax.swing.*; +import java.awt.*; +import java.io.PrintStream; + + +/** + * This <code>Runnable</code> runs ProGuard, sending console output to a text + * area and any exceptions to message dialogs. + * + * @see ProGuard + * @author Eric Lafortune + */ +final class ProGuardRunnable implements Runnable +{ + private final JTextArea consoleTextArea; + private final Configuration configuration; + private final String configurationFileName; + + + /** + * Creates a new ProGuardRunnable object. + * @param consoleTextArea the text area to send the console output to. + * @param configuration the ProGuard configuration. + * @param configurationFileName the optional file name of the configuration, + * for informational purposes. + */ + public ProGuardRunnable(JTextArea consoleTextArea, + Configuration configuration, + String configurationFileName) + { + this.consoleTextArea = consoleTextArea; + this.configuration = configuration; + this.configurationFileName = configurationFileName; + } + + + // Implementation for Runnable. + + public void run() + { + consoleTextArea.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + consoleTextArea.setText(""); + + // Redirect the System's out and err streams to the console text area. + PrintStream oldOut = System.out; + PrintStream oldErr = System.err; + + PrintStream printStream = + new PrintStream(new TextAreaOutputStream(consoleTextArea), true); + + System.setOut(printStream); + System.setErr(printStream); + + try + { + // Create a new ProGuard object with the GUI's configuration. + ProGuard proGuard = new ProGuard(configuration); + + // Run it. + proGuard.execute(); + + // Print out the completion message. + System.out.println("Processing completed successfully"); + } + catch (Exception ex) + { + //ex.printStackTrace(); + + // Print out the exception message. + System.out.println(ex.getMessage()); + + // Show a dialog as well. + MessageDialogRunnable.showMessageDialog(consoleTextArea, + ex.getMessage(), + msg("errorProcessing"), + JOptionPane.ERROR_MESSAGE); + } + catch (OutOfMemoryError er) + { + // Forget about the ProGuard object as quickly as possible. + System.gc(); + + // Print out a message suggesting what to do next. + System.out.println(msg("outOfMemoryInfo", configurationFileName)); + + // Show a dialog as well. + MessageDialogRunnable.showMessageDialog(consoleTextArea, + msg("outOfMemory"), + msg("errorProcessing"), + JOptionPane.ERROR_MESSAGE); + } + finally + { + // Make sure all output has been sent to the console text area. + printStream.close(); + + // Restore the old System's out and err streams. + System.setOut(oldOut); + System.setErr(oldErr); + } + + consoleTextArea.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + + // Reset the global static redirection lock. + ProGuardGUI.systemOutRedirected = false; + } + + + // Small utility methods. + + /** + * Returns the message from the GUI resources that corresponds to the given + * key. + */ + private String msg(String messageKey) + { + return GUIResources.getMessage(messageKey); + } + + + /** + * Returns the message from the GUI resources that corresponds to the given + * key and argument. + */ + private String msg(String messageKey, + Object messageArgument) + { + return GUIResources.getMessage(messageKey, new Object[] {messageArgument}); + } +} |