From bde983aee779125060ca8d5767f4bed42c139a39 Mon Sep 17 00:00:00 2001 From: anna Date: Mon, 16 May 2011 11:22:44 +0400 Subject: [PATCH] enable can be final checkbox for introduce parameter --- .../IntroduceFieldCentralPanel.java | 2 +- .../InplaceIntroduceParameterPopup.java | 45 ++++++++++++++----- .../IntroduceParameterDialog.java | 16 ++++++- .../VariableInplaceIntroducer.java | 22 +++++---- 4 files changed, 63 insertions(+), 22 deletions(-) diff --git a/java/java-impl/src/com/intellij/refactoring/introduceField/IntroduceFieldCentralPanel.java b/java/java-impl/src/com/intellij/refactoring/introduceField/IntroduceFieldCentralPanel.java index e6bda8bfcfd6..a0ab80afe925 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceField/IntroduceFieldCentralPanel.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceField/IntroduceFieldCentralPanel.java @@ -225,7 +225,7 @@ public abstract class IntroduceFieldCentralPanel { } protected boolean allowFinal() { - return !myHasWriteAccess; + return !myHasWriteAccess && isReplaceAllOccurrences(); } public void addOccurrenceListener(ItemListener itemListener) { diff --git a/java/java-impl/src/com/intellij/refactoring/introduceParameter/InplaceIntroduceParameterPopup.java b/java/java-impl/src/com/intellij/refactoring/introduceParameter/InplaceIntroduceParameterPopup.java index 2bc3a08d026c..72c32df0e0af 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceParameter/InplaceIntroduceParameterPopup.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceParameter/InplaceIntroduceParameterPopup.java @@ -36,12 +36,13 @@ import com.intellij.psi.util.PsiUtil; import com.intellij.refactoring.IntroduceParameterRefactoring; import com.intellij.refactoring.JavaRefactoringSettings; import com.intellij.refactoring.RefactoringBundle; +import com.intellij.refactoring.inline.InlineParameterHandler; import com.intellij.refactoring.introduceField.InplaceIntroduceConstantPopup; import com.intellij.refactoring.rename.inplace.VariableInplaceRenamer; import com.intellij.refactoring.ui.TypeSelectorManager; import com.intellij.refactoring.ui.TypeSelectorManagerImpl; import com.intellij.ui.IdeBorderFactory; -import com.intellij.ui.TitlePanel; +import com.intellij.ui.NonFocusableCheckBox; import com.intellij.usageView.UsageInfo; import com.intellij.util.ui.UIUtil; import gnu.trove.TIntArrayList; @@ -50,6 +51,8 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.util.*; import java.util.List; @@ -80,6 +83,7 @@ class InplaceIntroduceParameterPopup extends IntroduceParameterSettingsUI { private boolean myInitialized = false; private static final Logger LOG = Logger.getInstance("#" + InplaceIntroduceParameterPopup.class.getName()); + private JCheckBox myFinalCb; private boolean myHasWriteAccess = false; InplaceIntroduceParameterPopup(final Project project, @@ -144,6 +148,14 @@ class InplaceIntroduceParameterPopup extends IntroduceParameterSettingsUI { break; } } + + if (!myMustBeFinal) { + myFinalCb = new NonFocusableCheckBox("Declare final"); + myFinalCb.setMnemonic('f'); + myWholePanel.add(myFinalCb, + new GridBagConstraints(0, myCbReplaceAllOccurences == null ? 2 : 3, 1, 1, 0, 0, GridBagConstraints.NORTHWEST, + GridBagConstraints.NONE, new Insets(0, 5, 2, 5), 0, 0)); + } } @@ -257,14 +269,15 @@ class InplaceIntroduceParameterPopup extends IntroduceParameterSettingsUI { protected JComponent getComponent() { if (!myInitialized) { myInitialized = true; - if (myCanBeFinalCb != null) { - myWholePanel.add(myCanBeFinalCb, - new GridBagConstraints(0, myCbReplaceAllOccurences == null ? 2 : 3, 1, 1, 0, 0, GridBagConstraints.NORTHWEST, - GridBagConstraints.NONE, new Insets(0, 5, 2, 5), 0, 0)); - if (myHasWriteAccess) { - myCanBeFinalCb.setSelected(false); - myCanBeFinalCb.setEnabled(false); - } + if (myFinalCb != null) { + myFinalCb.setSelected(createFinals()); + final FinalListener finalListener = new FinalListener(myProject, InlineParameterHandler.REFACTORING_NAME); + myFinalCb.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + finalListener.perform(myFinalCb.isSelected()); + } + }); } } return myWholePanel; @@ -300,7 +313,7 @@ class InplaceIntroduceParameterPopup extends IntroduceParameterSettingsUI { protected void saveSettings(PsiVariable psiVariable) { final JavaRefactoringSettings settings = JavaRefactoringSettings.getInstance(); InplaceIntroduceParameterPopup.super.saveSettings(settings); - if (myCanBeFinalCb != null && myCanBeFinalCb.isEnabled()) { + if (myFinalCb != null && myFinalCb.isEnabled()) { settings.INTRODUCE_PARAMETER_CREATE_FINALS = psiVariable.hasModifierProperty(PsiModifier.FINAL); } TypeSelectorManagerImpl.typeSelected(psiVariable.getType(), myDefaultParameterTypePointer.getType()); @@ -426,19 +439,27 @@ class InplaceIntroduceParameterPopup extends IntroduceParameterSettingsUI { protected void updateControls(JCheckBox[] removeParamsCb) { super.updateControls(removeParamsCb); if (myParameterIndex < 0) return; + final boolean writeUsageWouldBeReplaced = myHasWriteAccess && isReplaceAllOccurences(); Runnable restartTemplateRunnable = new Runnable() { public void run() { final TemplateState templateState = TemplateManagerImpl.getTemplateState(myEditor); if (templateState != null) { PsiDocumentManager.getInstance(myProject).commitDocument(myEditor.getDocument()); final PsiParameter parameter = getParameter(); - final boolean hasFinalModifier = parameter.hasModifierProperty(PsiModifier.FINAL); + boolean hasFinalModifier = parameter.hasModifierProperty(PsiModifier.FINAL) && !writeUsageWouldBeReplaced; templateState.gotoEnd(true); startIntroduceTemplate(isReplaceAllOccurences(), hasFinalModifier); } } }; - CommandProcessor.getInstance().executeCommand(myProject, restartTemplateRunnable, IntroduceParameterHandler.REFACTORING_NAME, IntroduceParameterHandler.REFACTORING_NAME); + CommandProcessor.getInstance().executeCommand(myProject, restartTemplateRunnable, IntroduceParameterHandler.REFACTORING_NAME, + IntroduceParameterHandler.REFACTORING_NAME); + if (myFinalCb != null) { + if (writeUsageWouldBeReplaced) { + myFinalCb.setSelected(false); + } + myFinalCb.setEnabled(!writeUsageWouldBeReplaced); + } } diff --git a/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterDialog.java b/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterDialog.java index 27abe8610e46..8a001a629d41 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterDialog.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterDialog.java @@ -217,7 +217,7 @@ public class IntroduceParameterDialog extends RefactoringDialog { if (myMustBeFinal) { myCbDeclareFinal.setSelected(true); myCbDeclareFinal.setEnabled(false); - } else if (myHasWriteAccess) { + } else if (myHasWriteAccess && myPanel.isReplaceAllOccurences()) { myCbDeclareFinal.setSelected(false); myCbDeclareFinal.setEnabled(false); } @@ -269,6 +269,15 @@ public class IntroduceParameterDialog extends RefactoringDialog { } + private void updateFinalState() { + if (myHasWriteAccess && myCbDeclareFinal != null) { + myCbDeclareFinal.setEnabled(!myPanel.isReplaceAllOccurences()); + if (myPanel.isReplaceAllOccurences()) { + myCbDeclareFinal.setSelected(false); + } + } + } + @Override protected void canRun() throws ConfigurationException { String name = getParameterName(); @@ -290,5 +299,10 @@ public class IntroduceParameterDialog extends RefactoringDialog { protected TypeSelectorManager getTypeSelectionManager() { return myTypeSelectorManager; } + @Override + protected void updateControls(JCheckBox[] removeParamsCb) { + super.updateControls(removeParamsCb); + updateFinalState(); + } } } diff --git a/java/java-impl/src/com/intellij/refactoring/introduceVariable/VariableInplaceIntroducer.java b/java/java-impl/src/com/intellij/refactoring/introduceVariable/VariableInplaceIntroducer.java index 5cddf59d6f00..fb50f2d1c0ce 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceVariable/VariableInplaceIntroducer.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceVariable/VariableInplaceIntroducer.java @@ -74,8 +74,10 @@ public class VariableInplaceIntroducer extends VariableInplaceRenamer { private final List myOccurrenceMarkers; private final SmartTypePointer myDefaultType; - protected JCheckBox myCanBeFinalCb; + private JCheckBox myCanBeFinalCb; private Balloon myBalloon; + private boolean myCantChangeFinalModifier; + private String myCommandName; private String myTitle; public VariableInplaceIntroducer(final Project project, @@ -93,6 +95,8 @@ public class VariableInplaceIntroducer extends VariableInplaceRenamer { myEditor = editor; myElementToRename = elementToRename; myExpression = expression; + myCantChangeFinalModifier = cantChangeFinalModifier; + myCommandName = commandName; myTitle = title; myExprMarker = exprMarker; @@ -107,12 +111,7 @@ public class VariableInplaceIntroducer extends VariableInplaceRenamer { editor.putUserData(ReassignVariableUtil.OCCURRENCES_KEY, occurrenceMarkers.toArray(new RangeMarker[occurrenceMarkers.size()])); setAdvertisementText(getAdvertisementText(declarationStatement, defaultType, hasTypeSuggestion)); - if (!cantChangeFinalModifier) { - myCanBeFinalCb = new NonFocusableCheckBox("Declare final"); - myCanBeFinalCb.setSelected(createFinals()); - myCanBeFinalCb.setMnemonic('f'); - myCanBeFinalCb.addActionListener(new FinalListener(project, commandName)); - } + } @Override @@ -243,7 +242,14 @@ public class VariableInplaceIntroducer extends VariableInplaceRenamer { @Nullable protected JComponent getComponent() { - if (myCanBeFinalCb == null) return null; + if (!myCantChangeFinalModifier) { + myCanBeFinalCb = new NonFocusableCheckBox("Declare final"); + myCanBeFinalCb.setSelected(createFinals()); + myCanBeFinalCb.setMnemonic('f'); + myCanBeFinalCb.addActionListener(new FinalListener(myProject, myCommandName)); + } else { + return null; + } final JPanel panel = new JPanel(new GridBagLayout()); panel.setBorder(null);