Bug 565630 - Add "Optimize" tab to JDT cleanup actions

Change-Id: I208e378edc9e6bb4fe0d675af2b0169ed6ed8203
Signed-off-by: Fabrice Tiercelin <fabrice.tiercelin@yahoo.fr>
diff --git a/org.eclipse.jdt.ui/plugin.properties b/org.eclipse.jdt.ui/plugin.properties
index 399dd50..4580ab5 100644
--- a/org.eclipse.jdt.ui/plugin.properties
+++ b/org.eclipse.jdt.ui/plugin.properties
@@ -1210,6 +1210,7 @@
 
 #--- Clean Up ---
 CleanUpTabPage.CodeStyle.name = &Code Style
+CleanUpTabPage.Optimization.name = O&ptimization
 CleanUpTabPage.MemberAccesses.name = Membe&r Accesses
 CleanUpTabPage.UnnecessaryCode.name = &Unnecessary Code
 CleanUpTabPage.MissingCode.name = &Missing Code
diff --git a/org.eclipse.jdt.ui/plugin.xml b/org.eclipse.jdt.ui/plugin.xml
index ff42ed6..de8e8f3 100644
--- a/org.eclipse.jdt.ui/plugin.xml
+++ b/org.eclipse.jdt.ui/plugin.xml
@@ -6976,6 +6976,11 @@
             cleanUpKind="cleanUp">
       </cleanUpConfigurationUI>
       <cleanUpConfigurationUI
+            class="org.eclipse.jdt.internal.ui.preferences.cleanup.OptimizationTabPage"
+            name="%CleanUpTabPage.Optimization.name"
+            cleanUpKind="cleanUp">
+      </cleanUpConfigurationUI>
+      <cleanUpConfigurationUI
             class="org.eclipse.jdt.internal.ui.preferences.cleanup.MemberAccessesTabPage"
             name="%CleanUpTabPage.MemberAccesses.name"
             cleanUpKind="cleanUp">
@@ -7002,6 +7007,11 @@
             cleanUpKind="saveAction">
       </cleanUpConfigurationUI>
       <cleanUpConfigurationUI
+            class="org.eclipse.jdt.internal.ui.preferences.cleanup.OptimizationTabPage"
+            name="%CleanUpTabPage.Optimization.name"
+            cleanUpKind="saveAction">
+      </cleanUpConfigurationUI>
+      <cleanUpConfigurationUI
             class="org.eclipse.jdt.internal.ui.preferences.cleanup.MemberAccessesTabPage"
             name="%CleanUpTabPage.MemberAccesses.name"
             cleanUpKind="saveAction">
@@ -7071,9 +7081,14 @@
             runAfter="org.eclipse.jdt.ui.cleanup.expressions">
       </cleanUp>
       <cleanUp
+            class="org.eclipse.jdt.internal.ui.fix.NumberSuffixCleanUp"
+            id="org.eclipse.jdt.ui.cleanup.number_suffix"
+            runAfter="org.eclipse.jdt.ui.cleanup.lambda_and_method_ref">
+      </cleanUp>
+      <cleanUp
             class="org.eclipse.jdt.internal.ui.fix.LazyLogicalCleanUp"
             id="org.eclipse.jdt.ui.cleanup.lazy_logical"
-            runAfter="org.eclipse.jdt.ui.cleanup.lambda_and_method_ref">
+            runAfter="org.eclipse.jdt.ui.cleanup.number_suffix">
       </cleanUp>
       <cleanUp
             class="org.eclipse.jdt.internal.ui.fix.PatternCleanUp"
@@ -7081,14 +7096,9 @@
             runAfter="org.eclipse.jdt.ui.cleanup.lazy_logical">
       </cleanUp>
       <cleanUp
-            class="org.eclipse.jdt.internal.ui.fix.NumberSuffixCleanUp"
-            id="org.eclipse.jdt.ui.cleanup.number_suffix"
-            runAfter="org.eclipse.jdt.ui.cleanup.precompile_regex">
-      </cleanUp>
-      <cleanUp
             class="org.eclipse.jdt.internal.ui.fix.UnusedCodeCleanUp"
             id="org.eclipse.jdt.ui.cleanup.unused_code"
-            runAfter="org.eclipse.jdt.ui.cleanup.number_suffix">
+            runAfter="org.eclipse.jdt.ui.cleanup.precompile_regex">
       </cleanUp>
       <cleanUp
             class="org.eclipse.jdt.internal.ui.fix.Java50CleanUp"
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.java
index c80779b..0490ad3 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.java
@@ -74,7 +74,6 @@
 	public static String CodeStyleTabPage_RadioName_NeverUseBlocks;
 	public static String CodeStyleTabPage_RadioName_NeverUseParantheses;
 
