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();