### Eclipse Workspace Patch 1.0
#P org.eclipse.jdt.ui
Index: core extension/org/eclipse/jdt/internal/corext/dom/CorrectModifiersOrderRewrite.java
===================================================================
RCS file: core extension/org/eclipse/jdt/internal/corext/dom/CorrectModifiersOrderRewrite.java
diff -N core extension/org/eclipse/jdt/internal/corext/dom/CorrectModifiersOrderRewrite.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ core extension/org/eclipse/jdt/internal/corext/dom/CorrectModifiersOrderRewrite.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2010 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.internal.corext.dom;
+
+import org.eclipse.text.edits.TextEditGroup;
+
+import org.eclipse.jdt.core.dom.AST;
+import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.BodyDeclaration;
+import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
+
+public class CorrectModifiersOrderRewrite {
+
+ public static void rewriteModifiers(final BodyDeclaration withModifiersNode, final ASTRewrite rewrite, final TextEditGroup group) {
+ AST ast= withModifiersNode.getAST();
+
+ BodyDeclaration withOrderedModifiersReplacementNode= (BodyDeclaration)ASTNode.copySubtree(ast, withModifiersNode);
+ withOrderedModifiersReplacementNode.modifiers().clear();
+ withOrderedModifiersReplacementNode.modifiers().addAll(ASTNodeFactory.newModifiers(ast, withModifiersNode.getModifiers()));
+
+ rewrite.replace(withModifiersNode, withOrderedModifiersReplacementNode, group);
+ }
+
+}
Index: core extension/org/eclipse/jdt/internal/corext/fix/CleanUpConstants.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpConstants.java,v
retrieving revision 1.28
diff -u -r1.28 CleanUpConstants.java
--- core extension/org/eclipse/jdt/internal/corext/fix/CleanUpConstants.java 23 Sep 2009 17:11:21 -0000 1.28
+++ core extension/org/eclipse/jdt/internal/corext/fix/CleanUpConstants.java 16 Aug 2010 10:55:04 -0000
@@ -663,6 +663,79 @@
public static final String VARIABLE_DECLARATION_USE_TYPE_ARGUMENTS_FOR_RAW_TYPE_REFERENCES= "cleanup.use_arguments_for_raw_type_references"; //$NON-NLS-1$
/**
+ * Correct modifiers order for variable declarations. For detailed settings use:
+ * {@link #VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_CLASSES}
+ * {@link #VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_FIELDS}
+ * {@link #VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_METHODS}
+ *
+ * Possible values: {TRUE, FALSE}
+ *
+ *
+ *
+ * @see CleanUpOptions#TRUE
+ * @see CleanUpOptions#FALSE
+ * @since 3.7
+ */
+ public static final String VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER= "cleanup.correct_variable_modifiers_order"; //$NON-NLS-1$
+
+ /**
+ * Correct modifiers order for classes i.e.:
+ *
+ *
+ * abstract public class A {} -> public abstract class A {}
+ *
+ *
+ * Only has an effect if {@link #VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER} is TRUE
+ *
+ * Possible values: {TRUE, FALSE}
+ *
+ *
+ *
+ * @see CleanUpOptions#TRUE
+ * @see CleanUpOptions#FALSE
+ * @since 3.7
+ */
+ public static final String VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_CLASSES= "cleanup.correct_class_modifiers_order"; //$NON-NLS-1$
+
+ /**
+ * Correct modifiers order for fields i.e.:
+ *
+ *
+ * static public final int FIELD= 0; -> public static final int FIELD= 0;
+ *
+ *
+ * Only has an effect if {@link #VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER} is TRUE
+ *
+ * Possible values: {TRUE, FALSE}
+ *
+ *
+ *
+ * @see CleanUpOptions#TRUE
+ * @see CleanUpOptions#FALSE
+ * @since 3.7
+ */
+ public static final String VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_FIELDS= "cleanup.correct_field_modifiers_order"; //$NON-NLS-1$
+
+ /**
+ * Correct modifiers order for methods i.e.:
+ *
+ *
+ * final synchronized protected void foo() {} -> synchronized protected final void foo() {}
+ *
+ *
+ * Only has an effect if {@link #VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER} is TRUE
+ *
+ * Possible values: {TRUE, FALSE}
+ *
+ *
+ *
+ * @see CleanUpOptions#TRUE
+ * @see CleanUpOptions#FALSE
+ * @since 3.7
+ */
+ public static final String VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_METHODS= "cleanup.correct_method_modifiers_order"; //$NON-NLS-1$
+
+ /**
* Removes unused imports.
*
* Possible values: {TRUE, FALSE}
@@ -1135,6 +1208,12 @@
options.setOption(VARIABLE_DECLARATIONS_USE_FINAL_LOCAL_VARIABLES, CleanUpOptions.TRUE);
options.setOption(VARIABLE_DECLARATIONS_USE_FINAL_PARAMETERS, CleanUpOptions.FALSE);
options.setOption(VARIABLE_DECLARATIONS_USE_FINAL_PRIVATE_FIELDS, CleanUpOptions.TRUE);
+
+ //Modifiers Order
+ options.setOption(VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER, CleanUpOptions.FALSE);
+ options.setOption(VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_CLASSES, CleanUpOptions.TRUE);
+ options.setOption(VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_FIELDS, CleanUpOptions.TRUE);
+ options.setOption(VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_METHODS, CleanUpOptions.TRUE);
//Unused Code
options.setOption(REMOVE_UNUSED_CODE_IMPORTS, CleanUpOptions.TRUE);
@@ -1215,6 +1294,12 @@
options.setOption(VARIABLE_DECLARATIONS_USE_FINAL_LOCAL_VARIABLES, CleanUpOptions.FALSE);
options.setOption(VARIABLE_DECLARATIONS_USE_FINAL_PARAMETERS, CleanUpOptions.FALSE);
options.setOption(VARIABLE_DECLARATIONS_USE_FINAL_PRIVATE_FIELDS, CleanUpOptions.TRUE);
+
+ //Modifiers Order
+ options.setOption(VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER, CleanUpOptions.TRUE);
+ options.setOption(VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_CLASSES, CleanUpOptions.FALSE);
+ options.setOption(VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_FIELDS, CleanUpOptions.FALSE);
+ options.setOption(VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_METHODS, CleanUpOptions.TRUE);
//Unused Code
options.setOption(REMOVE_UNUSED_CODE_IMPORTS, CleanUpOptions.FALSE);
Index: core extension/org/eclipse/jdt/internal/corext/fix/CorrectModifiersOrderFix.java
===================================================================
RCS file: core extension/org/eclipse/jdt/internal/corext/fix/CorrectModifiersOrderFix.java
diff -N core extension/org/eclipse/jdt/internal/corext/fix/CorrectModifiersOrderFix.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ core extension/org/eclipse/jdt/internal/corext/fix/CorrectModifiersOrderFix.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,184 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2010 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
+ * Chris West (Faux) - [clean up] "Use modifier 'final' where possible" can introduce compile errors - https://bugs.eclipse.org/bugs/show_bug.cgi?id=272532
+ *******************************************************************************/
+package org.eclipse.jdt.internal.corext.fix;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+
+import org.eclipse.text.edits.TextEditGroup;
+
+import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.BodyDeclaration;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.EnumConstantDeclaration;
+import org.eclipse.jdt.core.dom.EnumDeclaration;
+import org.eclipse.jdt.core.dom.FieldDeclaration;
+import org.eclipse.jdt.core.dom.MethodDeclaration;
+import org.eclipse.jdt.core.dom.SimpleName;
+import org.eclipse.jdt.core.dom.TypeDeclaration;
+import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
+
+import org.eclipse.jdt.internal.corext.dom.CorrectModifiersOrderRewrite;
+import org.eclipse.jdt.internal.corext.dom.GenericVisitor;
+import org.eclipse.jdt.internal.corext.refactoring.structure.CompilationUnitRewrite;
+
+import org.eclipse.jdt.ui.cleanup.ICleanUpFix;
+
+public class CorrectModifiersOrderFix extends CompilationUnitRewriteOperationsFix {
+
+ private static class WithModifiersNodeFinder extends GenericVisitor {
+
+ private final boolean fCorrectModifiersOrderClasses;
+ private final boolean fCorrectModifiersOrderFields;
+ private final boolean fCorrectModifiersOrderMethods;
+ private final List fWithModifiersNodes;
+ private final List fOperations;
+
+ public WithModifiersNodeFinder(boolean correctModifiersOrderClasses,
+ boolean correctModifiersOrderFields,
+ boolean correctModifiersOrderMethods,
+ List withModifiersNodes,
+ List operations) {
+ fCorrectModifiersOrderClasses= correctModifiersOrderClasses;
+ fCorrectModifiersOrderFields= correctModifiersOrderFields;
+ fCorrectModifiersOrderMethods= correctModifiersOrderMethods;
+ fWithModifiersNodes= withModifiersNodes;
+ fOperations= operations;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void endVisit(TypeDeclaration node) {
+ if (fCorrectModifiersOrderClasses && node.modifiers().size() > 1) {
+ fWithModifiersNodes.add(node);
+ fOperations.add(createCorrectModifiersOrderOperation(node));
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void endVisit(EnumDeclaration node) {
+ if (fCorrectModifiersOrderClasses && node.modifiers().size() > 1) {
+ fWithModifiersNodes.add(node);
+ fOperations.add(createCorrectModifiersOrderOperation(node));
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void endVisit(EnumConstantDeclaration node) {
+ if (fCorrectModifiersOrderClasses && node.modifiers().size() > 1) {
+ fWithModifiersNodes.add(node);
+ fOperations.add(createCorrectModifiersOrderOperation(node));
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean visit(FieldDeclaration node) {
+ if (fCorrectModifiersOrderFields && node.modifiers().size() > 1) {
+ fWithModifiersNodes.add(node);
+ fOperations.add(createCorrectModifiersOrderOperation(node));
+ }
+ return super.visit(node);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean visit(MethodDeclaration node) {
+ if (fCorrectModifiersOrderMethods && node.modifiers().size() > 1) {
+ fWithModifiersNodes.add(node);
+ fOperations.add(createCorrectModifiersOrderOperation(node));
+ }
+ return super.visit(node);
+ }
+
+ }
+
+ private static class CorrectModifiersOrderOperation extends CompilationUnitRewriteOperation {
+
+ private final BodyDeclaration fWithModifiersNode;
+
+ public CorrectModifiersOrderOperation(BodyDeclaration withModifiersNode) {
+ fWithModifiersNode= withModifiersNode;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel model) throws CoreException {
+ ASTRewrite rewrite= cuRewrite.getASTRewrite();
+
+ TextEditGroup group= createTextEditGroup(FixMessages.VariableDeclarationFix_correctModifiersOrder_description, cuRewrite);
+
+ CorrectModifiersOrderRewrite.rewriteModifiers(fWithModifiersNode, rewrite, group);
+ }
+ }
+
+ private static CorrectModifiersOrderOperation createCorrectModifiersOrderOperation(BodyDeclaration withModifiersNode) {
+ return new CorrectModifiersOrderOperation(withModifiersNode);
+ }
+
+ public static CorrectModifiersOrderFix createFix(final CompilationUnit compilationUnit, ASTNode[] selectedNodes) {
+ List withModifiersNode= new LinkedList();
+ List operations= new ArrayList();
+ WithModifiersNodeFinder visitor= new WithModifiersNodeFinder(true, true, true, withModifiersNode, operations);
+ compilationUnit.accept(visitor);
+ if (selectedNodes.length == 1) {
+ if (selectedNodes[0] instanceof SimpleName) {
+ selectedNodes[0]= selectedNodes[0].getParent();
+ }
+ selectedNodes[0].accept(visitor);
+ } else {
+ for (int i= 0; i < selectedNodes.length; i++) {
+ ASTNode selectedNode= selectedNodes[i];
+ selectedNode.accept(visitor);
+ }
+ }
+ if (operations.size() == 0)
+ return null;
+
+ CompilationUnitRewriteOperation[] fixRewriteOperations= (CompilationUnitRewriteOperation[])operations.toArray(new CompilationUnitRewriteOperation[operations.size()]);
+
+ return new CorrectModifiersOrderFix(FixMessages.VariableDeclarationFix_correctModifiersOrder_description, compilationUnit, fixRewriteOperations);
+ }
+
+ public static ICleanUpFix createCleanUp(CompilationUnit compilationUnit,
+ boolean correctModifiersOrderClasses,
+ boolean correctModifiersOrderFields,
+ boolean correctModifiersOrderMethods) {
+ if (!correctModifiersOrderClasses && !correctModifiersOrderFields && !correctModifiersOrderMethods)
+ return null;
+
+ List withModifiersNodes= new LinkedList();
+ List operations= new ArrayList();
+ WithModifiersNodeFinder finder= new WithModifiersNodeFinder(correctModifiersOrderClasses, correctModifiersOrderFields, correctModifiersOrderMethods, withModifiersNodes, operations);
+ compilationUnit.accept(finder);
+
+ CompilationUnitRewriteOperation[] fixRewriteOperations= (CompilationUnitRewriteOperation[])operations.toArray(new CompilationUnitRewriteOperation[operations.size()]);
+
+ return new CorrectModifiersOrderFix(FixMessages.VariableDeclarationFix_add_final_change_name, compilationUnit, fixRewriteOperations);
+ }
+
+ protected CorrectModifiersOrderFix(String name, CompilationUnit compilationUnit, CompilationUnitRewriteOperation[] fixRewriteOperations) {
+ super(name, compilationUnit, fixRewriteOperations);
+ }
+
+}
Index: core extension/org/eclipse/jdt/internal/corext/fix/FixMessages.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/FixMessages.java,v
retrieving revision 1.42
diff -u -r1.42 FixMessages.java
--- core extension/org/eclipse/jdt/internal/corext/fix/FixMessages.java 16 Nov 2009 16:55:03 -0000 1.42
+++ core extension/org/eclipse/jdt/internal/corext/fix/FixMessages.java 16 Aug 2010 10:55:12 -0000
@@ -117,6 +117,8 @@
public static String VariableDeclarationFix_changeModifierOfUnknownToFinal_description;
public static String VariableDeclarationFix_ChangeMidifiersToFinalWherPossible_description;
+ public static String VariableDeclarationFix_correctModifiersOrder_description;
+
static {
// initialize resource bundle
NLS.initializeMessages(BUNDLE_NAME, FixMessages.class);
Index: core extension/org/eclipse/jdt/internal/corext/fix/FixMessages.properties
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/FixMessages.properties,v
retrieving revision 1.48
diff -u -r1.48 FixMessages.properties
--- core extension/org/eclipse/jdt/internal/corext/fix/FixMessages.properties 20 May 2010 09:16:59 -0000 1.48
+++ core extension/org/eclipse/jdt/internal/corext/fix/FixMessages.properties 16 Aug 2010 10:55:12 -0000
@@ -83,6 +83,8 @@
VariableDeclarationFix_add_final_change_name=Add final
VariableDeclarationFix_ChangeMidifiersToFinalWherPossible_description=Change modifiers to final where possible
+VariableDeclarationFix_correctModifiersOrder_description=Correct modifiers order
+
PotentialProgrammingProblemsFix_calculatingUIDFailed_unknown=Could not calculate a serial version id for {0}. The type will be ignored.
PotentialProgrammingProblemsFix_add_id_change_name=Add Serial Version ID
PotentialProgrammingProblemsFix_calculatingUIDFailed_exception=Could not calculate serial version ids for serializable types in project {0}. The types will be ignored. Reason: {1}.
Index: plugin.xml
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/plugin.xml,v
retrieving revision 1.842
diff -u -r1.842 plugin.xml
--- plugin.xml 29 Jul 2010 09:15:47 -0000 1.842
+++ plugin.xml 16 Aug 2010 10:55:11 -0000
@@ -6597,6 +6597,11 @@
runAfter="org.eclipse.jdt.ui.cleanup.loop">
+
+
Index: ui/org/eclipse/jdt/internal/ui/fix/CorrectModifiersOrderCleanUp.java
===================================================================
RCS file: ui/org/eclipse/jdt/internal/ui/fix/CorrectModifiersOrderCleanUp.java
diff -N ui/org/eclipse/jdt/internal/ui/fix/CorrectModifiersOrderCleanUp.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ ui/org/eclipse/jdt/internal/ui/fix/CorrectModifiersOrderCleanUp.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2010 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.internal.ui.fix;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.CoreException;
+
+import org.eclipse.jdt.core.dom.CompilationUnit;
+
+import org.eclipse.jdt.internal.corext.fix.CleanUpConstants;
+import org.eclipse.jdt.internal.corext.fix.CorrectModifiersOrderFix;
+
+import org.eclipse.jdt.ui.cleanup.CleanUpContext;
+import org.eclipse.jdt.ui.cleanup.CleanUpRequirements;
+import org.eclipse.jdt.ui.cleanup.ICleanUpFix;
+
+public class CorrectModifiersOrderCleanUp extends AbstractCleanUp {
+
+ public CorrectModifiersOrderCleanUp(Map options) {
+ super(options);
+ }
+
+ public CorrectModifiersOrderCleanUp() {
+ super();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public CleanUpRequirements getRequirements() {
+ return new CleanUpRequirements(requireAST(), false, false, null);
+ }
+
+ private boolean requireAST() {
+ boolean addFinal= isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER);
+ if (!addFinal)
+ return false;
+
+ return isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_CLASSES) ||
+ isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_FIELDS) ||
+ isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_METHODS);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public ICleanUpFix createFix(CleanUpContext context) throws CoreException {
+ CompilationUnit compilationUnit= context.getAST();
+ if (compilationUnit == null)
+ return null;
+
+ boolean addFinal= isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER);
+ if (!addFinal)
+ return null;
+
+ return CorrectModifiersOrderFix.createCleanUp(compilationUnit,
+ isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_CLASSES),
+ isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_FIELDS),
+ isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_METHODS));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String[] getStepDescriptions() {
+ List result= new ArrayList();
+ if (isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER) && isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_CLASSES))
+ result.add(MultiFixMessages.VariableDeclarationCleanUp_AddFinalField_description);
+ if (isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER) && isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_FIELDS))
+ result.add(MultiFixMessages.VariableDeclarationCleanUp_AddFinalParameters_description);
+ if (isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER) && isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_METHODS))
+ result.add(MultiFixMessages.VariableDeclarationCleanUp_AddFinalLocals_description);
+
+ return (String[])result.toArray(new String[result.size()]);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getPreview() {
+ StringBuffer buf= new StringBuffer();
+
+ if (isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER) && isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_CLASSES)) {
+ buf.append("abstract public class A {\n"); //$NON-NLS-1$
+ } else {
+ buf.append("public abstract class A {\n"); //$NON-NLS-1$
+ }
+ if (isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER) && isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_FIELDS)) {
+ buf.append(" static public final int FIELD= 0;\n"); //$NON-NLS-1$
+ } else {
+ buf.append(" public static final int FIELD= 0;\n"); //$NON-NLS-1$
+ }
+ if (isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER) && isEnabled(CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_METHODS)) {
+ buf.append(" final synchronized protected void foo() {}\n"); //$NON-NLS-1$
+ } else {
+ buf.append(" synchronized protected final void foo() {}\n"); //$NON-NLS-1$
+ }
+ buf.append("}\n"); //$NON-NLS-1$
+
+ return buf.toString();
+ }
+
+}
Index: ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.java,v
retrieving revision 1.54
diff -u -r1.54 MultiFixMessages.java
--- ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.java 17 Nov 2009 07:32:57 -0000 1.54
+++ ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.java 16 Aug 2010 10:55:13 -0000
@@ -91,6 +91,10 @@
public static String VariableDeclarationCleanUp_AddFinalParameters_description;
public static String VariableDeclarationCleanUp_AddFinalLocals_description;
+ public static String VariableDeclarationCleanUp_CorrectModifiersOrderClass_description;
+ public static String VariableDeclarationCleanUp_CorrectModifiersOrderField_description;
+ public static String VariableDeclarationCleanUp_CorrectModifiersOrderMethod_description;
+
public static String CodeFormatCleanUp_description;
public static String CodeFormatFix_description;
Index: ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.properties
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.properties,v
retrieving revision 1.75
diff -u -r1.75 MultiFixMessages.properties
--- ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.properties 17 Nov 2009 07:32:57 -0000 1.75
+++ ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.properties 16 Aug 2010 10:55:13 -0000
@@ -67,6 +67,9 @@
VariableDeclarationCleanUp_AddFinalField_description=Add final modifier to private fields
VariableDeclarationCleanUp_AddFinalParameters_description=Add final modifier to method parameters
VariableDeclarationCleanUp_AddFinalLocals_description=Add final modifier to local variables
+VariableDeclarationCleanUp_CorrectModifiersOrderClass_description=Correct modifiers order to class declarations
+VariableDeclarationCleanUp_CorrectModifiersOrderField_description=Correct modifiers order to fields declarations
+VariableDeclarationCleanUp_CorrectModifiersOrderMethod_description=Correct modifiers order to methods declarations
CleanUpRefactoringWizard_CleanUpConfigurationPage_title=Clean Up Configuration
CleanUpRefactoringWizard_UnmanagedProfileWithName_Name=Unmanaged profile ''{0}''
Index: ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.java,v
retrieving revision 1.19
diff -u -r1.19 CleanUpMessages.java
--- ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.java 21 May 2010 07:30:58 -0000 1.19
+++ ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.java 16 Aug 2010 10:55:14 -0000
@@ -53,6 +53,10 @@
public static String CodeStyleTabPage_CheckboxName_UseFinalForFields;
public static String CodeStyleTabPage_CheckboxName_UseFinalForLocals;
public static String CodeStyleTabPage_CheckboxName_UseFinalForParameters;
+ public static String CodeStyleTabPage_CheckboxName_CorrectModifiersOrder;
+ public static String CodeStyleTabPage_CheckboxName_CorrectModifiersOrderClasses;
+ public static String CodeStyleTabPage_CheckboxName_CorrectModifiersOrderFields;
+ public static String CodeStyleTabPage_CheckboxName_CorrectModifiersOrderMethods;
public static String CodeStyleTabPage_CheckboxName_UseParentheses;
public static String CodeStyleTabPage_GroupName_ControlStatments;
public static String CodeStyleTabPage_GroupName_Expressions;
Index: ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.properties
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.properties,v
retrieving revision 1.26
diff -u -r1.26 CleanUpMessages.properties
--- ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.properties 20 May 2010 09:16:59 -0000 1.26
+++ ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.properties 16 Aug 2010 10:55:14 -0000
@@ -43,6 +43,10 @@
CodeStyleTabPage_GroupName_VariableDeclarations=Variable declarations
CodeStyleTabPage_CheckboxName_UseFinalForFields=Private &fields
CodeStyleTabPage_CheckboxName_UseFinalForLocals=&Local variables
+CodeStyleTabPage_CheckboxName_CorrectModifiersOrder=Correct modifiers order
+CodeStyleTabPage_CheckboxName_CorrectModifiersOrderClasses=Classes (and Enums)
+CodeStyleTabPage_CheckboxName_CorrectModifiersOrderFields=Fields
+CodeStyleTabPage_CheckboxName_CorrectModifiersOrderMethods=Methods
CodeStyleTabPage_CheckboxName_ConvertForLoopToEnhanced=Conver&t for loops to enhanced
CodeStyleTabPage_GroupName_ControlStatments=Control statements
CodeStyleTabPage_RadioName_UseBlocksSpecial=Always &except for single 'return' or 'throw' statements
Index: ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeStyleTabPage.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeStyleTabPage.java,v
retrieving revision 1.12
diff -u -r1.12 CodeStyleTabPage.java
--- ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeStyleTabPage.java 10 Oct 2008 17:27:19 -0000 1.12
+++ ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeStyleTabPage.java 16 Aug 2010 10:55:14 -0000
@@ -72,5 +72,12 @@
final CheckboxPreference useFinalParametersPref= createCheckboxPref(variableGroup, 1, CleanUpMessages.CodeStyleTabPage_CheckboxName_UseFinalForParameters, CleanUpConstants.VARIABLE_DECLARATIONS_USE_FINAL_PARAMETERS, CleanUpModifyDialog.FALSE_TRUE);
final CheckboxPreference useFinalVariablesPref= createCheckboxPref(variableGroup, 1, CleanUpMessages.CodeStyleTabPage_CheckboxName_UseFinalForLocals, CleanUpConstants.VARIABLE_DECLARATIONS_USE_FINAL_LOCAL_VARIABLES, CleanUpModifyDialog.FALSE_TRUE);
registerSlavePreference(useFinalPref, new CheckboxPreference[] {useFinalFieldsPref, useFinalParametersPref, useFinalVariablesPref});
+
+ final CheckboxPreference correctModifiersOrderPref= createCheckboxPref(variableGroup, numColumns, CleanUpMessages.CodeStyleTabPage_CheckboxName_CorrectModifiersOrder, CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER, CleanUpModifyDialog.FALSE_TRUE);
+ intent(variableGroup);
+ final CheckboxPreference correctModifiersOrderClassesPref= createCheckboxPref(variableGroup, 1, CleanUpMessages.CodeStyleTabPage_CheckboxName_CorrectModifiersOrderClasses, CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_CLASSES, CleanUpModifyDialog.FALSE_TRUE);
+ final CheckboxPreference correctModifiersOrderFieldsPref= createCheckboxPref(variableGroup, 1, CleanUpMessages.CodeStyleTabPage_CheckboxName_CorrectModifiersOrderFields, CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_FIELDS, CleanUpModifyDialog.FALSE_TRUE);
+ final CheckboxPreference correctModifiersOrderMethodsPref= createCheckboxPref(variableGroup, 1, CleanUpMessages.CodeStyleTabPage_CheckboxName_CorrectModifiersOrderMethods, CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_METHODS, CleanUpModifyDialog.FALSE_TRUE);
+ registerSlavePreference(correctModifiersOrderPref, new CheckboxPreference[] {correctModifiersOrderClassesPref, correctModifiersOrderFieldsPref, correctModifiersOrderMethodsPref});
}
}
Index: ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java,v
retrieving revision 1.163
diff -u -r1.163 QuickAssistProcessor.java
--- ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java 13 Jul 2010 17:32:48 -0000 1.163
+++ ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java 16 Aug 2010 10:55:15 -0000
@@ -115,6 +115,7 @@
import org.eclipse.jdt.internal.corext.fix.CleanUpConstants;
import org.eclipse.jdt.internal.corext.fix.ControlStatementsFix;
import org.eclipse.jdt.internal.corext.fix.ConvertLoopFix;
+import org.eclipse.jdt.internal.corext.fix.CorrectModifiersOrderFix;
import org.eclipse.jdt.internal.corext.fix.IProposableFix;
import org.eclipse.jdt.internal.corext.fix.LinkedProposalModel;
import org.eclipse.jdt.internal.corext.fix.VariableDeclarationFix;
@@ -139,6 +140,7 @@
import org.eclipse.jdt.internal.ui.JavaPluginImages;
import org.eclipse.jdt.internal.ui.fix.ControlStatementsCleanUp;
import org.eclipse.jdt.internal.ui.fix.ConvertLoopCleanUp;
+import org.eclipse.jdt.internal.ui.fix.CorrectModifiersOrderCleanUp;
import org.eclipse.jdt.internal.ui.fix.VariableDeclarationCleanUp;
import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
import org.eclipse.jdt.internal.ui.text.correction.proposals.ASTRewriteCorrectionProposal;
@@ -201,6 +203,7 @@
|| getConvertIterableLoopProposal(context, coveringNode, null)
|| getRemoveBlockProposals(context, coveringNode, null)
|| getMakeVariableDeclarationFinalProposals(context, null)
+ || getCorrectModifiersOrderProposals(context, null)
|| getMissingCaseStatementProposals(context, coveringNode, null)
|| getConvertStringConcatenationProposals(context, null);
}
@@ -239,6 +242,7 @@
getConvertIterableLoopProposal(context, coveringNode, resultingCollections);
getRemoveBlockProposals(context, coveringNode, resultingCollections);
getMakeVariableDeclarationFinalProposals(context, resultingCollections);
+ getCorrectModifiersOrderProposals(context, resultingCollections);
getConvertStringConcatenationProposals(context, resultingCollections);
getMissingCaseStatementProposals(context, coveringNode, resultingCollections);
}
@@ -1872,6 +1876,32 @@
resultingCollections.add(proposal);
return true;
}
+
+ private static boolean getCorrectModifiersOrderProposals(IInvocationContext context, Collection resultingCollections) {
+ SelectionAnalyzer analyzer= new SelectionAnalyzer(Selection.createFromStartLength(context.getSelectionOffset(), context.getSelectionLength()), false);
+ context.getASTRoot().accept(analyzer);
+ ASTNode[] selectedNodes= analyzer.getSelectedNodes();
+ if (selectedNodes.length == 0)
+ return false;
+
+ IProposableFix fix= CorrectModifiersOrderFix.createFix(context.getASTRoot(), selectedNodes);
+ if (fix == null)
+ return false;
+
+ if (resultingCollections == null)
+ return true;
+
+ Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
+ Map options= new Hashtable();
+ options.put(CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER, CleanUpOptions.TRUE);
+ options.put(CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_CLASSES, CleanUpOptions.TRUE);
+ options.put(CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_FIELDS, CleanUpOptions.TRUE);
+ options.put(CleanUpConstants.VARIABLE_DECLARATIONS_CORRECT_MODIFIERS_ORDER_METHODS, CleanUpOptions.TRUE);
+ CorrectModifiersOrderCleanUp cleanUp= new CorrectModifiersOrderCleanUp(options);
+ FixCorrectionProposal proposal= new FixCorrectionProposal(fix, cleanUp, 5, image, context);
+ resultingCollections.add(proposal);
+ return true;
+ }
private static boolean getInlineLocalProposal(IInvocationContext context, final ASTNode node, Collection proposals) throws CoreException {
if (!(node instanceof SimpleName))