All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.ui.internal.StartupThreading Maven / Gradle / Ivy

Go to download

This plug-in contains the bulk of the Workbench implementation, and depends on JFace, SWT, and Core Runtime. It cannot be used independently from org.eclipse.ui. Workbench client plug-ins should not depend directly on this plug-in.

The newest version!
/*******************************************************************************
 * Copyright (c) 2007 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.ui.internal;

import org.eclipse.ui.PartInitException;
import org.eclipse.ui.WorkbenchException;
import org.eclipse.ui.internal.misc.StatusUtil;

/**
 * @since 3.3
 * 
 */
public final class StartupThreading {

	static Workbench workbench;

	public static abstract class StartupRunnable implements Runnable {
		private Throwable throwable;

		public final void run() {
			try {
				runWithException();
			} catch (Throwable t) {
				this.throwable = t;
			}
		}

		public abstract void runWithException() throws Throwable;

		public Throwable getThrowable() {
			return throwable;
		}
	}

	static void setWorkbench(Workbench wb) {
		workbench = wb;
	}

	public static void runWithWorkbenchExceptions(StartupRunnable r)
			throws WorkbenchException {
		workbench.getDisplay().syncExec(r);
		Throwable throwable = r.getThrowable();
		if (throwable != null) {
			if (throwable instanceof Error) {
				throw (Error) throwable;
			} else if (throwable instanceof RuntimeException) {
				throw (RuntimeException) throwable;
			} else if (throwable instanceof WorkbenchException) {
				throw (WorkbenchException) throwable;
			} else {
				throw new WorkbenchException(StatusUtil.newStatus(
						WorkbenchPlugin.PI_WORKBENCH, throwable));
			}
		}
	}

	public static void runWithPartInitExceptions(StartupRunnable r)
			throws PartInitException {
		workbench.getDisplay().syncExec(r);
		Throwable throwable = r.getThrowable();
		if (throwable != null) {
			if (throwable instanceof Error) {
				throw (Error) throwable;
			} else if (throwable instanceof RuntimeException) {
				throw (RuntimeException) throwable;
			} else if (throwable instanceof WorkbenchException) {
				throw (PartInitException) throwable;
			} else {
				throw new PartInitException(StatusUtil.newStatus(
						WorkbenchPlugin.PI_WORKBENCH, throwable));
			}
		}
	}

	public static void runWithThrowable(StartupRunnable r) throws Throwable {
		workbench.getDisplay().syncExec(r);
		Throwable throwable = r.getThrowable();
		if (throwable != null) {
			throw throwable;
		}
	}

	public static void runWithoutExceptions(StartupRunnable r)
			throws RuntimeException {
		workbench.getDisplay().syncExec(r);
		Throwable throwable = r.getThrowable();
		if (throwable != null) {
			if (throwable instanceof Error) {
				throw (Error) throwable;
			} else if (throwable instanceof RuntimeException) {
				throw (RuntimeException) throwable;
			} else {
				throw new RuntimeException(throwable);
			}
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy