Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDani Megert2001-09-26 15:57:57 +0000
committerDani Megert2001-09-26 15:57:57 +0000
commit9b59c62be5bcc941d922af15ea8b541447a9457b (patch)
tree9aa5e0a4dce2e537d0ad3c9ef86b3b0441d2404b
parent75d82e0d002aadb3aa7e690685948836bd6af192 (diff)
downloadeclipse.platform.text-9b59c62be5bcc941d922af15ea8b541447a9457b.tar.gz
eclipse.platform.text-9b59c62be5bcc941d922af15ea8b541447a9457b.tar.xz
eclipse.platform.text-9b59c62be5bcc941d922af15ea8b541447a9457b.zip
Updated ExceptionHandlerv0_201_2
-rw-r--r--org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPageDescriptor.java6
-rw-r--r--org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPluginImages.java4
-rw-r--r--org.eclipse.search/search/org/eclipse/search/internal/ui/SorterDescriptor.java4
-rw-r--r--org.eclipse.search/search/org/eclipse/search/internal/ui/util/ExceptionHandler.java148
4 files changed, 92 insertions, 70 deletions
diff --git a/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPageDescriptor.java b/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPageDescriptor.java
index 1f4d34c02a0..7e203c70c88 100644
--- a/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPageDescriptor.java
+++ b/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPageDescriptor.java
@@ -74,7 +74,7 @@ class SearchPageDescriptor implements Comparable {
} catch (CoreException ex) {
ExceptionHandler.handle(ex, SearchMessages.getString("Search.Error.createSearchPage.title"), SearchMessages.getString("Search.Error.createSearchPage.message")); //$NON-NLS-2$ //$NON-NLS-1$
} catch (ClassCastException ex) {
- ExceptionHandler.handle(ex, SearchMessages.getString("Search.Error.createSearchPage.title"), SearchMessages.getString("Search.Error.createSearchPage.message")); //$NON-NLS-2$ //$NON-NLS-1$
+ ExceptionHandler.displayMessageDialog(ex, SearchMessages.getString("Search.Error.createSearchPage.title"), SearchMessages.getString("Search.Error.createSearchPage.message")); //$NON-NLS-2$ //$NON-NLS-1$
return null;
}
if (result != null) {
@@ -103,7 +103,7 @@ class SearchPageDescriptor implements Comparable {
try {
url= new URL(fElement.getDeclaringExtension().getDeclaringPluginDescriptor().getInstallURL(), imageName);
} catch (java.net.MalformedURLException ex) {
- ExceptionHandler.handle(ex, SearchMessages.getString("Search.Error.createSearchPage.title"), SearchMessages.getString("Search.Error.createSearchPage.message")); //$NON-NLS-2$ //$NON-NLS-1$
+ ExceptionHandler.log(ex, SearchMessages.getString("Search.Error.createSearchPage.message")); //$NON-NLS-2$ //$NON-NLS-1$
return null;
}
return ImageDescriptor.createFromURL(url);
@@ -136,7 +136,7 @@ class SearchPageDescriptor implements Comparable {
try {
position= Integer.parseInt(str);
} catch (NumberFormatException ex) {
- ExceptionHandler.handle(ex, SearchMessages.getString("Search.Error.createSearchPage.title"), SearchMessages.getString("Search.Error.createSearchPage.message")); //$NON-NLS-2$ //$NON-NLS-1$
+ ExceptionHandler.log(ex, SearchMessages.getString("Search.Error.createSearchPage.message")); //$NON-NLS-2$ //$NON-NLS-1$
// position is Integer.MAX_VALUE;
}
return position;
diff --git a/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPluginImages.java b/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPluginImages.java
index 59513486ff4..affab46634c 100644
--- a/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPluginImages.java
+++ b/org.eclipse.search/search/org/eclipse/search/internal/ui/SearchPluginImages.java
@@ -36,7 +36,7 @@ public class SearchPluginImages {
try {
fgIconLocation= new URL(SearchPlugin.getDefault().getDescriptor().getInstallURL(), pathSuffix);
} catch (MalformedURLException ex) {
- ExceptionHandler.handle(ex, SearchMessages.getString("Search.Error.incorrectIconLocation.title"), SearchMessages.getString("Search.Error.incorrectIconLocation.message")); //$NON-NLS-2$ //$NON-NLS-1$
+ ExceptionHandler.log(ex, SearchMessages.getString("Search.Error.incorrectIconLocation.message")); //$NON-NLS-2$ //$NON-NLS-1$
}
}
@@ -97,7 +97,7 @@ public class SearchPluginImages {
try {
return new URL(fgIconLocation, buffer.toString());
} catch (MalformedURLException ex) {
- ExceptionHandler.handle(ex, SearchMessages.getString("Search.Error.incorrectIconLocation.title"), SearchMessages.getString("Search.Error.incorrectIconLocation.message")); //$NON-NLS-2$ //$NON-NLS-1$
+ ExceptionHandler.log(ex, SearchMessages.getString("Search.Error.incorrectIconLocation.message")); //$NON-NLS-2$ //$NON-NLS-1$
return null;
}
}
diff --git a/org.eclipse.search/search/org/eclipse/search/internal/ui/SorterDescriptor.java b/org.eclipse.search/search/org/eclipse/search/internal/ui/SorterDescriptor.java
index 0e818a11708..63a569c357f 100644
--- a/org.eclipse.search/search/org/eclipse/search/internal/ui/SorterDescriptor.java
+++ b/org.eclipse.search/search/org/eclipse/search/internal/ui/SorterDescriptor.java
@@ -47,7 +47,7 @@ class SorterDescriptor {
ExceptionHandler.handle(ex, SearchMessages.getString("Search.Error.createSorter.title"), SearchMessages.getString("Search.Error.createSorter.message")); //$NON-NLS-2$ //$NON-NLS-1$
return null;
} catch (ClassCastException ex) {
- ExceptionHandler.handle(ex, SearchMessages.getString("Search.Error.createSorter.title"), SearchMessages.getString("Search.Error.createSorter.message")); //$NON-NLS-2$ //$NON-NLS-1$
+ ExceptionHandler.displayMessageDialog(ex, SearchMessages.getString("Search.Error.createSorter.title"), SearchMessages.getString("Search.Error.createSorter.message")); //$NON-NLS-2$ //$NON-NLS-1$
return null;
}
}
@@ -72,7 +72,7 @@ class SorterDescriptor {
try {
url= new URL(fElement.getDeclaringExtension().getDeclaringPluginDescriptor().getInstallURL(), imageName);
} catch (java.net.MalformedURLException ex) {
- ExceptionHandler.handle(ex, SearchMessages.getString("Search.Error.createSorter.title"), SearchMessages.getString("Search.Error.createSorter.message")); //$NON-NLS-2$ //$NON-NLS-1$
+ ExceptionHandler.log(ex, SearchMessages.getString("Search.Error.createSorter.message")); //$NON-NLS-2$ //$NON-NLS-1$
return null;
}
return ImageDescriptor.createFromURL(url);
diff --git a/org.eclipse.search/search/org/eclipse/search/internal/ui/util/ExceptionHandler.java b/org.eclipse.search/search/org/eclipse/search/internal/ui/util/ExceptionHandler.java
index 4461f0b433b..fff0239c365 100644
--- a/org.eclipse.search/search/org/eclipse/search/internal/ui/util/ExceptionHandler.java
+++ b/org.eclipse.search/search/org/eclipse/search/internal/ui/util/ExceptionHandler.java
@@ -4,109 +4,131 @@
*/
package org.eclipse.search.internal.ui.util;
-import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.reflect.InvocationTargetException;
+import org.eclipse.swt.widgets.Shell;
+
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
-import org.eclipse.swt.widgets.Shell;
-
-import org.eclipse.jface.dialogs.ErrorDialog;
-import org.eclipse.jface.dialogs.MessageDialog;
-
import org.eclipse.search.internal.ui.SearchPlugin;
import org.eclipse.search.ui.SearchUI;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.dialogs.MessageDialog;
/**
- * Shows an error dialog for exceptions that contain an <code>IStatus</code>.
- * If the throwable passed to the methods is of a kind that the methods can handle,
- * the error dialog is shown and <code>true</code> is returned. Otherwise <code>false
- * </code>is returned, and the client has to handle the error itself. If the passed
- * throwable is of type <code>InvocationTargetException</code> the wrapped excpetion
- * is considered.
+ * The default exception handler shows an error dialog when one of its handle methods
+ * is called. If the passed exception is a <code>CoreException</code> an error dialog
+ * pops up showing the exception's status information. For a <code>InvocationTargetException</code>
+ * a normal message dialog pops up showing the exception's message. Additionally the exception
+ * is written to the platform log.
*/
public class ExceptionHandler {
private static ExceptionHandler fgInstance= new ExceptionHandler();
-
+
/**
- * Shows an error dialog for exceptions that contain an <code>IStatus</code>.
+ * Logs the given exception using the platform's logging mechanism. The exception is
+ * logged as an error with the error code <code>JavaStatusConstants.INTERNAL_ERROR</code>.
*/
- public static boolean handle(Throwable t, String title, String message) {
- return handle(t, SearchPlugin.getActiveWorkbenchShell(), title, message);
+ public static void log(Throwable t, String message) {
+ SearchPlugin.log(new Status(IStatus.ERROR, SearchUI.PLUGIN_ID, IStatus.ERROR, message, t));
}
+
/**
- * Shows an error dialog for exceptions that contain an <code>IStatus</code>.
+ * Handles the given <code>CoreException</code>. The workbench shell is used as a parent
+ * for the dialog window.
+ *
+ * @param e the <code>CoreException</code> to be handled
+ * @param title the dialog window's window title
+ * @param message message to be displayed by the dialog window
*/
- public static boolean handle(Throwable t, Shell shell, String title, String message) {
- if (fgInstance == null)
- return false;
- return fgInstance.perform(t, shell, title, message);
+ public static void handle(CoreException e, String title, String message) {
+ handle(e, SearchPlugin.getActiveWorkbenchShell(), title, message);
}
+
/**
- * Logs the given exception using the platforms logging mechanism.
+ * Handles the given <code>CoreException</code>.
+ *
+ * @param e the <code>CoreException</code> to be handled
+ * @param parent the dialog window's parent shell
+ * @param title the dialog window's window title
+ * @param message message to be displayed by the dialog window
*/
- public static void log(Throwable t, String message) {
- SearchPlugin.log(new Status(IStatus.ERROR, SearchUI.PLUGIN_ID,
- IStatus.ERROR, message, t));
+ public static void handle(CoreException e, Shell parent, String title, String message) {
+ fgInstance.perform(e, parent, title, message);
}
+
/**
- * Actually displays the error message. Subclasses may override the method to
- * perform their own error handling.
+ * Handles the given <code>InvocationTargetException</code>. The workbench shell is used
+ * as a parent for the dialog window.
+ *
+ * @param e the <code>InvocationTargetException</code> to be handled
+ * @param title the dialog window's window title
+ * @param message message to be displayed by the dialog window
*/
- protected boolean perform(Throwable t, Shell shell, String title, String message) {
- if (t instanceof InvocationTargetException)
- t= ((InvocationTargetException)t).getTargetException();
- if (handleCoreException(t, shell, title, message))
- return true;
- return handleCriticalExceptions(t, shell, title, message);
+ public static void handle(InvocationTargetException e, String title, String message) {
+ handle(e, SearchPlugin.getActiveWorkbenchShell(), title, message);
+ }
+
+ /**
+ * Handles the given <code>InvocationTargetException</code>.
+ *
+ * @param e the <code>InvocationTargetException</code> to be handled
+ * @param parent the dialog window's parent shell
+ * @param title the dialog window's window title
+ * @param message message to be displayed by the dialog window
+ */
+ public static void handle(InvocationTargetException e, Shell parent, String title, String message) {
+ fgInstance.perform(e, parent, title, message);
}
- protected boolean handleCoreException(Throwable t, Shell shell, String title, String message) {
- IStatus status= null;
- if (t instanceof CoreException) {
- status= ((CoreException)t).getStatus();
- if (status != null)
- ErrorDialog.openError(shell, title, message, status);
- else
- displayMessageDialog(t, shell, title, message);
- return true;
+ //---- Hooks for subclasses to control exception handling ------------------------------------
+
+ protected void perform(CoreException e, Shell shell, String title, String message) {
+ IStatus status= e.getStatus();
+ if (status != null) {
+ ErrorDialog.openError(shell, title, message, status);
+ } else {
+ displayMessageDialog(e, e.getMessage(), shell, title, message);
}
- return false;
}
- protected boolean handleCriticalExceptions(Throwable t, Shell shell, String title, String message) {
- if (t instanceof RuntimeException || t instanceof Error) {
- log(t, message);
- displayMessageDialog(t, shell, title, message);
- return true;
+ protected void perform(InvocationTargetException e, Shell shell, String title, String message) {
+ Throwable target= e.getTargetException();
+ if (target instanceof CoreException) {
+ perform((CoreException)target, shell, title, message);
+ } else {
+ if (e.getMessage() != null && e.getMessage().length() > 0) {
+ displayMessageDialog(e, e.getMessage(), shell, title, message);
+ } else {
+ displayMessageDialog(e, target.getMessage(), shell, title, message);
+ }
}
- return false;
}
- /**
- * Shows the error in a message dialog
- */
- protected void displayMessageDialog(Throwable t, Shell shell, String title, String message) {
+
+ //---- Helper methods -----------------------------------------------------------------------
+
+ public static void displayMessageDialog(Throwable t, Shell shell, String title, String message) {
+ fgInstance.displayMessageDialog(t, t.getMessage(), shell, title, message);
+ }
+
+ public static void displayMessageDialog(Throwable t, String title, String message) {
+ displayMessageDialog(t, SearchPlugin.getActiveWorkbenchShell(), title, message);
+ }
+
+ private void displayMessageDialog(Throwable t, String exceptionMessage, Shell shell, String title, String message) {
StringWriter msg= new StringWriter();
if (message != null) {
msg.write(message);
msg.write("\n\n"); //$NON-NLS-1$
}
- if (t.getMessage() == null || t.getMessage().length() == 0)
+ if (exceptionMessage == null || exceptionMessage.length() == 0)
msg.write(t.toString());
else
- msg.write(t.getMessage());
+ msg.write(exceptionMessage);
MessageDialog.openError(shell, title, msg.toString());
- }
- /**
- * Shows a dialog containing the stack trace of the exception
- */
- public static void showStackTraceDialog(Throwable t, Shell shell, String title) {
- StringWriter writer= new StringWriter();
- t.printStackTrace(new PrintWriter(writer));
- MessageDialog.openError(shell, title, writer.toString());
}
} \ No newline at end of file

Back to the top