mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
enable can be final checkbox for introduce parameter
This commit is contained in:
+1
-1
@@ -225,7 +225,7 @@ public abstract class IntroduceFieldCentralPanel {
|
||||
}
|
||||
|
||||
protected boolean allowFinal() {
|
||||
return !myHasWriteAccess;
|
||||
return !myHasWriteAccess && isReplaceAllOccurrences();
|
||||
}
|
||||
|
||||
public void addOccurrenceListener(ItemListener itemListener) {
|
||||
|
||||
+33
-12
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
+15
-1
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+14
-8
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user