/******************************************************************************* * Copyright (c) 2005, 2009 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.core.runtime; /** * Runs the given ISafeRunnable in a protected mode: exceptions and certain * errors thrown in the runnable are logged and passed to the runnable's * exception handler. Such exceptions are not rethrown by this method. * <p> * This class can be used without OSGi running. * </p> * * @since org.eclipse.equinox.common 3.2 */ public final class SafeRunner { /** * Runs the given runnable in a protected mode. Exceptions thrown in the * runnable are logged and passed to the runnable's exception handler. Such * exceptions are not rethrown by this method. * <p> * In addition to catching all {@link Exception} types, this method also * catches certain {@link Error} types that typically result from * programming errors in the code being executed. Severe errors that are not * generally safe to catch are not caught by this method. * </p> * * @param code * the runnable to run */ public static void run(ISafeRunnable code) { Assert.isNotNull(code); try { code.run(); } catch (Exception e) { handleException(code, e); // } catch (LinkageError e) { // handleException(code, e); } catch (AssertionError e) { handleException(code, e); } } private static void handleException(ISafeRunnable code, Throwable e) { if (!(e instanceof OperationCanceledException)) { // try to obtain the correct plug-in id for the bundle providing the // safe runnable // Activator activator = Activator.getDefault(); // String pluginId = null; // if (activator != null) // pluginId = activator.getBundleId(code); // if (pluginId == null) // pluginId = IRuntimeConstants.PI_COMMON; // String message = NLS.bind(CommonMessages.meta_pluginProblems, // pluginId); // IStatus status; // if (e instanceof CoreException) { // status = new MultiStatus(pluginId, // IRuntimeConstants.PLUGIN_ERROR, message, e); // ((MultiStatus) status).merge(((CoreException) e).getStatus()); // } else { // status = new Status(IStatus.ERROR, pluginId, // IRuntimeConstants.PLUGIN_ERROR, message, e); // } // // Make sure user sees the exception: if the log is empty, log // the exceptions on stderr // if (!RuntimeLog.isEmpty()) // RuntimeLog.log(status); // else // e.printStackTrace(); } code.handleException(e); } }