blob: fb42d81842bfacb88a9b1065763b9174089e1243 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2008 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* 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.IMember;
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 move static members 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 MoveStaticMembersDescriptor extends JavaRefactoringDescriptor {
/** The delegate attribute */
private static final String ATTRIBUTE_DELEGATE= "delegate"; //$NON-NLS-1$
/** The deprecate attribute */
private static final String ATTRIBUTE_DEPRECATE= "deprecate"; //$NON-NLS-1$
/** The delegate attribute */
private boolean fDelegate= false;
/** The deprecate attribute */
private boolean fDeprecate= false;
/** The members attribute */
private IMember[] fMembers;
/** The type attribute */
private IType fType= null;
/**
* Creates a new refactoring descriptor.
*/
public MoveStaticMembersDescriptor() {
super(IJavaRefactorings.MOVE_STATIC_MEMBERS);
}
/**
* 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
*
* @since 1.2
*/
public MoveStaticMembersDescriptor(String project, String description, String comment, Map<String, String> arguments, int flags) {
super(IJavaRefactorings.MOVE_STATIC_MEMBERS, project, description, comment, arguments, flags);
fType= (IType) JavaRefactoringDescriptorUtil.getJavaElement(fArguments, ATTRIBUTE_INPUT, project);
fDelegate= JavaRefactoringDescriptorUtil.getBoolean(fArguments, ATTRIBUTE_DELEGATE, fDelegate);
fDeprecate= JavaRefactoringDescriptorUtil.getBoolean(fArguments, ATTRIBUTE_DEPRECATE, fDeprecate);
fMembers= (IMember[]) JavaRefactoringDescriptorUtil.getJavaElementArray(fArguments, null, ATTRIBUTE_ELEMENT, 1, project, IMember.class);
}
@Override
protected void populateArgumentMap() {
super.populateArgumentMap();
String project= getProject();
JavaRefactoringDescriptorUtil.setJavaElement(fArguments, ATTRIBUTE_INPUT, project, fType);
JavaRefactoringDescriptorUtil.setBoolean(fArguments, ATTRIBUTE_DELEGATE, fDelegate);
JavaRefactoringDescriptorUtil.setBoolean(fArguments, ATTRIBUTE_DEPRECATE, fDeprecate);
JavaRefactoringDescriptorUtil.setJavaElementArray(fArguments, null, ATTRIBUTE_ELEMENT, project, fMembers, 1);
}
/**
* Determines whether the delegate for a member should be declared as
* deprecated.
*
* @param deprecate
* <code>true</code> to deprecate the delegate,
* <code>false</code> otherwise
*/
public void setDeprecateDelegate(final boolean deprecate) {
fDeprecate= deprecate;
}
/**
* Sets the destination type of the move operation.
*
* @param type
* the destination type
*/
public void setDestinationType(final IType type) {
Assert.isNotNull(type);
fType= type;
}
/**
* Determines whether the the original members should be kept as delegates
* to the moved ones.
*
* @param delegate
* <code>true</code> to keep the originals, <code>false</code>
* otherwise
*/
public void setKeepOriginal(final boolean delegate) {
fDelegate= delegate;
}
/**
* Sets the static members to move.
*
* @param members
* the members to move
*/
public void setMembers(final IMember[] members) {
Assert.isNotNull(members);
fMembers= members;
}
@Override
public RefactoringStatus validateDescriptor() {
final RefactoringStatus status= super.validateDescriptor();
if (fType == null)
status.merge(RefactoringStatus.createFatalErrorStatus(DescriptorMessages.MoveStaticMembersDescriptor_no_type));
if (fMembers == null)
status.merge(RefactoringStatus.createFatalErrorStatus(DescriptorMessages.MoveStaticMembersDescriptor_no_members));
else {
for (int index= 0; index < fMembers.length; index++) {
if (fMembers[index] == null) {
status.merge(RefactoringStatus.createFatalErrorStatus(DescriptorMessages.MoveStaticMembersDescriptor_invalid_members));
break;
}
}
}
return status;
}
}