///*******************************************************************************
// * Copyright (c) 2005, 2006 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.tests.api.workbenchpart;
//
//import org.eclipse.core.runtime.IProgressMonitor;
//import org.eclipse.swt.SWT;
//import org.eclipse.swt.widgets.Composite;
//import org.eclipse.swt.widgets.Label;
//import org.eclipse.ui.IEditorInput;
//import org.eclipse.ui.IEditorSite;
//import org.eclipse.ui.IFileEditorInput;
//import org.eclipse.ui.PartInitException;
//import org.eclipse.ui.part.EditorPart;
//
//public class EditorWithCreateControlsException extends EditorPart {
//
//    public void doSave(IProgressMonitor monitor) {
//
//    }
//
//    public void doSaveAs() {
//
//    }
//
//    public void init(IEditorSite site, IEditorInput input)
//            throws PartInitException {
//        if (!(input instanceof IFileEditorInput))
//            throw new PartInitException("Invalid Input: Must be IFileEditorInput");
//        setSite(site);
//        setInput(input);
//    }
//
//    public boolean isDirty() {
//        return false;
//    }
//
//    public boolean isSaveAsAllowed() {
//        return false;
//    }
//
//    public void createPartControl(Composite parent) {
//        Label testLabel = new Label(parent, SWT.NONE);
//        
//        testLabel.setText("If you can read this, widgets are not being disposed properly when errors occur in createPartControl");
//        
//        throw new RuntimeException("This exception was thrown intentionally as part of an error handling test");
//
//    }
//
//    public void setFocus() {
//
//    }
//
//}
