Added support for move static
diff --git a/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/core/refactoring/descriptors/MoveStaticMembersDescriptor.java b/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/core/refactoring/descriptors/MoveStaticMembersDescriptor.java
index 354e26a..04049a2 100644
--- a/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/core/refactoring/descriptors/MoveStaticMembersDescriptor.java
+++ b/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/core/refactoring/descriptors/MoveStaticMembersDescriptor.java
@@ -10,11 +10,18 @@
  *******************************************************************************/
 package org.eclipse.jdt.core.refactoring.descriptors;
 
+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;
+
 /**
  * Refactoring descriptor for the move static members refactoring.
  * <p>
@@ -32,10 +39,106 @@
  */
 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);
 	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	protected void populateArgumentMap() {
+		super.populateArgumentMap();
+		fArguments.put(JavaRefactoringDescriptor.ATTRIBUTE_INPUT, elementToHandle(getProject(), fType));
+		fArguments.put(ATTRIBUTE_DELEGATE, Boolean.valueOf(fDelegate).toString());
+		fArguments.put(ATTRIBUTE_DEPRECATE, Boolean.valueOf(fDeprecate).toString());
+		for (int index= 0; index < fMembers.length; index++)
+			fArguments.put(JavaRefactoringDescriptor.ATTRIBUTE_ELEMENT + (index + 1), elementToHandle(getProject(), fMembers[index]));
+	}
+
+	/**
+	 * 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;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	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;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/internal/core/refactoring/descriptors/DescriptorMessages.java b/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/internal/core/refactoring/descriptors/DescriptorMessages.java
index 5a13709..0387903 100644
--- a/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/internal/core/refactoring/descriptors/DescriptorMessages.java
+++ b/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/internal/core/refactoring/descriptors/DescriptorMessages.java
@@ -22,6 +22,12 @@
 
 	public static String JavaRefactoringDescriptor_not_available;
 
+	public static String MoveStaticMembersDescriptor_invalid_members;
+
+	public static String MoveStaticMembersDescriptor_no_members;
+
+	public static String MoveStaticMembersDescriptor_no_type;
+
 	public static String RenameJavaElementDescriptor_accessor_constraint;
 
 	public static String RenameJavaElementDescriptor_delegate_constraint;
diff --git a/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/internal/core/refactoring/descriptors/DescriptorMessages.properties b/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/internal/core/refactoring/descriptors/DescriptorMessages.properties
index 9e50aeb..abaf341 100644
--- a/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/internal/core/refactoring/descriptors/DescriptorMessages.properties
+++ b/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/internal/core/refactoring/descriptors/DescriptorMessages.properties
@@ -29,4 +29,7 @@
 RenameJavaElementDescriptor_similar_constraint=Similar declaration updating is only available for types.
 RenameJavaElementDescriptor_delegate_constraint=Keeping delegates is only available for methods and fields.
 RenameJavaElementDescriptor_accessor_constraint=Renaming of accessor methods is only available for fields.
-RenameJavaElementDescriptor_patterns_constraint=Patterns must be a non-empty string.
\ No newline at end of file
+RenameJavaElementDescriptor_patterns_constraint=Patterns must be a non-empty string.
+MoveStaticMembersDescriptor_no_type=Destination type has not been set.
+MoveStaticMembersDescriptor_no_members=Members have not been set.
+MoveStaticMembersDescriptor_invalid_members=Members array contains an invalid member
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveStaticMembersProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveStaticMembersProcessor.java
index cb5adbb..ddd7a47 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveStaticMembersProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/MoveStaticMembersProcessor.java
@@ -83,6 +83,7 @@
 import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.refactoring.IJavaRefactorings;
 import org.eclipse.jdt.core.refactoring.descriptors.JavaRefactoringDescriptor;
+import org.eclipse.jdt.core.refactoring.descriptors.MoveStaticMembersDescriptor;
 import org.eclipse.jdt.core.search.IJavaSearchConstants;
 import org.eclipse.jdt.core.search.SearchMatch;
 import org.eclipse.jdt.core.search.SearchPattern;
@@ -92,9 +93,9 @@
 import org.eclipse.jdt.internal.corext.dom.ModifierRewrite;
 import org.eclipse.jdt.internal.corext.dom.NodeFinder;
 import org.eclipse.jdt.internal.corext.refactoring.Checks;
-import org.eclipse.jdt.internal.corext.refactoring.JavaRefactoringArguments;
 import org.eclipse.jdt.internal.corext.refactoring.JDTRefactoringDescriptor;
 import org.eclipse.jdt.internal.corext.refactoring.JDTRefactoringDescriptorComment;
+import org.eclipse.jdt.internal.corext.refactoring.JavaRefactoringArguments;
 import org.eclipse.jdt.internal.corext.refactoring.RefactoringAvailabilityTester;
 import org.eclipse.jdt.internal.corext.refactoring.RefactoringCoreMessages;
 import org.eclipse.jdt.internal.corext.refactoring.RefactoringScopeFactory;
@@ -688,7 +689,6 @@
 	private void createChange(List modifiedCus, RefactoringStatus status, IProgressMonitor monitor) throws CoreException {
 		monitor.beginTask(RefactoringCoreMessages.MoveMembersRefactoring_creating, 5);
 		final IMember[] members= getMembersToMove();
-		final Map arguments= new HashMap();
 		String project= null;
 		final IJavaProject javaProject= getDeclaringType().getJavaProject();
 		if (javaProject != null)
@@ -709,12 +709,15 @@
 		final String description= members.length == 1 ? Messages.format(RefactoringCoreMessages.MoveStaticMembersProcessor_description_descriptor_short_multi, members[0].getElementName()) : RefactoringCoreMessages.MoveMembersRefactoring_move_members;
 		final JDTRefactoringDescriptorComment comment= new JDTRefactoringDescriptorComment(project, this, header);
 		comment.addSetting(Messages.format(RefactoringCoreMessages.MoveStaticMembersProcessor_target_element_pattern, JavaElementLabels.getElementLabel(fDestinationType, JavaElementLabels.ALL_FULLY_QUALIFIED)));
-		final JDTRefactoringDescriptor descriptor= new JDTRefactoringDescriptor(IJavaRefactorings.MOVE_STATIC_MEMBERS, project, description, comment.asString(), arguments, flags);
-		arguments.put(JDTRefactoringDescriptor.ATTRIBUTE_INPUT, descriptor.elementToHandle(fDestinationType));
-		arguments.put(ATTRIBUTE_DELEGATE, Boolean.valueOf(fDelegateUpdating).toString());
-		arguments.put(ATTRIBUTE_DEPRECATE, Boolean.valueOf(fDelegateDeprecation).toString());
-		for (int index= 0; index < members.length; index++)
-			arguments.put(JDTRefactoringDescriptor.ATTRIBUTE_ELEMENT + (index + 1), descriptor.elementToHandle(members[index]));
+		final MoveStaticMembersDescriptor descriptor= new MoveStaticMembersDescriptor();
+		descriptor.setProject(project);
+		descriptor.setDescription(description);
+		descriptor.setComment(comment.asString());
+		descriptor.setFlags(flags);
+		descriptor.setDestinationType(fDestinationType);
+		descriptor.setKeepOriginal(fDelegateUpdating);
+		descriptor.setDeprecateDelegate(fDelegateDeprecation);
+		descriptor.setMembers(members);
 		fChange= new DynamicValidationRefactoringChange(descriptor, RefactoringCoreMessages.MoveMembersRefactoring_move_members);
 		fTarget= getCuRewrite(fDestinationType.getCompilationUnit());
 		ITypeBinding targetBinding= getDestinationBinding();