enable can be final checkbox for introduce parameter

This commit is contained in:
anna
2011-05-16 12:05:24 +04:00
parent e6d6fb8c68
commit bde983aee7
4 changed files with 63 additions and 22 deletions
@@ -225,7 +225,7 @@ public abstract class IntroduceFieldCentralPanel {
}
protected boolean allowFinal() {
return !myHasWriteAccess;
return !myHasWriteAccess && isReplaceAllOccurrences();
}
public void addOccurrenceListener(ItemListener itemListener) {
@@ -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);
}
}
@@ -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();
}
}
}
@@ -74,8 +74,10 @@ public class VariableInplaceIntroducer extends VariableInplaceRenamer {
private final List<RangeMarker> 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);