/******************************************************************************* * Copyright (c) 2006, 2008 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.jdt.core.refactoring.descriptors; import java.util.Map; import org.eclipse.core.runtime.Assert; import org.eclipse.ltk.core.refactoring.RefactoringContribution; import org.eclipse.ltk.core.refactoring.RefactoringCore; import org.eclipse.ltk.core.refactoring.RefactoringStatus; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.refactoring.IJavaRefactorings; import org.eclipse.jdt.internal.core.refactoring.descriptors.DescriptorMessages; import org.eclipse.jdt.internal.core.refactoring.descriptors.JavaRefactoringDescriptorUtil; /** * Refactoring descriptor for the use supertype refactoring. * <p> * An instance of this refactoring descriptor may be obtained by calling * {@link RefactoringContribution#createDescriptor()} on a refactoring * contribution requested by invoking * {@link RefactoringCore#getRefactoringContribution(String)} with the * appropriate refactoring id. * </p> * <p> * Note: this class is not intended to be instantiated by clients. * </p> * * @since 1.1 * * @noinstantiate This class is not intended to be instantiated by clients. */ public final class UseSupertypeDescriptor extends JavaRefactoringDescriptor { /** The instanceof attribute */ private static final String ATTRIBUTE_INSTANCEOF= "instanceof"; //$NON-NLS-1$ /** The instanceof attribute */ private boolean fInstanceof= false; /** The subtype attribute */ private IType fSubType= null; /** The supertype attribute */ private IType fSupertype= null; /** * Creates a new refactoring descriptor. */ public UseSupertypeDescriptor() { super(IJavaRefactorings.USE_SUPER_TYPE); } /** * Creates a new refactoring descriptor. * * @param project * the non-empty name of the project associated with this * refactoring, or <code>null</code> for a workspace * refactoring * @param description * a non-empty human-readable description of the particular * refactoring instance * @param comment * the human-readable comment of the particular refactoring * instance, or <code>null</code> for no comment * @param arguments * a map of arguments that will be persisted and describes * all settings for this refactoring * @param flags * the flags of the refactoring descriptor * * @throws IllegalArgumentException if the argument map contains invalid keys/values * * @since 1.2 */ public UseSupertypeDescriptor(String project, String description, String comment, Map arguments, int flags) { super(IJavaRefactorings.USE_SUPER_TYPE, project, description, comment, arguments, flags); fInstanceof= JavaRefactoringDescriptorUtil.getBoolean(arguments, ATTRIBUTE_INSTANCEOF, fInstanceof); fSubType= (IType) JavaRefactoringDescriptorUtil.getJavaElement(arguments, ATTRIBUTE_INPUT, project); fSupertype= (IType) JavaRefactoringDescriptorUtil.getJavaElement(arguments, JavaRefactoringDescriptorUtil.getAttributeName(ATTRIBUTE_ELEMENT, 1), project); } /** * {@inheritDoc} */ protected void populateArgumentMap() { super.populateArgumentMap(); JavaRefactoringDescriptorUtil.setBoolean(fArguments, ATTRIBUTE_INSTANCEOF, fInstanceof); JavaRefactoringDescriptorUtil.setJavaElement(fArguments, ATTRIBUTE_INPUT, getProject(), fSubType); JavaRefactoringDescriptorUtil.setJavaElement(fArguments, JavaRefactoringDescriptorUtil.getAttributeName(ATTRIBUTE_ELEMENT, 1), getProject(), fSupertype); } /** * Determines whether 'instanceof' statements are considered as candidates * to replace the subtype occurrence by one of its supertypes. * <p> * The default is to not replace the subtype occurrence. * </p> * * @param replace * <code>true</code> to replace subtype occurrences in * 'instanceof' statements, <code>false</code> otherwise */ public void setReplaceInstanceof(final boolean replace) { fInstanceof= replace; } /** * Sets the subtype of the refactoring. * <p> * Occurrences of the subtype are replaced by the supertype set by * {@link #setSupertype(IType)} where possible. * </p> * * @param type * the subtype to set */ public void setSubtype(final IType type) { Assert.isNotNull(type); fSubType= type; } /** * Sets the supertype of the refactoring. * <p> * Occurrences of the subtype set by {@link #setSubtype(IType)} are replaced * by the supertype where possible. * </p> * * @param type * the supertype to set */ public void setSupertype(final IType type) { Assert.isNotNull(type); fSupertype= type; } /** * {@inheritDoc} */ public RefactoringStatus validateDescriptor() { RefactoringStatus status= super.validateDescriptor(); if (fSubType == null) status.merge(RefactoringStatus.createFatalErrorStatus(DescriptorMessages.UseSupertypeDescriptor_no_subtype)); if (fSupertype == null) status.merge(RefactoringStatus.createFatalErrorStatus(DescriptorMessages.UseSupertypeDescriptor_no_supertype)); return status; } }