/******************************************************************************* * Copyright (c) 2005 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.services;/** * <p> * The interface that should be implemented by services that make themselves * available through the <code>IAdaptable</code> mechanism. This is the * interface that drives the majority of services provided at the workbench * level. * </p> * <p> * A service has life-cycle. When the constructor completes, the service must be * fully functional. When it comes time for the service to go away, then the * service will receive a {@link #dispose()} call. At this point, the service * must release all resources and detach all listeners. A service can only be * disposed once; it cannot be reused. * </p> * <p> * This interface has nothing to do with OSGi services. * </p> * <p> * This interface can be extended or implemented by clients. * </p> *  * @since 3.2 */public interface IDisposable {	/**	 * Disposes of this service. All resources must be freed. All listeners must	 * be detached. Dispose will only be called once during the life cycle of a	 * service.	 */	public void dispose();}