X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/wizards/NewTypeWizardPage.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/wizards/NewTypeWizardPage.java deleted file mode 100644 index a73147a..0000000 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/wizards/NewTypeWizardPage.java +++ /dev/null @@ -1,1954 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package net.sourceforge.phpdt.ui.wizards; - -import java.util.ArrayList; -import java.util.List; - -import net.sourceforge.phpdt.core.Flags; -import net.sourceforge.phpdt.core.IBuffer; -import net.sourceforge.phpdt.core.ICompilationUnit; -import net.sourceforge.phpdt.core.IJavaElement; -import net.sourceforge.phpdt.core.IPackageFragment; -import net.sourceforge.phpdt.core.ISourceRange; -import net.sourceforge.phpdt.core.IType; -import net.sourceforge.phpdt.core.ToolFactory; -import net.sourceforge.phpdt.core.compiler.IScanner; -import net.sourceforge.phpdt.core.compiler.ITerminalSymbols; -import net.sourceforge.phpdt.core.compiler.InvalidInputException; -import net.sourceforge.phpdt.externaltools.internal.ui.StatusInfo; -import net.sourceforge.phpdt.internal.corext.codemanipulation.StubUtility; -import net.sourceforge.phpdt.internal.corext.template.php.JavaContext; -import net.sourceforge.phpdt.internal.corext.template.php.Templates; -import net.sourceforge.phpdt.internal.corext.util.JavaModelUtil; -import net.sourceforge.phpdt.internal.ui.PHPUiImages; -import net.sourceforge.phpdt.internal.ui.util.SWTUtil; -import net.sourceforge.phpdt.internal.ui.wizards.NewWizardMessages; -import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.DialogField; -import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.IDialogFieldListener; -import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.IListAdapter; -import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.IStringButtonAdapter; -import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.LayoutUtil; -import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.ListDialogField; -import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.SelectionButtonDialogField; -import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.SelectionButtonDialogFieldGroup; -import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.Separator; -import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.StringButtonDialogField; -import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.StringButtonStatusDialogField; -import net.sourceforge.phpdt.internal.ui.wizards.dialogfields.StringDialogField; -import net.sourceforge.phpdt.ui.CodeGeneration; -import net.sourceforge.phpdt.ui.PreferenceConstants; -import net.sourceforge.phpeclipse.PHPeclipsePlugin; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.SubProgressMonitor; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.templates.Template; -import org.eclipse.jface.text.templates.TemplateException; -import org.eclipse.jface.viewers.LabelProvider; -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; - -/** - * The class NewTypeWizardPage contains controls and validation - * routines for a 'New Type WizardPage'. Implementors decide which components to - * add and to enable. Implementors can also customize the validation code. - * NewTypeWizardPage is intended to serve as base class of all - * wizards that create types like applets, servlets, classes, interfaces, etc. - *

- * See NewClassWizardPage or NewInterfaceWizardPage - * for an example usage of NewTypeWizardPage. - *

- * - * @see net.sourceforge.phpdt.ui.wizards.NewClassWizardPage - * @see net.sourceforge.phpdt.ui.wizards.NewInterfaceWizardPage - * - * @since 2.0 - */ -public abstract class NewTypeWizardPage extends NewContainerWizardPage { - - /** - * Class used in stub creation routines to add needed imports to a - * compilation unit. - */ - // public static class ImportsManager { - // - // private IImportsStructure fImportsStructure; - // - // /* package */ ImportsManager(IImportsStructure structure) { - // fImportsStructure= structure; - // } - // - // /* package */ IImportsStructure getImportsStructure() { - // return fImportsStructure; - // } - // - // /** - // * Adds a new import declaration that is sorted in the existing imports. - // * If an import already exists or the import would conflict with another - // import - // * of an other type with the same simple name the import is not added. - // * - // * @param qualifiedTypeName The fully qualified name of the type to import - // * (dot separated) - // * @return Returns the simple type name that can be used in the code or - // the - // * fully qualified type name if an import conflict prevented the import - // */ - // public String addImport(String qualifiedTypeName) { - // return fImportsStructure.addImport(qualifiedTypeName); - // } - // } - /** - * Public access flag. See The Java Virtual Machine Specification for more - * details. - */ - public int F_PUBLIC = Flags.AccPublic; - - /** - * Private access flag. See The Java Virtual Machine Specification for more - * details. - */ - public int F_PRIVATE = Flags.AccPrivate; - - /** - * Protected access flag. See The Java Virtual Machine Specification for - * more details. - */ - public int F_PROTECTED = Flags.AccProtected; - - /** - * Static access flag. See The Java Virtual Machine Specification for more - * details. - */ - public int F_STATIC = Flags.AccStatic; - - /** - * Final access flag. See The Java Virtual Machine Specification for more - * details. - */ - public int F_FINAL = Flags.AccFinal; - - /** - * Abstract property flag. See The Java Virtual Machine Specification for - * more details. - */ - // public int F_ABSTRACT = Flags.AccAbstract; - private final static String PAGE_NAME = "NewTypeWizardPage"; //$NON-NLS-1$ - - /** Field ID of the package input field */ - protected final static String PACKAGE = PAGE_NAME + ".package"; //$NON-NLS-1$ - - /** Field ID of the eclosing type input field */ - protected final static String ENCLOSING = PAGE_NAME + ".enclosing"; //$NON-NLS-1$ - - /** Field ID of the enclosing type checkbox */ - protected final static String ENCLOSINGSELECTION = ENCLOSING + ".selection"; //$NON-NLS-1$ - - /** Field ID of the type name input field */ - protected final static String TYPENAME = PAGE_NAME + ".typename"; //$NON-NLS-1$ - - /** Field ID of the super type input field */ - protected final static String SUPER = PAGE_NAME + ".superclass"; //$NON-NLS-1$ - - /** Field ID of the super interfaces input field */ - protected final static String INTERFACES = PAGE_NAME + ".interfaces"; //$NON-NLS-1$ - - /** Field ID of the modifier checkboxes */ - protected final static String MODIFIERS = PAGE_NAME + ".modifiers"; //$NON-NLS-1$ - - /** Field ID of the method stubs checkboxes */ - protected final static String METHODS = PAGE_NAME + ".methods"; //$NON-NLS-1$ - - private class InterfacesListLabelProvider extends LabelProvider { - - private Image fInterfaceImage; - - public InterfacesListLabelProvider() { - super(); - fInterfaceImage = PHPUiImages.get(PHPUiImages.IMG_OBJS_INTERFACE); - } - - public Image getImage(Object element) { - return fInterfaceImage; - } - } - - private StringButtonStatusDialogField fPackageDialogField; - - private SelectionButtonDialogField fEnclosingTypeSelection; - - private StringButtonDialogField fEnclosingTypeDialogField; - - private boolean fCanModifyPackage; - - private boolean fCanModifyEnclosingType; - - private IPackageFragment fCurrPackage; - - // private IType fCurrEnclosingType; - private StringDialogField fTypeNameDialogField; - - private StringButtonDialogField fSuperClassDialogField; - - private ListDialogField fSuperInterfacesDialogField; - - // private IType fSuperClass; - - private SelectionButtonDialogFieldGroup fAccMdfButtons; - - private SelectionButtonDialogFieldGroup fOtherMdfButtons; - - private IType fCreatedType; - - protected IStatus fEnclosingTypeStatus; - - protected IStatus fPackageStatus; - - protected IStatus fTypeNameStatus; - - // protected IStatus fSuperClassStatus; - protected IStatus fModifierStatus; - - // protected IStatus fSuperInterfacesStatus; - - private boolean fIsClass; - - private int fStaticMdfIndex; - - private final int PUBLIC_INDEX = 0, DEFAULT_INDEX = 1, PRIVATE_INDEX = 2, - PROTECTED_INDEX = 3; - - private final int ABSTRACT_INDEX = 0, FINAL_INDEX = 1; - - /** - * Creates a new NewTypeWizardPage - * - * @param isClass - * true if a new class is to be created; otherwise - * an interface is to be created - * @param pageName - * the wizard page's name - */ - public NewTypeWizardPage(boolean isClass, String pageName) { - super(pageName); - fCreatedType = null; - - fIsClass = isClass; - - TypeFieldsAdapter adapter = new TypeFieldsAdapter(); - - fPackageDialogField = new StringButtonStatusDialogField(adapter); - fPackageDialogField.setDialogFieldListener(adapter); - fPackageDialogField.setLabelText(NewWizardMessages - .getString("NewTypeWizardPage.package.label")); //$NON-NLS-1$ - fPackageDialogField.setButtonLabel(NewWizardMessages - .getString("NewTypeWizardPage.package.button")); //$NON-NLS-1$ - fPackageDialogField.setStatusWidthHint(NewWizardMessages - .getString("NewTypeWizardPage.default")); //$NON-NLS-1$ - - fEnclosingTypeSelection = new SelectionButtonDialogField(SWT.CHECK); - fEnclosingTypeSelection.setDialogFieldListener(adapter); - fEnclosingTypeSelection.setLabelText(NewWizardMessages - .getString("NewTypeWizardPage.enclosing.selection.label")); //$NON-NLS-1$ - - fEnclosingTypeDialogField = new StringButtonDialogField(adapter); - fEnclosingTypeDialogField.setDialogFieldListener(adapter); - fEnclosingTypeDialogField.setButtonLabel(NewWizardMessages - .getString("NewTypeWizardPage.enclosing.button")); //$NON-NLS-1$ - - fTypeNameDialogField = new StringDialogField(); - fTypeNameDialogField.setDialogFieldListener(adapter); - fTypeNameDialogField.setLabelText(NewWizardMessages - .getString("NewTypeWizardPage.typename.label")); //$NON-NLS-1$ - - fSuperClassDialogField = new StringButtonDialogField(adapter); - fSuperClassDialogField.setDialogFieldListener(adapter); - fSuperClassDialogField.setLabelText(NewWizardMessages - .getString("NewTypeWizardPage.superclass.label")); //$NON-NLS-1$ - fSuperClassDialogField.setButtonLabel(NewWizardMessages - .getString("NewTypeWizardPage.superclass.button")); //$NON-NLS-1$ - - String[] addButtons = new String[] { - /* 0 */ - NewWizardMessages.getString("NewTypeWizardPage.interfaces.add"), //$NON-NLS-1$ - /* 1 */ - null, - /* 2 */ - NewWizardMessages - .getString("NewTypeWizardPage.interfaces.remove") //$NON-NLS-1$ - }; - fSuperInterfacesDialogField = new ListDialogField(adapter, addButtons, - new InterfacesListLabelProvider()); - fSuperInterfacesDialogField.setDialogFieldListener(adapter); - String interfaceLabel = fIsClass ? NewWizardMessages - .getString("NewTypeWizardPage.interfaces.class.label") : NewWizardMessages.getString("NewTypeWizardPage.interfaces.ifc.label"); //$NON-NLS-1$ //$NON-NLS-2$ - fSuperInterfacesDialogField.setLabelText(interfaceLabel); - fSuperInterfacesDialogField.setRemoveButtonIndex(2); - - String[] buttonNames1 = new String[] { - /* 0 == PUBLIC_INDEX */ - NewWizardMessages - .getString("NewTypeWizardPage.modifiers.public"), //$NON-NLS-1$ - /* 1 == DEFAULT_INDEX */ - NewWizardMessages - .getString("NewTypeWizardPage.modifiers.default"), //$NON-NLS-1$ - /* 2 == PRIVATE_INDEX */ - NewWizardMessages - .getString("NewTypeWizardPage.modifiers.private"), //$NON-NLS-1$ - /* 3 == PROTECTED_INDEX */ - NewWizardMessages - .getString("NewTypeWizardPage.modifiers.protected") //$NON-NLS-1$ - }; - fAccMdfButtons = new SelectionButtonDialogFieldGroup(SWT.RADIO, - buttonNames1, 4); - fAccMdfButtons.setDialogFieldListener(adapter); - fAccMdfButtons.setLabelText(NewWizardMessages - .getString("NewTypeWizardPage.modifiers.acc.label")); //$NON-NLS-1$ - fAccMdfButtons.setSelection(0, true); - - String[] buttonNames2; - if (fIsClass) { - buttonNames2 = new String[] { - /* 0 == ABSTRACT_INDEX */ - NewWizardMessages - .getString("NewTypeWizardPage.modifiers.abstract"), //$NON-NLS-1$ - /* 1 == FINAL_INDEX */ - NewWizardMessages - .getString("NewTypeWizardPage.modifiers.final"), //$NON-NLS-1$ - /* 2 */ - NewWizardMessages - .getString("NewTypeWizardPage.modifiers.static") //$NON-NLS-1$ - }; - fStaticMdfIndex = 2; // index of the static checkbox is 2 - } else { - buttonNames2 = new String[] { NewWizardMessages - .getString("NewTypeWizardPage.modifiers.static") //$NON-NLS-1$ - }; - fStaticMdfIndex = 0; // index of the static checkbox is 0 - } - - fOtherMdfButtons = new SelectionButtonDialogFieldGroup(SWT.CHECK, - buttonNames2, 4); - fOtherMdfButtons.setDialogFieldListener(adapter); - - fAccMdfButtons.enableSelectionButton(PRIVATE_INDEX, false); - fAccMdfButtons.enableSelectionButton(PROTECTED_INDEX, false); - fOtherMdfButtons.enableSelectionButton(fStaticMdfIndex, false); - - fPackageStatus = new StatusInfo(); - fEnclosingTypeStatus = new StatusInfo(); - - fCanModifyPackage = true; - fCanModifyEnclosingType = true; - updateEnableState(); - - fTypeNameStatus = new StatusInfo(); - // fSuperClassStatus= new StatusInfo(); - // fSuperInterfacesStatus= new StatusInfo(); - fModifierStatus = new StatusInfo(); - } - - /** - * Initializes all fields provided by the page with a given selection. - * - * @param elem - * the selection used to intialize this page or - * null - * if no selection was available - */ - protected void initTypePage(IJavaElement elem) { - String initSuperclass = "java.lang.Object"; //$NON-NLS-1$ - ArrayList initSuperinterfaces = new ArrayList(5); - - IPackageFragment pack = null; - IType enclosingType = null; - - if (elem != null) { - // evaluate the enclosing type - pack = (IPackageFragment) elem - .getAncestor(IJavaElement.PACKAGE_FRAGMENT); - IType typeInCU = (IType) elem.getAncestor(IJavaElement.TYPE); - if (typeInCU != null) { - if (typeInCU.getCompilationUnit() != null) { - enclosingType = typeInCU; - } - } else { - ICompilationUnit cu = (ICompilationUnit) elem - .getAncestor(IJavaElement.COMPILATION_UNIT); - if (cu != null) { - // enclosingType= cu.findPrimaryType(); - } - } - - // try { - // IType type= null; - // if (elem.getElementType() == IJavaElement.TYPE) { - // type= (IType)elem; - // if (type.exists()) { - // String superName= JavaModelUtil.getFullyQualifiedName(type); - // if (type.isInterface()) { - // initSuperinterfaces.add(superName); - // } else { - // initSuperclass= superName; - // } - // } - // } - // } catch (JavaModelException e) { - // PHPeclipsePlugin.log(e); - // // ignore this exception now - // } - } - - setPackageFragment(pack, true); - // setEnclosingType(enclosingType, true); - setEnclosingTypeSelection(false, true); - - setTypeName("", true); //$NON-NLS-1$ - setSuperClass(initSuperclass, true); - setSuperInterfaces(initSuperinterfaces, true); - } - - // -------- UI Creation --------- - - /** - * Creates a separator line. Expects a GridLayout with at - * least 1 column. - * - * @param composite - * the parent composite - * @param nColumns - * number of columns to span - */ - protected void createSeparator(Composite composite, int nColumns) { - (new Separator(SWT.SEPARATOR | SWT.HORIZONTAL)).doFillIntoGrid( - composite, nColumns, convertHeightInCharsToPixels(1)); - } - - /** - * Creates the controls for the package name field. Expects a - * GridLayout with at least 4 columns. - * - * @param composite - * the parent composite - * @param nColumns - * number of columns to span - */ - protected void createPackageControls(Composite composite, int nColumns) { - fPackageDialogField.doFillIntoGrid(composite, nColumns); - LayoutUtil.setWidthHint(fPackageDialogField.getTextControl(null), - getMaxFieldWidth()); - LayoutUtil.setHorizontalGrabbing(fPackageDialogField - .getTextControl(null)); - } - - /** - * Creates the controls for the enclosing type name field. Expects a - * GridLayout with at least 4 columns. - * - * @param composite - * the parent composite - * @param nColumns - * number of columns to span - */ - protected void createEnclosingTypeControls(Composite composite, int nColumns) { - // #6891 - Composite tabGroup = new Composite(composite, SWT.NONE); - GridLayout layout = new GridLayout(); - layout.marginWidth = 0; - layout.marginHeight = 0; - tabGroup.setLayout(layout); - - fEnclosingTypeSelection.doFillIntoGrid(tabGroup, 1); - - Control c = fEnclosingTypeDialogField.getTextControl(composite); - GridData gd = new GridData(GridData.FILL_HORIZONTAL); - gd.widthHint = getMaxFieldWidth(); - gd.horizontalSpan = 2; - c.setLayoutData(gd); - - Button button = fEnclosingTypeDialogField.getChangeControl(composite); - gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL); - gd.heightHint = SWTUtil.getButtonHeightHint(button); - gd.widthHint = SWTUtil.getButtonWidthHint(button); - button.setLayoutData(gd); - } - - /** - * Creates the controls for the type name field. Expects a - * GridLayout with at least 2 columns. - * - * @param composite - * the parent composite - * @param nColumns - * number of columns to span - */ - protected void createTypeNameControls(Composite composite, int nColumns) { - fTypeNameDialogField.doFillIntoGrid(composite, nColumns - 1); - DialogField.createEmptySpace(composite); - - LayoutUtil.setWidthHint(fTypeNameDialogField.getTextControl(null), - getMaxFieldWidth()); - } - - /** - * Creates the controls for the modifiers radio/ceckbox buttons. Expects a - * GridLayout with at least 3 columns. - * - * @param composite - * the parent composite - * @param nColumns - * number of columns to span - */ - protected void createModifierControls(Composite composite, int nColumns) { - LayoutUtil.setHorizontalSpan(fAccMdfButtons.getLabelControl(composite), - 1); - - Control control = fAccMdfButtons.getSelectionButtonsGroup(composite); - GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL); - gd.horizontalSpan = nColumns - 2; - control.setLayoutData(gd); - - DialogField.createEmptySpace(composite); - - DialogField.createEmptySpace(composite); - - control = fOtherMdfButtons.getSelectionButtonsGroup(composite); - gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL); - gd.horizontalSpan = nColumns - 2; - control.setLayoutData(gd); - - DialogField.createEmptySpace(composite); - } - - /** - * Creates the controls for the superclass name field. Expects a - * GridLayout with at least 3 columns. - * - * @param composite - * the parent composite - * @param nColumns - * number of columns to span - */ - protected void createSuperClassControls(Composite composite, int nColumns) { - fSuperClassDialogField.doFillIntoGrid(composite, nColumns); - LayoutUtil.setWidthHint(fSuperClassDialogField.getTextControl(null), - getMaxFieldWidth()); - } - - /** - * Creates the controls for the superclass name field. Expects a - * GridLayout with at least 3 columns. - * - * @param composite - * the parent composite - * @param nColumns - * number of columns to span - */ - protected void createSuperInterfacesControls(Composite composite, - int nColumns) { - fSuperInterfacesDialogField.doFillIntoGrid(composite, nColumns); - GridData gd = (GridData) fSuperInterfacesDialogField.getListControl( - null).getLayoutData(); - if (fIsClass) { - gd.heightHint = convertHeightInCharsToPixels(3); - } else { - gd.heightHint = convertHeightInCharsToPixels(6); - } - gd.grabExcessVerticalSpace = false; - gd.widthHint = getMaxFieldWidth(); - } - - /** - * Sets the focus on the type name input field. - */ - protected void setFocus() { - fTypeNameDialogField.setFocus(); - } - - // -------- TypeFieldsAdapter -------- - - private class TypeFieldsAdapter implements IStringButtonAdapter, - IDialogFieldListener, IListAdapter { - - // -------- IStringButtonAdapter - public void changeControlPressed(DialogField field) { - // typePageChangeControlPressed(field); - } - - // -------- IListAdapter - public void customButtonPressed(ListDialogField field, int index) { - // typePageCustomButtonPressed(field, index); - } - - public void selectionChanged(ListDialogField field) { - } - - // -------- IDialogFieldListener - public void dialogFieldChanged(DialogField field) { - typePageDialogFieldChanged(field); - } - - public void doubleClicked(ListDialogField field) { - } - } - - // private void typePageChangeControlPressed(DialogField field) { - // if (field == fPackageDialogField) { - // IPackageFragment pack= choosePackage(); - // if (pack != null) { - // fPackageDialogField.setText(pack.getElementName()); - // } - // } else if (field == fEnclosingTypeDialogField) { - // IType type= chooseEnclosingType(); - // if (type != null) { - // fEnclosingTypeDialogField.setText(JavaModelUtil.getFullyQualifiedName(type)); - // } - // } else if (field == fSuperClassDialogField) { - // IType type= chooseSuperType(); - // if (type != null) { - // fSuperClassDialogField.setText(JavaModelUtil.getFullyQualifiedName(type)); - // } - // } - // } - - // private void typePageCustomButtonPressed(DialogField field, int index) { - // if (field == fSuperInterfacesDialogField) { - // chooseSuperInterfaces(); - // } - // } - - /* - * A field on the type has changed. The fields' status and all dependend - * status are updated. - */ - private void typePageDialogFieldChanged(DialogField field) { - String fieldName = null; - if (field == fPackageDialogField) { - fPackageStatus = packageChanged(); - updatePackageStatusLabel(); - fTypeNameStatus = typeNameChanged(); - // fSuperClassStatus= superClassChanged(); - fieldName = PACKAGE; - } else if (field == fEnclosingTypeDialogField) { - // fEnclosingTypeStatus= enclosingTypeChanged(); - fTypeNameStatus = typeNameChanged(); - // fSuperClassStatus= superClassChanged(); - fieldName = ENCLOSING; - } else if (field == fEnclosingTypeSelection) { - updateEnableState(); - boolean isEnclosedType = isEnclosingTypeSelected(); - if (!isEnclosedType) { - if (fAccMdfButtons.isSelected(PRIVATE_INDEX) - || fAccMdfButtons.isSelected(PROTECTED_INDEX)) { - fAccMdfButtons.setSelection(PRIVATE_INDEX, false); - fAccMdfButtons.setSelection(PROTECTED_INDEX, false); - fAccMdfButtons.setSelection(PUBLIC_INDEX, true); - } - if (fOtherMdfButtons.isSelected(fStaticMdfIndex)) { - fOtherMdfButtons.setSelection(fStaticMdfIndex, false); - } - } - fAccMdfButtons.enableSelectionButton(PRIVATE_INDEX, isEnclosedType - && fIsClass); - fAccMdfButtons.enableSelectionButton(PROTECTED_INDEX, - isEnclosedType && fIsClass); - fOtherMdfButtons.enableSelectionButton(fStaticMdfIndex, - isEnclosedType); - fTypeNameStatus = typeNameChanged(); - // fSuperClassStatus= superClassChanged(); - fieldName = ENCLOSINGSELECTION; - } else if (field == fTypeNameDialogField) { - fTypeNameStatus = typeNameChanged(); - fieldName = TYPENAME; - } else if (field == fSuperClassDialogField) { - // fSuperClassStatus= superClassChanged(); - fieldName = SUPER; - } else if (field == fSuperInterfacesDialogField) { - // fSuperInterfacesStatus= superInterfacesChanged(); - fieldName = INTERFACES; - } else if (field == fOtherMdfButtons) { - fModifierStatus = modifiersChanged(); - fieldName = MODIFIERS; - } else { - fieldName = METHODS; - } - // tell all others - handleFieldChanged(fieldName); - } - - // -------- update message ---------------- - - /* - * @see net.sourceforge.phpdt.ui.wizards.NewContainerWizardPage#handleFieldChanged(String) - */ - protected void handleFieldChanged(String fieldName) { - super.handleFieldChanged(fieldName); - if (fieldName == CONTAINER) { - fPackageStatus = packageChanged(); - // fEnclosingTypeStatus= enclosingTypeChanged(); - fTypeNameStatus = typeNameChanged(); - // fSuperClassStatus= superClassChanged(); - // fSuperInterfacesStatus= superInterfacesChanged(); - } - } - - // ---- set / get ---------------- - - /** - * Returns the text of the package input field. - * - * @return the text of the package input field - */ - public String getPackageText() { - return fPackageDialogField.getText(); - } - - /** - * Returns the text of the enclosing type input field. - * - * @return the text of the enclosing type input field - */ - public String getEnclosingTypeText() { - return fEnclosingTypeDialogField.getText(); - } - - /** - * Returns the package fragment corresponding to the current input. - * - * @return a package fragement or null if the input could not - * be resolved. - */ - public IPackageFragment getPackageFragment() { - if (!isEnclosingTypeSelected()) { - return fCurrPackage; - } else { - // if (fCurrEnclosingType != null) { - // return fCurrEnclosingType.getPackageFragment(); - // } - } - return null; - } - - /** - * Sets the package fragment to the given value. The method updates the - * model and the text of the control. - * - * @param pack - * the package fragement to be set - * @param canBeModified - * if true the package fragment is editable; - * otherwise it is read-only. - */ - public void setPackageFragment(IPackageFragment pack, boolean canBeModified) { - fCurrPackage = pack; - fCanModifyPackage = canBeModified; - String str = (pack == null) ? "" : pack.getElementName(); //$NON-NLS-1$ - fPackageDialogField.setText(str); - updateEnableState(); - } - - /** - * Returns the enclosing type corresponding to the current input. - * - * @return the enclosing type or null if the enclosing type - * is not selected or the input could not be resolved - */ - public IType getEnclosingType() { - // if (isEnclosingTypeSelected()) { - // return fCurrEnclosingType; - // } - return null; - } - - /** - * Sets the enclosing type. The method updates the underlying model and the - * text of the control. - * - * @param type - * the enclosing type - * @param canBeModified - * if true the enclosing type field is editable; - * otherwise it is read-only. - */ - // public void setEnclosingType(IType type, boolean canBeModified) { - // fCurrEnclosingType= type; - // fCanModifyEnclosingType= canBeModified; - // String str= (type == null) ? "" : - // JavaModelUtil.getFullyQualifiedName(type); //$NON-NLS-1$ - // fEnclosingTypeDialogField.setText(str); - // updateEnableState(); - // } - /** - * Returns the selection state of the enclosing type checkbox. - * - * @return the seleciton state of the enclosing type checkbox - */ - public boolean isEnclosingTypeSelected() { - return fEnclosingTypeSelection.isSelected(); - } - - /** - * Sets the enclosing type checkbox's selection state. - * - * @param isSelected - * the checkbox's selection state - * @param canBeModified - * if true the enclosing type checkbox is - * modifiable; otherwise it is read-only. - */ - public void setEnclosingTypeSelection(boolean isSelected, - boolean canBeModified) { - fEnclosingTypeSelection.setSelection(isSelected); - fEnclosingTypeSelection.setEnabled(canBeModified); - updateEnableState(); - } - - /** - * Returns the type name entered into the type input field. - * - * @return the type name - */ - public String getTypeName() { - return fTypeNameDialogField.getText(); - } - - /** - * Sets the type name input field's text to the given value. Method doesn't - * update the model. - * - * @param name - * the new type name - * @param canBeModified - * if true the enclosing type name field is - * editable; otherwise it is read-only. - */ - public void setTypeName(String name, boolean canBeModified) { - fTypeNameDialogField.setText(name); - fTypeNameDialogField.setEnabled(canBeModified); - } - - /** - * Returns the selected modifiers. - * - * @return the selected modifiers - * @see Flags - */ - public int getModifiers() { - int mdf = 0; - if (fAccMdfButtons.isSelected(PUBLIC_INDEX)) { - mdf += F_PUBLIC; - } else if (fAccMdfButtons.isSelected(PRIVATE_INDEX)) { - mdf += F_PRIVATE; - } else if (fAccMdfButtons.isSelected(PROTECTED_INDEX)) { - mdf += F_PROTECTED; - } - // if (fOtherMdfButtons.isSelected(ABSTRACT_INDEX) && (fStaticMdfIndex - // != 0)) { - // mdf+= F_ABSTRACT; - // } - if (fOtherMdfButtons.isSelected(FINAL_INDEX)) { - mdf += F_FINAL; - } - if (fOtherMdfButtons.isSelected(fStaticMdfIndex)) { - mdf += F_STATIC; - } - return mdf; - } - - /** - * Sets the modifiers. - * - * @param modifiers - * F_PUBLIC, F_PRIVATE, - * F_PROTECTED, F_ABSTRACT, F_FINAL - * or F_STATIC or, a valid combination. - * @param canBeModified - * if true the modifier fields are editable; - * otherwise they are read-only - * @see Flags - */ - public void setModifiers(int modifiers, boolean canBeModified) { - if (Flags.isPublic(modifiers)) { - fAccMdfButtons.setSelection(PUBLIC_INDEX, true); - } else if (Flags.isPrivate(modifiers)) { - fAccMdfButtons.setSelection(PRIVATE_INDEX, true); - } else if (Flags.isProtected(modifiers)) { - fAccMdfButtons.setSelection(PROTECTED_INDEX, true); - } else { - fAccMdfButtons.setSelection(DEFAULT_INDEX, true); - } - // if (Flags.isAbstract(modifiers)) { - // fOtherMdfButtons.setSelection(ABSTRACT_INDEX, true); - // } - if (Flags.isFinal(modifiers)) { - fOtherMdfButtons.setSelection(FINAL_INDEX, true); - } - if (Flags.isStatic(modifiers)) { - fOtherMdfButtons.setSelection(fStaticMdfIndex, true); - } - - fAccMdfButtons.setEnabled(canBeModified); - fOtherMdfButtons.setEnabled(canBeModified); - } - - /** - * Returns the content of the superclass input field. - * - * @return the superclass name - */ - public String getSuperClass() { - return fSuperClassDialogField.getText(); - } - - /** - * Sets the super class name. - * - * @param name - * the new superclass name - * @param canBeModified - * if true the superclass name field is editable; - * otherwise it is read-only. - */ - public void setSuperClass(String name, boolean canBeModified) { - fSuperClassDialogField.setText(name); - fSuperClassDialogField.setEnabled(canBeModified); - } - - /** - * Returns the chosen super interfaces. - * - * @return a list of chosen super interfaces. The list's elements are of - * type String - */ - public List getSuperInterfaces() { - return fSuperInterfacesDialogField.getElements(); - } - - /** - * Sets the super interfaces. - * - * @param interfacesNames - * a list of super interface. The method requires that the list's - * elements are of type String - * @param canBeModified - * if true the super interface field is editable; - * otherwise it is read-only. - */ - public void setSuperInterfaces(List interfacesNames, boolean canBeModified) { - fSuperInterfacesDialogField.setElements(interfacesNames); - fSuperInterfacesDialogField.setEnabled(canBeModified); - } - - // ----------- validation ---------- - - /** - * A hook method that gets called when the package field has changed. The - * method validates the package name and returns the status of the - * validation. The validation also updates the package fragment model. - *

- * Subclasses may extend this method to perform their own validation. - *

- * - * @return the status of the validation - */ - protected IStatus packageChanged() { - StatusInfo status = new StatusInfo(); - fPackageDialogField.enableButton(getPackageFragmentRoot() != null); - - // String packName= getPackageText(); - // if (packName.length() > 0) { - // IStatus val= JavaConventions.validatePackageName(packName); - // if (val.getSeverity() == IStatus.ERROR) { - // status.setError(NewWizardMessages.getFormattedString("NewTypeWizardPage.error.InvalidPackageName", - // val.getMessage())); //$NON-NLS-1$ - // return status; - // } else if (val.getSeverity() == IStatus.WARNING) { - // status.setWarning(NewWizardMessages.getFormattedString("NewTypeWizardPage.warning.DiscouragedPackageName", - // val.getMessage())); //$NON-NLS-1$ - // // continue - // } - // } - - // IPackageFragmentRoot root= getPackageFragmentRoot(); - // if (root != null) { - // if (root.getJavaProject().exists() && packName.length() > 0) { - // try { - // IPath rootPath= root.getPath(); - // IPath outputPath= root.getJavaProject().getOutputLocation(); - // if (rootPath.isPrefixOf(outputPath) && !rootPath.equals(outputPath)) - // { - // // if the bin folder is inside of our root, dont allow to name a - // package - // // like the bin folder - // IPath packagePath= rootPath.append(packName.replace('.', '/')); - // if (outputPath.isPrefixOf(packagePath)) { - // status.setError(NewWizardMessages.getString("NewTypeWizardPage.error.ClashOutputLocation")); - // //$NON-NLS-1$ - // return status; - // } - // } - // } catch (JavaModelException e) { - // PHPeclipsePlugin.log(e); - // // let pass - // } - // } - // - // fCurrPackage= root.getPackageFragment(packName); - // } else { - // status.setError(""); //$NON-NLS-1$ - // } - return status; - } - - /* - * Updates the 'default' label next to the package field. - */ - private void updatePackageStatusLabel() { - String packName = getPackageText(); - - if (packName.length() == 0) { - fPackageDialogField.setStatus(NewWizardMessages - .getString("NewTypeWizardPage.default")); //$NON-NLS-1$ - } else { - fPackageDialogField.setStatus(""); //$NON-NLS-1$ - } - } - - /* - * Updates the enable state of buttons related to the enclosing type - * selection checkbox. - */ - private void updateEnableState() { - boolean enclosing = isEnclosingTypeSelected(); - fPackageDialogField.setEnabled(fCanModifyPackage && !enclosing); - fEnclosingTypeDialogField.setEnabled(fCanModifyEnclosingType - && enclosing); - } - - /** - * Hook method that gets called when the enclosing type name has changed. - * The method validates the enclosing type and returns the status of the - * validation. It also updates the enclosing type model. - *

- * Subclasses may extend this method to perform their own validation. - *

- * - * @return the status of the validation - */ - // protected IStatus enclosingTypeChanged() { - // StatusInfo status= new StatusInfo(); - // fCurrEnclosingType= null; - // - // IPackageFragmentRoot root= getPackageFragmentRoot(); - // - // fEnclosingTypeDialogField.enableButton(root != null); - // if (root == null) { - // status.setError(""); //$NON-NLS-1$ - // return status; - // } - // - // String enclName= getEnclosingTypeText(); - // if (enclName.length() == 0) { - // status.setError(NewWizardMessages.getString("NewTypeWizardPage.error.EnclosingTypeEnterName")); - // //$NON-NLS-1$ - // return status; - // } - // try { - // IType type= findType(root.getJavaProject(), enclName); - // if (type == null) { - // status.setError(NewWizardMessages.getString("NewTypeWizardPage.error.EnclosingTypeNotExists")); - // //$NON-NLS-1$ - // return status; - // } - // - // if (type.getCompilationUnit() == null) { - // status.setError(NewWizardMessages.getString("NewTypeWizardPage.error.EnclosingNotInCU")); - // //$NON-NLS-1$ - // return status; - // } - // if (!JavaModelUtil.isEditable(type.getCompilationUnit())) { - // status.setError(NewWizardMessages.getString("NewTypeWizardPage.error.EnclosingNotEditable")); - // //$NON-NLS-1$ - // return status; - // } - // - // fCurrEnclosingType= type; - // IPackageFragmentRoot enclosingRoot= - // JavaModelUtil.getPackageFragmentRoot(type); - // if (!enclosingRoot.equals(root)) { - // status.setWarning(NewWizardMessages.getString("NewTypeWizardPage.warning.EnclosingNotInSourceFolder")); - // //$NON-NLS-1$ - // } - // return status; - // } catch (JavaModelException e) { - // status.setError(NewWizardMessages.getString("NewTypeWizardPage.error.EnclosingTypeNotExists")); - // //$NON-NLS-1$ - // PHPeclipsePlugin.log(e); - // return status; - // } - // } - /** - * Hook method that gets called when the type name has changed. The method - * validates the type name and returns the status of the validation. - *

- * Subclasses may extend this method to perform their own validation. - *

- * - * @return the status of the validation - */ - protected IStatus typeNameChanged() { - StatusInfo status = new StatusInfo(); - String typeName = getTypeName(); - // must not be empty - if (typeName.length() == 0) { - status.setError(NewWizardMessages - .getString("NewTypeWizardPage.error.EnterTypeName")); //$NON-NLS-1$ - return status; - } - if (typeName.indexOf('.') != -1) { - status.setError(NewWizardMessages - .getString("NewTypeWizardPage.error.QualifiedName")); //$NON-NLS-1$ - return status; - } - // IStatus val= JavaConventions.validateJavaTypeName(typeName); - // if (val.getSeverity() == IStatus.ERROR) { - // status.setError(NewWizardMessages.getFormattedString("NewTypeWizardPage.error.InvalidTypeName", - // val.getMessage())); //$NON-NLS-1$ - // return status; - // } else if (val.getSeverity() == IStatus.WARNING) { - // status.setWarning(NewWizardMessages.getFormattedString("NewTypeWizardPage.warning.TypeNameDiscouraged", - // val.getMessage())); //$NON-NLS-1$ - // // continue checking - // } - - // must not exist - if (!isEnclosingTypeSelected()) { - IPackageFragment pack = getPackageFragment(); - if (pack != null) { - ICompilationUnit cu = pack.getCompilationUnit(typeName - + ".java"); //$NON-NLS-1$ - if (cu.getResource().exists()) { - status - .setError(NewWizardMessages - .getString("NewTypeWizardPage.error.TypeNameExists")); //$NON-NLS-1$ - return status; - } - } - } else { - IType type = getEnclosingType(); - if (type != null) { - IType member = type.getType(typeName); - if (member.exists()) { - status - .setError(NewWizardMessages - .getString("NewTypeWizardPage.error.TypeNameExists")); //$NON-NLS-1$ - return status; - } - } - } - return status; - } - - /** - * Hook method that gets called when the superclass name has changed. The - * method validates the superclass name and returns the status of the - * validation. - *

- * Subclasses may extend this method to perform their own validation. - *

- * - * @return the status of the validation - */ - // protected IStatus superClassChanged() { - // StatusInfo status= new StatusInfo(); - // IPackageFragmentRoot root= getPackageFragmentRoot(); - // fSuperClassDialogField.enableButton(root != null); - // - // fSuperClass= null; - // - // String sclassName= getSuperClass(); - // if (sclassName.length() == 0) { - // // accept the empty field (stands for java.lang.Object) - // return status; - // } - // IStatus val= JavaConventions.validateJavaTypeName(sclassName); - // if (val.getSeverity() == IStatus.ERROR) { - // status.setError(NewWizardMessages.getString("NewTypeWizardPage.error.InvalidSuperClassName")); - // //$NON-NLS-1$ - // return status; - // } - // if (root != null) { - // try { - // IType type= resolveSuperTypeName(root.getJavaProject(), sclassName); - // if (type == null) { - // status.setWarning(NewWizardMessages.getString("NewTypeWizardPage.warning.SuperClassNotExists")); - // //$NON-NLS-1$ - // return status; - // } else { - // if (type.isInterface()) { - // status.setWarning(NewWizardMessages.getFormattedString("NewTypeWizardPage.warning.SuperClassIsNotClass", - // sclassName)); //$NON-NLS-1$ - // return status; - // } - // int flags= type.getFlags(); - // if (Flags.isFinal(flags)) { - // status.setWarning(NewWizardMessages.getFormattedString("NewTypeWizardPage.warning.SuperClassIsFinal", - // sclassName)); //$NON-NLS-1$ - // return status; - // } else if (!JavaModelUtil.isVisible(type, getPackageFragment())) { - // status.setWarning(NewWizardMessages.getFormattedString("NewTypeWizardPage.warning.SuperClassIsNotVisible", - // sclassName)); //$NON-NLS-1$ - // return status; - // } - // } - // fSuperClass= type; - // } catch (JavaModelException e) { - // status.setError(NewWizardMessages.getString("NewTypeWizardPage.error.InvalidSuperClassName")); - // //$NON-NLS-1$ - // PHPeclipsePlugin.log(e); - // } - // } else { - // status.setError(""); //$NON-NLS-1$ - // } - // return status; - // - // } - // private IType resolveSuperTypeName(IJavaProject jproject, String - // sclassName) throws JavaModelException { - // if (!jproject.exists()) { - // return null; - // } - // IType type= null; - // if (isEnclosingTypeSelected()) { - // // search in the context of the enclosing type - // IType enclosingType= getEnclosingType(); - // if (enclosingType != null) { - // String[][] res= enclosingType.resolveType(sclassName); - // if (res != null && res.length > 0) { - // type= jproject.findType(res[0][0], res[0][1]); - // } - // } - // } else { - // IPackageFragment currPack= getPackageFragment(); - // if (type == null && currPack != null) { - // String packName= currPack.getElementName(); - // // search in own package - // if (!currPack.isDefaultPackage()) { - // type= jproject.findType(packName, sclassName); - // } - // // search in java.lang - // if (type == null && !"java.lang".equals(packName)) { //$NON-NLS-1$ - // type= jproject.findType("java.lang", sclassName); //$NON-NLS-1$ - // } - // } - // // search fully qualified - // if (type == null) { - // type= jproject.findType(sclassName); - // } - // } - // return type; - // } - // private IType findType(IJavaProject project, String typeName) throws - // JavaModelException { - // if (project.exists()) { - // return project.findType(typeName); - // } - // return null; - // } - /** - * Hook method that gets called when the list of super interface has - * changed. The method validates the superinterfaces and returns the status - * of the validation. - *

- * Subclasses may extend this method to perform their own validation. - *

- * - * @return the status of the validation - */ - // protected IStatus superInterfacesChanged() { - // StatusInfo status= new StatusInfo(); - // - // IPackageFragmentRoot root= getPackageFragmentRoot(); - // fSuperInterfacesDialogField.enableButton(0, root != null); - // - // if (root != null) { - // List elements= fSuperInterfacesDialogField.getElements(); - // int nElements= elements.size(); - // for (int i= 0; i < nElements; i++) { - // String intfname= (String)elements.get(i); - // try { - // IType type= findType(root.getJavaProject(), intfname); - // if (type == null) { - // status.setWarning(NewWizardMessages.getFormattedString("NewTypeWizardPage.warning.InterfaceNotExists", - // intfname)); //$NON-NLS-1$ - // return status; - // } else { - // if (type.isClass()) { - // status.setWarning(NewWizardMessages.getFormattedString("NewTypeWizardPage.warning.InterfaceIsNotInterface", - // intfname)); //$NON-NLS-1$ - // return status; - // } - // if (!JavaModelUtil.isVisible(type, getPackageFragment())) { - // status.setWarning(NewWizardMessages.getFormattedString("NewTypeWizardPage.warning.InterfaceIsNotVisible", - // intfname)); //$NON-NLS-1$ - // return status; - // } - // } - // } catch (JavaModelException e) { - // PHPeclipsePlugin.log(e); - // // let pass, checking is an extra - // } - // } - // } - // return status; - // } - /** - * Hook method that gets called when the modifiers have changed. The method - * validates the modifiers and returns the status of the validation. - *

- * Subclasses may extend this method to perform their own validation. - *

- * - * @return the status of the validation - */ - protected IStatus modifiersChanged() { - StatusInfo status = new StatusInfo(); - int modifiers = getModifiers(); - // if (Flags.isFinal(modifiers) && Flags.isAbstract(modifiers)) { - // status.setError(NewWizardMessages.getString("NewTypeWizardPage.error.ModifiersFinalAndAbstract")); - // //$NON-NLS-1$ - // } - return status; - } - - // selection dialogs - - // private IPackageFragment choosePackage() { - // IPackageFragmentRoot froot= getPackageFragmentRoot(); - // IJavaElement[] packages= null; - // try { - // if (froot != null && froot.exists()) { - // packages= froot.getChildren(); - // } - // } catch (JavaModelException e) { - // PHPeclipsePlugin.log(e); - // } - // if (packages == null) { - // packages= new IJavaElement[0]; - // } - // - // ElementListSelectionDialog dialog= new - // ElementListSelectionDialog(getShell(), new - // JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT)); - // dialog.setIgnoreCase(false); - // dialog.setTitle(NewWizardMessages.getString("NewTypeWizardPage.ChoosePackageDialog.title")); - // //$NON-NLS-1$ - // dialog.setMessage(NewWizardMessages.getString("NewTypeWizardPage.ChoosePackageDialog.description")); - // //$NON-NLS-1$ - // dialog.setEmptyListMessage(NewWizardMessages.getString("NewTypeWizardPage.ChoosePackageDialog.empty")); - // //$NON-NLS-1$ - // dialog.setElements(packages); - // IPackageFragment pack= getPackageFragment(); - // if (pack != null) { - // dialog.setInitialSelections(new Object[] { pack }); - // } - // - // if (dialog.open() == ElementListSelectionDialog.OK) { - // return (IPackageFragment) dialog.getFirstResult(); - // } - // return null; - // } - - // private IType chooseEnclosingType() { - // IPackageFragmentRoot root= getPackageFragmentRoot(); - // if (root == null) { - // return null; - // } - // - // IJavaSearchScope scope= SearchEngine.createJavaSearchScope(new - // IJavaElement[] { root }); - // - // TypeSelectionDialog dialog= new TypeSelectionDialog(getShell(), - // getWizard().getContainer(), IJavaSearchConstants.TYPE, scope); - // dialog.setTitle(NewWizardMessages.getString("NewTypeWizardPage.ChooseEnclosingTypeDialog.title")); - // //$NON-NLS-1$ - // dialog.setMessage(NewWizardMessages.getString("NewTypeWizardPage.ChooseEnclosingTypeDialog.description")); - // //$NON-NLS-1$ - // dialog.setFilter(Signature.getSimpleName(getEnclosingTypeText())); - // - // if (dialog.open() == TypeSelectionDialog.OK) { - // return (IType) dialog.getFirstResult(); - // } - // return null; - // } - - // private IType chooseSuperType() { - // IPackageFragmentRoot root= getPackageFragmentRoot(); - // if (root == null) { - // return null; - // } - // - // IJavaElement[] elements= new IJavaElement[] { root.getJavaProject() }; - // IJavaSearchScope scope= SearchEngine.createJavaSearchScope(elements); - // - // TypeSelectionDialog dialog= new TypeSelectionDialog(getShell(), - // getWizard().getContainer(), IJavaSearchConstants.CLASS, scope); - // dialog.setTitle(NewWizardMessages.getString("NewTypeWizardPage.SuperClassDialog.title")); - // //$NON-NLS-1$ - // dialog.setMessage(NewWizardMessages.getString("NewTypeWizardPage.SuperClassDialog.message")); - // //$NON-NLS-1$ - // dialog.setFilter(getSuperClass()); - // - // if (dialog.open() == TypeSelectionDialog.OK) { - // return (IType) dialog.getFirstResult(); - // } - // return null; - // } - - // private void chooseSuperInterfaces() { - // IPackageFragmentRoot root= getPackageFragmentRoot(); - // if (root == null) { - // return; - // } - // - // IJavaProject project= root.getJavaProject(); - // SuperInterfaceSelectionDialog dialog= new - // SuperInterfaceSelectionDialog(getShell(), getWizard().getContainer(), - // fSuperInterfacesDialogField, project); - // dialog.setTitle(fIsClass ? - // NewWizardMessages.getString("NewTypeWizardPage.InterfacesDialog.class.title") - // : - // NewWizardMessages.getString("NewTypeWizardPage.InterfacesDialog.interface.title")); - // //$NON-NLS-1$ //$NON-NLS-2$ - // dialog.setMessage(NewWizardMessages.getString("NewTypeWizardPage.InterfacesDialog.message")); - // //$NON-NLS-1$ - // dialog.open(); - // return; - // } - - // ---- creation ---------------- - - /** - * Creates the new type using the entered field values. - * - * @param monitor - * a progress monitor to report progress. - */ - public void createType(IProgressMonitor monitor) throws CoreException, - InterruptedException { - if (monitor == null) { - monitor = new NullProgressMonitor(); - } - - monitor.beginTask(NewWizardMessages - .getString("NewTypeWizardPage.operationdesc"), 10); //$NON-NLS-1$ - ICompilationUnit createdWorkingCopy = null; - try { - // IPackageFragmentRoot root = getPackageFragmentRoot(); - // IPackageFragment pack = getPackageFragment(); - // if (pack == null) { - // pack = root.getPackageFragment(""); //$NON-NLS-1$ - // } - // - // if (!pack.exists()) { - // String packName = pack.getElementName(); - // pack = root.createPackageFragment(packName, true, null); - // } - - monitor.worked(1); - - String clName = getTypeName(); - - boolean isInnerClass = isEnclosingTypeSelected(); - - IType createdType; - // ImportsStructure imports; - int indent = 0; - - IPreferenceStore store = PreferenceConstants.getPreferenceStore(); - // String[] prefOrder = - // JavaPreferencesSettings.getImportOrderPreference(store); - // int threshold = - // JavaPreferencesSettings.getImportNumberThreshold(store); - // - String lineDelimiter = null; - // if (!isInnerClass) { - lineDelimiter = System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$ - // - // ICompilationUnit parentCU = pack.createCompilationUnit(clName + - // ".php", "", false, new SubProgressMonitor(monitor, 2)); - // //$NON-NLS-1$ //$NON-NLS-2$ - // createdWorkingCopy = (ICompilationUnit) - // parentCU.getSharedWorkingCopy(null, JavaUI.getBufferFactory(), - // null); - // - // imports = new ImportsStructure(createdWorkingCopy, prefOrder, - // threshold, false); - // // add an import that will be removed again. Having this import - // solves 14661 - // imports.addImport(pack.getElementName(), getTypeName()); - // - String typeContent = constructTypeStub(lineDelimiter);// new - // ImportsManager(imports), - // lineDelimiter); - - // String cuContent = constructCUContent(parentCU, typeContent, - // lineDelimiter); - - // createdWorkingCopy.getBuffer().setContents(cuContent); - // - createdType = createdWorkingCopy.getType(clName); - // } else { - // IType enclosingType = getEnclosingType(); - // - // // if we are working on a enclosed type that is open in an - // editor, - // // then replace the enclosing type with its working copy - // IType workingCopy = (IType) - // EditorUtility.getWorkingCopy(enclosingType); - // if (workingCopy != null) { - // enclosingType = workingCopy; - // } - // - // ICompilationUnit parentCU = enclosingType.getCompilationUnit(); - // imports = new ImportsStructure(parentCU, prefOrder, threshold, - // true); - // - // // add imports that will be removed again. Having the imports - // solves 14661 - // IType[] topLevelTypes = parentCU.getTypes(); - // for (int i = 0; i < topLevelTypes.length; i++) { - // imports.addImport(topLevelTypes[i].getFullyQualifiedName('.')); - // } - // - // lineDelimiter = StubUtility.getLineDelimiterUsed(enclosingType); - // StringBuffer content = new StringBuffer(); - // String comment = getTypeComment(parentCU); - // if (comment != null) { - // content.append(comment); - // content.append(lineDelimiter); - // } - // content.append(constructTypeStub(new ImportsManager(imports), - // lineDelimiter)); - // IJavaElement[] elems = enclosingType.getChildren(); - // IJavaElement sibling = elems.length > 0 ? elems[0] : null; - // - // createdType = enclosingType.createType(content.toString(), - // sibling, false, new SubProgressMonitor(monitor, 1)); - // - // indent = StubUtility.getIndentUsed(enclosingType) + 1; - // } - // - // // add imports for superclass/interfaces, so types can be - // resolved correctly - // imports.create(false, new SubProgressMonitor(monitor, 1)); - // - ICompilationUnit cu = createdType.getCompilationUnit(); - synchronized (cu) { - cu.reconcile(); - } - // createTypeMembers(createdType, new ImportsManager(imports), new - // SubProgressMonitor(monitor, 1)); - // - // // add imports - // imports.create(false, new SubProgressMonitor(monitor, 1)); - - synchronized (cu) { - cu.reconcile(); - } - ISourceRange range = createdType.getSourceRange(); - - IBuffer buf = cu.getBuffer(); - String originalContent = buf.getText(range.getOffset(), range - .getLength()); - String formattedContent = StubUtility.codeFormat(originalContent, - indent, lineDelimiter); - buf.replace(range.getOffset(), range.getLength(), formattedContent); - if (!isInnerClass) { - String fileComment = getFileComment(cu); - if (fileComment != null && fileComment.length() > 0) { - buf.replace(0, 0, fileComment + lineDelimiter); - } - cu.commit(false, new SubProgressMonitor(monitor, 1)); - } else { - monitor.worked(1); - } - fCreatedType = createdType; - } finally { - if (createdWorkingCopy != null) { - createdWorkingCopy.destroy(); - } - monitor.done(); - } - } - - /** - * Uses the New Java file template from the code template page to generate a - * compilation unit with the given type content. - * - * @param cu - * The new created compilation unit - * @param typeContent - * The content of the type, including signature and type body. - * @param lineDelimiter - * The line delimiter to be used. - * @return String Returns the result of evaluating the new file template - * with the given type content. - * @throws CoreException - * @since 2.1 - */ - // protected String constructCUContent(ICompilationUnit cu, String - // typeContent, String lineDelimiter) throws CoreException { - // StringBuffer typeQualifiedName= new StringBuffer(); - // if (isEnclosingTypeSelected()) { - // typeQualifiedName.append(JavaModelUtil.getTypeQualifiedName(getEnclosingType())).append('.'); - // } - // typeQualifiedName.append(getTypeName()); - // String typeComment= CodeGeneration.getTypeComment(cu, - // typeQualifiedName.toString(), lineDelimiter); - // IPackageFragment pack= (IPackageFragment) cu.getParent(); - // String content= CodeGeneration.getCompilationUnitContent(cu, typeComment, - // typeContent, lineDelimiter); - // if (content != null) { - // CompilationUnit unit= AST.parseCompilationUnit(content.toCharArray()); - // if ((pack.isDefaultPackage() || unit.getPackage() != null) && - // !unit.types().isEmpty()) { - // return content; - // } - // } - // StringBuffer buf= new StringBuffer(); - // if (!pack.isDefaultPackage()) { - // buf.append("package ").append(pack.getElementName()).append(';'); - // //$NON-NLS-1$ - // } - // buf.append(lineDelimiter).append(lineDelimiter); - // if (typeComment != null) { - // buf.append(typeComment).append(lineDelimiter); - // } - // buf.append(typeContent); - // return buf.toString(); - // } - /** - * Returns the created type. The method only returns a valid type after - * createType has been called. - * - * @return the created type - * @see #createType(IProgressMonitor) - */ - public IType getCreatedType() { - return fCreatedType; - } - - // ---- construct cu body---------------- - - // private void writeSuperClass(StringBuffer buf, ImportsManager imports) { - // String typename= getSuperClass(); - // if (fIsClass && typename.length() > 0 && - // !"java.lang.Object".equals(typename)) { //$NON-NLS-1$ - // buf.append(" extends "); //$NON-NLS-1$ - // - // String qualifiedName= fSuperClass != null ? - // JavaModelUtil.getFullyQualifiedName(fSuperClass) : typename; - // buf.append(imports.addImport(qualifiedName)); - // } - // } - - // private void writeSuperInterfaces(StringBuffer buf, ImportsManager - // imports) { - // List interfaces= getSuperInterfaces(); - // int last= interfaces.size() - 1; - // if (last >= 0) { - // if (fIsClass) { - // buf.append(" implements "); //$NON-NLS-1$ - // } else { - // buf.append(" extends "); //$NON-NLS-1$ - // } - // for (int i= 0; i <= last; i++) { - // String typename= (String) interfaces.get(i); - // buf.append(imports.addImport(typename)); - // if (i < last) { - // buf.append(','); - // } - // } - // } - // } - - /* - * Called from createType to construct the source for this type - */ - private String constructTypeStub(String lineDelimiter) { // ImportsManager - // imports, - // String - // lineDelimiter) - // { - StringBuffer buf = new StringBuffer(); - - int modifiers = getModifiers(); - buf.append(Flags.toString(modifiers)); - if (modifiers != 0) { - buf.append(' '); - } - buf.append(fIsClass ? "class " : "interface "); //$NON-NLS-2$ //$NON-NLS-1$ - buf.append(getTypeName()); - // writeSuperClass(buf, imports); - // writeSuperInterfaces(buf, imports); - buf.append('{'); - buf.append(lineDelimiter); - buf.append(lineDelimiter); - buf.append('}'); - buf.append(lineDelimiter); - return buf.toString(); - } - - /** - * @deprecated Overwrite createTypeMembers(IType, IImportsManager, - * IProgressMonitor) instead - */ - // protected void createTypeMembers(IType newType, IImportsStructure - // imports, IProgressMonitor monitor) throws CoreException { - // //deprecated - // } - /** - * Hook method that gets called from createType to support - * adding of unanticipated methods, fields, and inner types to the created - * type. - *

- * Implementers can use any methods defined on IType to - * manipulate the new type. - *

- *

- * The source code of the new type will be formtted using the platform's - * formatter. Needed imports are added by the wizard at the end of the type - * creation process using the given import manager. - *

- * - * @param newType - * the new type created via createType - * @param imports - * an import manager which can be used to add new imports - * @param monitor - * a progress monitor to report progress. Must not be - * null - * - * @see #createType(IProgressMonitor) - */ - // protected void createTypeMembers(IType newType, ImportsManager imports, - // IProgressMonitor monitor) throws CoreException { - // // call for compatibility - // createTypeMembers(newType, - // ((ImportsManager)imports).getImportsStructure(), monitor); - // - // // default implementation does nothing - // // example would be - // // String mainMathod= "public void foo(Vector vec) {}" - // // createdType.createMethod(main, null, false, null); - // // imports.addImport("java.lang.Vector"); - // } - /** - * @deprecated Instead of file templates, the new type code template - * specifies the stub for a compilation unit. - */ - protected String getFileComment(ICompilationUnit parentCU) { - return null; - } - - private boolean isValidComment(String template) { - IScanner scanner = ToolFactory.createScanner(true, false, false); // , - // false); - scanner.setSource(template.toCharArray()); - try { - int next = scanner.getNextToken(); - while (next == ITerminalSymbols.TokenNameCOMMENT_LINE - || next == ITerminalSymbols.TokenNameCOMMENT_PHPDOC - || next == ITerminalSymbols.TokenNameCOMMENT_BLOCK) { - next = scanner.getNextToken(); - } - return next == ITerminalSymbols.TokenNameEOF; - } catch (InvalidInputException e) { - } - return false; - } - - /** - * Hook method that gets called from createType to retrieve a - * type comment. This default implementation returns the content of the - * 'typecomment' template. - * - * @return the type comment or null if a type comment is not - * desired - */ - protected String getTypeComment(ICompilationUnit parentCU) { - if (PreferenceConstants.getPreferenceStore().getBoolean( - PreferenceConstants.CODEGEN_ADD_COMMENTS)) { - try { - StringBuffer typeName = new StringBuffer(); - if (isEnclosingTypeSelected()) { - typeName.append( - JavaModelUtil - .getTypeQualifiedName(getEnclosingType())) - .append('.'); - } - typeName.append(getTypeName()); - String comment = CodeGeneration.getTypeComment(parentCU, - typeName.toString(), String.valueOf('\n')); - if (comment != null && isValidComment(comment)) { - return comment; - } - } catch (CoreException e) { - PHPeclipsePlugin.log(e); - } - } - return null; - } - - /** - * @deprecated Use getTemplate(String,ICompilationUnit,int) - */ - protected String getTemplate(String name, ICompilationUnit parentCU) { - return getTemplate(name, parentCU, 0); - } - - /** - * Returns the string resulting from evaluation the given template in the - * context of the given compilation unit. This accesses the normal template - * page, not the code templates. To use code templates use - * constructCUContent to construct a compilation unit stub or - * getTypeComment for the comment of the type. - * - * @param name - * the template to be evaluated - * @param parentCU - * the templates evaluation context - * @param pos - * a source offset into the parent compilation unit. The template - * is evalutated at the given source offset - */ - protected String getTemplate(String name, ICompilationUnit parentCU, int pos) { - try { - Template[] templates = Templates.getInstance().getTemplates(name); - if (templates.length > 0) { - return JavaContext - .evaluateTemplate(templates[0], parentCU, pos); - } - } catch (CoreException e) { - PHPeclipsePlugin.log(e); - } catch (BadLocationException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } catch (TemplateException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } - return null; - } - - /** - * @deprecated Use - * createInheritedMethods(IType,boolean,boolean,IImportsManager,IProgressMonitor) - */ - // protected IMethod[] createInheritedMethods(IType type, boolean - // doConstructors, boolean doUnimplementedMethods, IImportsStructure - // imports, IProgressMonitor monitor) throws CoreException { - // return createInheritedMethods(type, doConstructors, - // doUnimplementedMethods, new ImportsManager(imports), monitor); - // } - /** - * Creates the bodies of all unimplemented methods and constructors and adds - * them to the type. Method is typically called by implementers of - * NewTypeWizardPage to add needed method and constructors. - * - * @param type - * the type for which the new methods and constructor are to be - * created - * @param doConstructors - * if true unimplemented constructors are created - * @param doUnimplementedMethods - * if true unimplemented methods are created - * @param imports - * an import manager to add all neded import statements - * @param monitor - * a progress monitor to report progress - */ - // protected IMethod[] createInheritedMethods(IType type, boolean - // doConstructors, boolean doUnimplementedMethods, ImportsManager imports, - // IProgressMonitor monitor) throws CoreException { - // ArrayList newMethods= new ArrayList(); - // ITypeHierarchy hierarchy= null; - // CodeGenerationSettings settings= - // JavaPreferencesSettings.getCodeGenerationSettings(); - // - // if (doConstructors) { - // hierarchy= type.newSupertypeHierarchy(monitor); - // IType superclass= hierarchy.getSuperclass(type); - // if (superclass != null) { - // String[] constructors= StubUtility.evalConstructors(type, superclass, - // settings, imports.getImportsStructure()); - // if (constructors != null) { - // for (int i= 0; i < constructors.length; i++) { - // newMethods.add(constructors[i]); - // } - // } - // - // } - // } - // if (doUnimplementedMethods) { - // if (hierarchy == null) { - // hierarchy= type.newSupertypeHierarchy(monitor); - // } - // String[] unimplemented= StubUtility.evalUnimplementedMethods(type, - // hierarchy, false, settings, null, imports.getImportsStructure()); - // if (unimplemented != null) { - // for (int i= 0; i < unimplemented.length; i++) { - // newMethods.add(unimplemented[i]); - // } - // } - // } - // IMethod[] createdMethods= new IMethod[newMethods.size()]; - // for (int i= 0; i < newMethods.size(); i++) { - // String content= (String) newMethods.get(i) + '\n'; // content will be - // formatted, ok to use \n - // createdMethods[i]= type.createMethod(content, null, false, null); - // } - // return createdMethods; - // } - // ---- creation ---------------- - /** - * Returns the runnable that creates the type using the current settings. - * The returned runnable must be executed in the UI thread. - * - * @return the runnable to create the new type - */ - // public IRunnableWithProgress getRunnable() { - // return new IRunnableWithProgress() { - // public void run(IProgressMonitor monitor) throws - // InvocationTargetException, InterruptedException { - // try { - // if (monitor == null) { - // monitor= new NullProgressMonitor(); - // } - // createType(monitor); - // } catch (CoreException e) { - // throw new InvocationTargetException(e); - // } - // } - // }; - // } -}