-	public static String CodeStyleTabPage_CheckboxName_UseLazyLogicalOperator;
 	public static String CodeStyleTabPage_RadioName_UseBlocksSpecial;
 
 	public static String CodeStyleTabPage_GroupName_FunctionalInterfaces;
@@ -83,9 +82,10 @@
 	public static String CodeStyleTabPage_RadioName_UseAnonymous;
 	public static String CodeStyleTabPage_CheckboxName_SimplifyLambdaExpressionAndMethodRefSyntax;
 
-	public static String CodeStyleTabPage_GroupName_Optimization;
+	public static String OptimizationTabPage_GroupName_Optimization;
 
-	public static String CodeStyleTabPage_CheckboxName_PrecompileRegEx;
+	public static String OptimizationTabPage_CheckboxName_UseLazyLogicalOperator;
+	public static String OptimizationTabPage_CheckboxName_PrecompileRegEx;
 
 	public static String ContributedCleanUpTabPage_ErrorPage_message;
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.properties b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.properties
index dc4ab34..d57fe00 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.properties
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.properties
@@ -54,14 +54,15 @@
 CodeStyleTabPage_GroupName_ControlStatments=Control statements
 CodeStyleTabPage_RadioName_UseBlocksSpecial=Always &except for single 'return' or 'throw' statements
 CodeStyleTabPage_CheckboxName_UseParentheses=Use parent&heses in expressions
-CodeStyleTabPage_CheckboxName_UseLazyLogicalOperator=Use la&zy logical operator
 CodeStyleTabPage_GroupName_FunctionalInterfaces=Functional interface instances
 CodeStyleTabPage_CheckboxName_ConvertFunctionalInterfaces=Con&vert functional interface instances
 CodeStyleTabPage_RadioName_UseLambdaWherePossible=Use lambda where possible
 CodeStyleTabPage_CheckboxName_SimplifyLambdaExpressionAndMethodRefSyntax=Simplify &lambda expression and method reference syntax
 CodeStyleTabPage_RadioName_UseAnonymous=Use anonymous class
-CodeStyleTabPage_GroupName_Optimization=Optimization
-CodeStyleTabPage_CheckboxName_PrecompileRegEx=Precompile reused regular e&xpressions
+
+OptimizationTabPage_GroupName_Optimization=Optimization
+OptimizationTabPage_CheckboxName_UseLazyLogicalOperator=Use la&zy logical operator
+OptimizationTabPage_CheckboxName_PrecompileRegEx=Precompile reused regular e&xpressions
 
 ContributedCleanUpTabPage_ErrorPage_message=An error occurred while creating this page. See the error log for details
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeStyleTabPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeStyleTabPage.java
index a3e6979..0c9ee2a 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeStyleTabPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeStyleTabPage.java
@@ -26,10 +26,8 @@
 import org.eclipse.jdt.internal.ui.fix.ExpressionsCleanUp;
 import org.eclipse.jdt.internal.ui.fix.LambdaExpressionAndMethodRefCleanUp;
 import org.eclipse.jdt.internal.ui.fix.LambdaExpressionsCleanUp;
-import org.eclipse.jdt.internal.ui.fix.LazyLogicalCleanUp;
 import org.eclipse.jdt.internal.ui.fix.NumberSuffixCleanUp;
 import org.eclipse.jdt.internal.ui.fix.VarCleanUp;
-import org.eclipse.jdt.internal.ui.fix.PatternCleanUp;
 import org.eclipse.jdt.internal.ui.fix.VariableDeclarationCleanUp;
 
 public final class CodeStyleTabPage extends AbstractCleanUpTabPage {
@@ -42,12 +40,10 @@
 				new ConvertLoopCleanUp(values),
 				new ExpressionsCleanUp(values),
 				new NumberSuffixCleanUp(values),
-				new LazyLogicalCleanUp(values),
 				new VariableDeclarationCleanUp(values),
 				new VarCleanUp(values),
 				new LambdaExpressionsCleanUp(values),
-				new LambdaExpressionAndMethodRefCleanUp(values),
-				new PatternCleanUp(values)
+				new LambdaExpressionAndMethodRefCleanUp(values)
 		};
 	}
 
@@ -77,9 +73,6 @@
 		final RadioPreference useParenthesesAlwaysPref= createRadioPref(expressionsGroup, 1, CleanUpMessages.CodeStyleTabPage_RadioName_AlwaysUseParantheses, CleanUpConstants.EXPRESSIONS_USE_PARENTHESES_ALWAYS, CleanUpModifyDialog.FALSE_TRUE);
 		final RadioPreference useParenthesesNeverPref= createRadioPref(expressionsGroup, 1, CleanUpMessages.CodeStyleTabPage_RadioName_NeverUseParantheses, CleanUpConstants.EXPRESSIONS_USE_PARENTHESES_NEVER, CleanUpModifyDialog.FALSE_TRUE);
 		registerSlavePreference(useParenthesesPref, new RadioPreference[] {useParenthesesAlwaysPref, useParenthesesNeverPref});
-		final CheckboxPreference useLazyLogicalPref= createCheckboxPref(expressionsGroup, numColumns, CleanUpMessages.CodeStyleTabPage_CheckboxName_UseLazyLogicalOperator,
-				CleanUpConstants.USE_LAZY_LOGICAL_OPERATOR, CleanUpModifyDialog.FALSE_TRUE);
-		registerPreference(useLazyLogicalPref);
 
 		Group numberSuffixGroup= createGroup(numColumns, composite, CleanUpMessages.CodeStyleTabPage_GroupName_NumberLiteral);
 
@@ -109,11 +102,5 @@
 
 		CheckboxPreference simplifyLambdaExpressionAndMethodRef= createCheckboxPref(functionalInterfacesGroup, numColumns, CleanUpMessages.CodeStyleTabPage_CheckboxName_SimplifyLambdaExpressionAndMethodRefSyntax, CleanUpConstants.SIMPLIFY_LAMBDA_EXPRESSION_AND_METHOD_REF, CleanUpModifyDialog.FALSE_TRUE);
 		registerPreference(simplifyLambdaExpressionAndMethodRef);
-
-		Group optimizationGroup= createGroup(numColumns, composite, CleanUpMessages.CodeStyleTabPage_GroupName_Optimization);
-
-		final CheckboxPreference precompileRegExPref= createCheckboxPref(optimizationGroup, numColumns, CleanUpMessages.CodeStyleTabPage_CheckboxName_PrecompileRegEx, CleanUpConstants.PRECOMPILE_REGEX,
-				CleanUpModifyDialog.FALSE_TRUE);
-		registerPreference(precompileRegExPref);
 	}
 }
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/OptimizationTabPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/OptimizationTabPage.java
new file mode 100644
index 0000000..223d63f
--- /dev/null
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/OptimizationTabPage.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2020 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.internal.ui.preferences.cleanup;
+
+import java.util.Map;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+
+import org.eclipse.jdt.internal.corext.fix.CleanUpConstants;
+
+import org.eclipse.jdt.internal.ui.fix.AbstractCleanUp;
+import org.eclipse.jdt.internal.ui.fix.LazyLogicalCleanUp;
+import org.eclipse.jdt.internal.ui.fix.PatternCleanUp;
+
+public final class OptimizationTabPage extends AbstractCleanUpTabPage {
+	public static final String ID= "org.eclipse.jdt.ui.cleanup.tabpage.optimization"; //$NON-NLS-1$
+
+	@Override
+	protected AbstractCleanUp[] createPreviewCleanUps(Map<String, String> values) {
+		return new AbstractCleanUp[] {
+				new LazyLogicalCleanUp(values),
+				new PatternCleanUp(values)
+		};
+	}
+
+	@Override
+	protected void doCreatePreferences(Composite composite, int numColumns) {
+		Group optimizationGroup= createGroup(numColumns, composite, CleanUpMessages.OptimizationTabPage_GroupName_Optimization);
+
+		final CheckboxPreference useLazyLogicalPref= createCheckboxPref(optimizationGroup, numColumns, CleanUpMessages.OptimizationTabPage_CheckboxName_UseLazyLogicalOperator,
+				CleanUpConstants.USE_LAZY_LOGICAL_OPERATOR, CleanUpModifyDialog.FALSE_TRUE);
+		registerPreference(useLazyLogicalPref);
+
+		final CheckboxPreference precompileRegExPref= createCheckboxPref(optimizationGroup, numColumns, CleanUpMessages.OptimizationTabPage_CheckboxName_PrecompileRegEx, CleanUpConstants.PRECOMPILE_REGEX,
+				CleanUpModifyDialog.FALSE_TRUE);
+		registerPreference(precompileRegExPref);
+	}
+}