mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
move propagation buttons to actions
This commit is contained in:
+102
-107
@@ -15,6 +15,8 @@
|
||||
*/
|
||||
package com.intellij.refactoring.changeSignature;
|
||||
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.actionSystem.KeyboardShortcut;
|
||||
import com.intellij.openapi.fileTypes.LanguageFileType;
|
||||
import com.intellij.openapi.fileTypes.StdFileTypes;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -26,19 +28,19 @@ import com.intellij.psi.*;
|
||||
import com.intellij.refactoring.BaseRefactoringProcessor;
|
||||
import com.intellij.refactoring.RefactoringBundle;
|
||||
import com.intellij.refactoring.changeSignature.inCallers.JavaCallerChooser;
|
||||
import com.intellij.refactoring.ui.CodeFragmentTableCellRenderer;
|
||||
import com.intellij.refactoring.ui.JavaCodeFragmentTableCellEditor;
|
||||
import com.intellij.refactoring.ui.JavaComboBoxVisibilityPanel;
|
||||
import com.intellij.refactoring.ui.VisibilityPanelBase;
|
||||
import com.intellij.refactoring.ui.*;
|
||||
import com.intellij.refactoring.util.CanonicalTypes;
|
||||
import com.intellij.refactoring.util.RefactoringMessageUtil;
|
||||
import com.intellij.refactoring.util.RefactoringUtil;
|
||||
import com.intellij.ui.EditableRowTable;
|
||||
import com.intellij.ui.IdeBorderFactory;
|
||||
import com.intellij.ui.ScrollPaneFactory;
|
||||
import com.intellij.ui.table.JBTable;
|
||||
import com.intellij.ui.treeStructure.Tree;
|
||||
import com.intellij.util.*;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.PlatformIcons;
|
||||
import com.intellij.util.VisibilityUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -46,32 +48,28 @@ import javax.swing.*;
|
||||
import javax.swing.event.TableModelEvent;
|
||||
import javax.swing.event.TableModelListener;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class JavaChangeSignatureDialog extends ChangeSignatureDialogBase<ParameterInfoImpl, PsiMethod, JavaMethodDescriptor> {
|
||||
import static com.intellij.refactoring.changeSignature.ChangeSignatureHandler.REFACTORING_NAME;
|
||||
|
||||
private ExceptionsTableModel myExceptionsTableModel;
|
||||
/**
|
||||
* @author Konstantin Bulenkov
|
||||
*/
|
||||
public class JavaChangeSignatureDialog extends ChangeSignatureDialogBase<ParameterInfoImpl, PsiMethod, JavaMethodDescriptor> {
|
||||
private ExceptionsTableModel myExceptionsModel;
|
||||
protected Set<PsiMethod> myMethodsToPropagateExceptions;
|
||||
private JButton myPropagateExnChangesButton;
|
||||
private AnActionButton myPropExceptionsButton;
|
||||
private Tree myExceptionPropagationTree;
|
||||
|
||||
public JavaChangeSignatureDialog(Project project,
|
||||
final PsiMethod method,
|
||||
boolean allowDelegation,
|
||||
PsiElement defaultValueContext) {
|
||||
this(project, new JavaMethodDescriptor(method), allowDelegation, defaultValueContext);
|
||||
public JavaChangeSignatureDialog(Project project, PsiMethod method, boolean allowDelegation, PsiElement context) {
|
||||
this(project, new JavaMethodDescriptor(method), allowDelegation, context);
|
||||
}
|
||||
|
||||
protected JavaChangeSignatureDialog(Project project,
|
||||
final JavaMethodDescriptor methodDescriptor,
|
||||
boolean allowDelegation,
|
||||
PsiElement defaultValueContext) {
|
||||
super(project, methodDescriptor, allowDelegation, defaultValueContext);
|
||||
protected JavaChangeSignatureDialog(Project project, JavaMethodDescriptor descriptor, boolean allowDelegation, PsiElement context) {
|
||||
super(project, descriptor, allowDelegation, context);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -82,9 +80,53 @@ public class JavaChangeSignatureDialog extends ChangeSignatureDialogBase<Paramet
|
||||
@Override
|
||||
protected JComponent createCenterPanel() {
|
||||
final JComponent centerPanel = super.createCenterPanel();
|
||||
myPropagateExnChangesButton = new JButton(RefactoringBundle.message("changeSignature.propagate.exceptions.title"));
|
||||
myPropagateExnChangesButton.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
myPropagateParamChangesButton.setVisible(true);
|
||||
return centerPanel;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updatePropagateButtons() {
|
||||
super.updatePropagateButtons();
|
||||
myPropExceptionsButton.setEnabled(!isGenerateDelegate() && mayPropagateExceptions());
|
||||
}
|
||||
|
||||
protected boolean mayPropagateExceptions() {
|
||||
final ThrownExceptionInfo[] thrownExceptions = myExceptionsModel.getThrownExceptions();
|
||||
final PsiClassType[] types = myMethod.getMethod().getThrowsList().getReferencedTypes();
|
||||
if (thrownExceptions.length <= types.length) return false;
|
||||
for (int i = 0; i < types.length; i++) {
|
||||
if (thrownExceptions[i].getOldIndex() != i) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
protected List<Pair<String,JPanel>> createAdditionalPanels() {
|
||||
// this method is invoked before constructor body
|
||||
myExceptionsModel = new ExceptionsTableModel(myMethod.getMethod().getThrowsList());
|
||||
myExceptionsModel.setTypeInfos(myMethod.getMethod());
|
||||
|
||||
final JBTable table = new JBTable(myExceptionsModel);
|
||||
table.getColumnModel().getColumn(0).setCellRenderer(new CodeFragmentTableCellRenderer(myProject));
|
||||
table.getColumnModel().getColumn(0).setCellEditor(new JavaCodeFragmentTableCellEditor(myProject));
|
||||
final JPanel panel = new JPanel(new BorderLayout());
|
||||
panel.setBorder(IdeBorderFactory.createTitledBorder(RefactoringBundle.message("changeSignature.exceptions.panel.border.title")));
|
||||
final JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(table);
|
||||
final JPanel tablePanel = new JPanel(new BorderLayout());
|
||||
tablePanel.add(scrollPane, BorderLayout.CENTER);
|
||||
|
||||
tablePanel.setBorder(IdeBorderFactory.createEmptyBorder(4));
|
||||
panel.add(tablePanel, BorderLayout.CENTER);
|
||||
|
||||
table.setPreferredScrollableViewportSize(new Dimension(450, table.getRowHeight() * 8));
|
||||
table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
table.getSelectionModel().setSelectionInterval(0, 0);
|
||||
table.setSurrendersFocusOnKeystroke(true);
|
||||
|
||||
myPropExceptionsButton = new AnActionButton(RefactoringBundle.message("changeSignature.propagate.exceptions.title"), null,
|
||||
PlatformIcons.EXCEPTION_CLASS_ICON) {
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
final Ref<JavaCallerChooser> chooser = new Ref<JavaCallerChooser>();
|
||||
Consumer<Set<PsiMethod>> callback = new Consumer<Set<PsiMethod>>() {
|
||||
@Override
|
||||
@@ -98,64 +140,20 @@ public class JavaChangeSignatureDialog extends ChangeSignatureDialogBase<Paramet
|
||||
myExceptionPropagationTree, callback));
|
||||
chooser.get().show();
|
||||
}
|
||||
});
|
||||
myPropagatePanel.add(myPropagateExnChangesButton);
|
||||
};
|
||||
myPropExceptionsButton.setShortcut(KeyboardShortcut.fromString("alt X"));
|
||||
|
||||
return centerPanel;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updatePropagateButtons() {
|
||||
super.updatePropagateButtons();
|
||||
myPropagateExnChangesButton.setEnabled(!isGenerateDelegate() && mayPropagateExceptions());
|
||||
}
|
||||
|
||||
private boolean mayPropagateExceptions() {
|
||||
final ThrownExceptionInfo[] thrownExceptions = myExceptionsTableModel.getThrownExceptions();
|
||||
final PsiClassType[] types = myMethod.getMethod().getThrowsList().getReferencedTypes();
|
||||
if (thrownExceptions.length <= types.length) return false;
|
||||
for (int i = 0; i < types.length; i++) {
|
||||
if (thrownExceptions[i].getOldIndex() != i) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
protected List<Pair<String,JPanel>> createAdditionalPanels() {
|
||||
// this method is invoked before constuctor body
|
||||
myExceptionsTableModel = new ExceptionsTableModel(myMethod.getMethod().getThrowsList());
|
||||
myExceptionsTableModel.setTypeInfos(myMethod.getMethod());
|
||||
|
||||
JBTable exceptionsTable = new JBTable(myExceptionsTableModel);
|
||||
exceptionsTable.getColumnModel().getColumn(0).setCellRenderer(new CodeFragmentTableCellRenderer(myProject));
|
||||
exceptionsTable.getColumnModel().getColumn(0).setCellEditor(new JavaCodeFragmentTableCellEditor(myProject));
|
||||
JPanel panel = new JPanel(new BorderLayout());
|
||||
//panel.setBorder(IdeBorderFactory.createTitledBorder(RefactoringBundle.message("changeSignature.exceptions.panel.border.title")));
|
||||
|
||||
JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(exceptionsTable);
|
||||
|
||||
JPanel tablePanel = new JPanel(new BorderLayout());
|
||||
tablePanel.add(scrollPane, BorderLayout.CENTER);
|
||||
|
||||
tablePanel.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
|
||||
panel.add(tablePanel, BorderLayout.CENTER);
|
||||
|
||||
exceptionsTable.setPreferredScrollableViewportSize(new Dimension(450, exceptionsTable.getRowHeight() * 8));
|
||||
exceptionsTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
exceptionsTable.getSelectionModel().setSelectionInterval(0, 0);
|
||||
exceptionsTable.setSurrendersFocusOnKeystroke(true);
|
||||
|
||||
final JPanel buttonsPanel = EditableRowTable.createButtonsTable(exceptionsTable, myExceptionsTableModel, false, true);
|
||||
final JPanel buttonsPanel = EditableRowTable.createButtonsTable(table, myExceptionsModel, false, true,
|
||||
myPropExceptionsButton);
|
||||
|
||||
panel.add(buttonsPanel, BorderLayout.EAST);
|
||||
|
||||
myExceptionsTableModel.addTableModelListener(
|
||||
new TableModelListener() {
|
||||
public void tableChanged(TableModelEvent e) {
|
||||
JavaChangeSignatureDialog.this.updateSignature();
|
||||
}
|
||||
myExceptionsModel.addTableModelListener(new TableModelListener() {
|
||||
public void tableChanged(TableModelEvent e) {
|
||||
JavaChangeSignatureDialog.this.updateSignature();
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
final ArrayList<Pair<String, JPanel>> result = new ArrayList<Pair<String, JPanel>>();
|
||||
result.add(Pair.create("Exceptions", panel));
|
||||
@@ -168,15 +166,15 @@ public class JavaChangeSignatureDialog extends ChangeSignatureDialogBase<Paramet
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ParameterTableModelBase<ParameterInfoImpl> createParametersInfoModel(MethodDescriptor<ParameterInfoImpl> method) {
|
||||
return new JavaParameterTableModel(((JavaMethodDescriptor)method).getMethod().getParameterList(), myDefaultValueContext, this);
|
||||
protected ParameterTableModelBase<ParameterInfoImpl> createParametersInfoModel(MethodDescriptor<ParameterInfoImpl> descriptor) {
|
||||
final PsiParameterList parameterList = ((JavaMethodDescriptor)descriptor).getMethod().getParameterList();
|
||||
return new JavaParameterTableModel(parameterList, myDefaultValueContext, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void invokeRefactoring(BaseRefactoringProcessor processor) {
|
||||
protected void invokeRefactoring(final BaseRefactoringProcessor processor) {
|
||||
if (myMethodsToPropagateExceptions != null && !mayPropagateExceptions()) {
|
||||
Messages.showWarningDialog(myProject, RefactoringBundle.message("changeSignature.exceptions.wont.propagate"),
|
||||
ChangeSignatureHandler.REFACTORING_NAME);
|
||||
Messages.showWarningDialog(myProject, RefactoringBundle.message("changeSignature.exceptions.wont.propagate"), REFACTORING_NAME);
|
||||
myMethodsToPropagateExceptions = null;
|
||||
}
|
||||
super.invokeRefactoring(processor);
|
||||
@@ -216,7 +214,7 @@ public class JavaChangeSignatureDialog extends ChangeSignatureDialogBase<Paramet
|
||||
}
|
||||
|
||||
protected ThrownExceptionInfo[] getExceptions() {
|
||||
return myExceptionsTableModel.getThrownExceptions();
|
||||
return myExceptionsModel.getThrownExceptions();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -268,12 +266,11 @@ public class JavaChangeSignatureDialog extends ChangeSignatureDialogBase<Paramet
|
||||
final PsiType type;
|
||||
try {
|
||||
type = ((PsiTypeCodeFragment)parameterInfos.get(i).typeCodeFragment).getType();
|
||||
}
|
||||
catch (PsiTypeCodeFragment.TypeSyntaxException e) {
|
||||
return RefactoringBundle
|
||||
.message("changeSignature.wrong.type.for.parameter", item.typeCodeFragment.getText(), item.parameter.getName());
|
||||
}
|
||||
catch (PsiTypeCodeFragment.NoTypeException e) {
|
||||
} catch (PsiTypeCodeFragment.TypeSyntaxException e) {
|
||||
return RefactoringBundle.message("changeSignature.wrong.type.for.parameter",
|
||||
item.typeCodeFragment.getText(),
|
||||
item.parameter.getName());
|
||||
} catch (PsiTypeCodeFragment.NoTypeException e) {
|
||||
return RefactoringBundle.message("changeSignature.no.type.for.parameter", item.parameter.getName());
|
||||
}
|
||||
|
||||
@@ -302,8 +299,8 @@ public class JavaChangeSignatureDialog extends ChangeSignatureDialogBase<Paramet
|
||||
}
|
||||
}
|
||||
|
||||
ThrownExceptionInfo[] exceptionInfos = myExceptionsTableModel.getThrownExceptions();
|
||||
PsiTypeCodeFragment[] typeCodeFragments = myExceptionsTableModel.getTypeCodeFragments();
|
||||
ThrownExceptionInfo[] exceptionInfos = myExceptionsModel.getThrownExceptions();
|
||||
PsiTypeCodeFragment[] typeCodeFragments = myExceptionsModel.getTypeCodeFragments();
|
||||
for (int i = 0; i < exceptionInfos.length; i++) {
|
||||
ThrownExceptionInfo exceptionInfo = exceptionInfos[i];
|
||||
PsiTypeCodeFragment typeCodeFragment = typeCodeFragments[i];
|
||||
@@ -362,24 +359,24 @@ public class JavaChangeSignatureDialog extends ChangeSignatureDialogBase<Paramet
|
||||
}
|
||||
|
||||
protected String doCalculateSignature(PsiMethod method) {
|
||||
@NonNls StringBuilder buffer = new StringBuilder();
|
||||
|
||||
PsiModifierList modifierList = method.getModifierList();
|
||||
final StringBuilder buffer = new StringBuilder();
|
||||
final PsiModifierList modifierList = method.getModifierList();
|
||||
String modifiers = modifierList.getText();
|
||||
String oldModifier = VisibilityUtil.getVisibilityModifier(modifierList);
|
||||
String newModifier = getVisibility();
|
||||
final String oldModifier = VisibilityUtil.getVisibilityModifier(modifierList);
|
||||
final String newModifier = getVisibility();
|
||||
String newModifierStr = VisibilityUtil.getVisibilityString(newModifier);
|
||||
if (!newModifier.equals(oldModifier)) {
|
||||
int index = modifiers.indexOf(oldModifier);
|
||||
if (index >= 0) {
|
||||
StringBuilder buf = new StringBuilder(modifiers);
|
||||
final StringBuilder buf = new StringBuilder(modifiers);
|
||||
buf.replace(index,
|
||||
index + oldModifier.length() + ("".equals(newModifierStr) ? 1 : 0),
|
||||
newModifierStr);
|
||||
modifiers = buf.toString();
|
||||
}
|
||||
else {
|
||||
if (!"".equals(newModifierStr)) newModifierStr += " ";
|
||||
} else {
|
||||
if (!StringUtil.isEmpty(newModifierStr)) {
|
||||
newModifierStr += " ";
|
||||
}
|
||||
modifiers = newModifierStr + modifiers;
|
||||
}
|
||||
}
|
||||
@@ -393,9 +390,9 @@ public class JavaChangeSignatureDialog extends ChangeSignatureDialogBase<Paramet
|
||||
}
|
||||
|
||||
if (!method.isConstructor()) {
|
||||
final CanonicalTypes.Type returnType = getReturnType();
|
||||
if (returnType != null) {
|
||||
buffer.append(returnType.getTypeText());
|
||||
final CanonicalTypes.Type type = getReturnType();
|
||||
if (type != null) {
|
||||
buffer.append(type.getTypeText());
|
||||
}
|
||||
buffer.append(" ");
|
||||
}
|
||||
@@ -410,15 +407,14 @@ public class JavaChangeSignatureDialog extends ChangeSignatureDialogBase<Paramet
|
||||
List<ParameterTableModelItemBase<ParameterInfoImpl>> items = myParametersTableModel.getItems();
|
||||
int curIndent = indent.length();
|
||||
for (int i = 0; i < items.size(); i++) {
|
||||
ParameterTableModelItemBase<ParameterInfoImpl> item = items.get(i);
|
||||
final ParameterTableModelItemBase<ParameterInfoImpl> item = items.get(i);
|
||||
if (i > 0) {
|
||||
buffer.append(",");
|
||||
buffer.append("\n");
|
||||
buffer.append(indent);
|
||||
}
|
||||
final String text = item.typeCodeFragment.getText();
|
||||
buffer.append(text);
|
||||
buffer.append(" ");
|
||||
buffer.append(text).append(" ");
|
||||
final String name = item.parameter.getName();
|
||||
buffer.append(name);
|
||||
curIndent = indent.length() + text.length() + 1 + name.length();
|
||||
@@ -427,7 +423,7 @@ public class JavaChangeSignatureDialog extends ChangeSignatureDialogBase<Paramet
|
||||
// buffer.append("\n");
|
||||
//}
|
||||
buffer.append(")");
|
||||
PsiTypeCodeFragment[] thrownExceptionsFragments = myExceptionsTableModel.getTypeCodeFragments();
|
||||
PsiTypeCodeFragment[] thrownExceptionsFragments = myExceptionsModel.getTypeCodeFragments();
|
||||
if (thrownExceptionsFragments.length > 0) {
|
||||
//buffer.append("\n");
|
||||
buffer.append(" throws ");
|
||||
@@ -448,5 +444,4 @@ public class JavaChangeSignatureDialog extends ChangeSignatureDialogBase<Paramet
|
||||
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 854 B |
+34
-24
@@ -15,7 +15,10 @@
|
||||
*/
|
||||
package com.intellij.refactoring.changeSignature;
|
||||
|
||||
import com.intellij.codeInsight.hint.HintUtil;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.actionSystem.KeyboardShortcut;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.EditorFactory;
|
||||
@@ -33,21 +36,20 @@ import com.intellij.openapi.ui.VerticalFlowLayout;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.openapi.wm.IdeFocusManager;
|
||||
import com.intellij.psi.PsiCodeFragment;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.refactoring.BaseRefactoringProcessor;
|
||||
import com.intellij.refactoring.RefactoringBundle;
|
||||
import com.intellij.refactoring.ui.ComboBoxVisibilityPanel;
|
||||
import com.intellij.refactoring.ui.DelegationPanel;
|
||||
import com.intellij.refactoring.ui.RefactoringDialog;
|
||||
import com.intellij.refactoring.ui.VisibilityPanelBase;
|
||||
import com.intellij.refactoring.ui.*;
|
||||
import com.intellij.refactoring.util.CommonRefactoringUtil;
|
||||
import com.intellij.ui.*;
|
||||
import com.intellij.ui.table.TableView;
|
||||
import com.intellij.ui.treeStructure.Tree;
|
||||
import com.intellij.util.Alarm;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.PlatformIcons;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
@@ -56,8 +58,8 @@ import javax.swing.event.ChangeListener;
|
||||
import javax.swing.event.TableModelEvent;
|
||||
import javax.swing.event.TableModelListener;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.FocusAdapter;
|
||||
import java.awt.event.FocusEvent;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@@ -83,11 +85,10 @@ public abstract class ChangeSignatureDialogBase<P extends ParameterInfo, M exten
|
||||
protected VisibilityPanelBase myVisibilityPanel;
|
||||
protected PsiCodeFragment myReturnTypeCodeFragment;
|
||||
private DelegationPanel myDelegationPanel;
|
||||
protected JButton myPropagateParamChangesButton;
|
||||
protected AnActionButton myPropagateParamChangesButton;
|
||||
protected Set<M> myMethodsToPropagateParameters = null;
|
||||
|
||||
private Tree myParameterPropagationTreeToReuse;
|
||||
protected JPanel myPropagatePanel;
|
||||
|
||||
protected final PsiElement myDefaultValueContext;
|
||||
|
||||
@@ -280,9 +281,10 @@ public abstract class ChangeSignatureDialogBase<P extends ParameterInfo, M exten
|
||||
panel.add(myDelegationPanel, BorderLayout.WEST);
|
||||
}
|
||||
|
||||
myPropagateParamChangesButton = new JButton(RefactoringBundle.message("changeSignature.propagate.parameters.title"));
|
||||
myPropagateParamChangesButton.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
myPropagateParamChangesButton = new AnActionButton(RefactoringBundle.message("changeSignature.propagate.parameters.title"), null,
|
||||
PlatformIcons.NEW_PARAMETER) {
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
final Ref<CallerChooserBase<M>> chooser = new Ref<CallerChooserBase<M>>();
|
||||
Consumer<Set<M>> callback = new Consumer<Set<M>>() {
|
||||
@Override
|
||||
@@ -294,18 +296,16 @@ public abstract class ChangeSignatureDialogBase<P extends ParameterInfo, M exten
|
||||
try {
|
||||
chooser.set(
|
||||
createCallerChooser(RefactoringBundle.message("changeSignature.parameter.caller.chooser"), myParameterPropagationTreeToReuse,
|
||||
callback));
|
||||
} catch (ProcessCanceledException ex) {
|
||||
callback));
|
||||
}
|
||||
catch (ProcessCanceledException ex) {
|
||||
// user cancelled initial callers search, don't show dialog
|
||||
return;
|
||||
}
|
||||
chooser.get().show();
|
||||
}
|
||||
});
|
||||
myPropagatePanel = new JPanel();
|
||||
myPropagatePanel.add(myPropagateParamChangesButton);
|
||||
};
|
||||
|
||||
panel.add(myPropagatePanel, BorderLayout.EAST);
|
||||
final JPanel result = new JPanel(new VerticalFlowLayout(VerticalFlowLayout.TOP));
|
||||
result.add(panel);
|
||||
return result;
|
||||
@@ -333,7 +333,7 @@ public abstract class ChangeSignatureDialogBase<P extends ParameterInfo, M exten
|
||||
return "refactoring.ChangeSignatureDialog";
|
||||
}
|
||||
|
||||
private JPanel createParametersPanel() {
|
||||
protected JPanel createParametersPanel() {
|
||||
myParametersTable = new TableView<ParameterTableModelItemBase<P>>(myParametersTableModel) {
|
||||
@Override
|
||||
public void editingStopped(ChangeEvent e) {
|
||||
@@ -358,9 +358,11 @@ public abstract class ChangeSignatureDialogBase<P extends ParameterInfo, M exten
|
||||
myParametersTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
myParametersTable.getSelectionModel().setSelectionInterval(0, 0);
|
||||
myParametersTable.setSurrendersFocusOnKeystroke(true);
|
||||
|
||||
JPanel buttonsPanel = EditableRowTable.createButtonsTable(myParametersTable, myParametersTableModel, false, true);
|
||||
|
||||
myPropagateParamChangesButton.setShortcut(KeyboardShortcut.fromString("alt G"));
|
||||
final JPanel buttonsPanel = EditableRowTable.createButtonsTable(myParametersTable, myParametersTableModel,
|
||||
false, true, myPropagateParamChangesButton);
|
||||
myPropagateParamChangesButton.setEnabled(false);
|
||||
myPropagateParamChangesButton.setVisible(false);
|
||||
panel.add(buttonsPanel, BorderLayout.EAST);
|
||||
|
||||
myParametersTableModel.addTableModelListener(
|
||||
@@ -385,13 +387,19 @@ public abstract class ChangeSignatureDialogBase<P extends ParameterInfo, M exten
|
||||
panel.add(mySignatureArea, BorderLayout.CENTER);
|
||||
mySignatureArea.setFont(EditorColorsManager.getInstance().getGlobalScheme().getFont(EditorFontType.PLAIN));
|
||||
mySignatureArea.setPreferredSize(new Dimension(-1, 130));
|
||||
mySignatureArea.setBackground(Color.WHITE);
|
||||
mySignatureArea.setBackground(HintUtil.INFORMATION_COLOR);
|
||||
mySignatureArea.addFocusListener(new FocusAdapter() {
|
||||
@Override
|
||||
public void focusGained(FocusEvent e) {
|
||||
IdeFocusManager.findInstance().requestFocus(myNameField, true);
|
||||
}
|
||||
});
|
||||
updateSignature();
|
||||
return panel;
|
||||
}
|
||||
|
||||
protected void updateSignature() {
|
||||
if (mySignatureArea == null) return;
|
||||
if (mySignatureArea == null || myPropagateParamChangesButton == null) return;
|
||||
|
||||
final Runnable updateRunnable = new Runnable() {
|
||||
public void run() {
|
||||
@@ -421,7 +429,9 @@ public abstract class ChangeSignatureDialogBase<P extends ParameterInfo, M exten
|
||||
}
|
||||
|
||||
protected void updatePropagateButtons() {
|
||||
myPropagateParamChangesButton.setEnabled(!isGenerateDelegate() && mayPropagateParameters());
|
||||
if (myPropagateParamChangesButton != null) {
|
||||
myPropagateParamChangesButton.setEnabled(!isGenerateDelegate() && mayPropagateParameters());
|
||||
}
|
||||
}
|
||||
|
||||
private boolean mayPropagateParameters() {
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
* Copyright 2000-2011 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.refactoring.ui;
|
||||
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.actionSystem.Shortcut;
|
||||
import com.intellij.openapi.actionSystem.ShortcutProvider;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* @author Konstantin Bulenkov
|
||||
*/
|
||||
public abstract class AnActionButton extends AnAction implements ShortcutProvider {
|
||||
private boolean myEnabled = true;
|
||||
private boolean myVisible = true;
|
||||
private Shortcut myShortcut;
|
||||
|
||||
protected AnActionButton(String text) {
|
||||
super(text);
|
||||
}
|
||||
|
||||
protected AnActionButton(String text, String description, @Nullable Icon icon) {
|
||||
super(text, description, icon);
|
||||
}
|
||||
|
||||
protected AnActionButton() {
|
||||
}
|
||||
|
||||
public boolean isEnabled() {
|
||||
return myEnabled;
|
||||
}
|
||||
|
||||
public void setEnabled(boolean enabled) {
|
||||
myEnabled = enabled;
|
||||
}
|
||||
|
||||
public boolean isVisible() {
|
||||
return myVisible;
|
||||
}
|
||||
|
||||
public void setVisible(boolean visible) {
|
||||
myVisible = visible;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(AnActionEvent e) {
|
||||
e.getPresentation().setEnabled(isEnabled());
|
||||
e.getPresentation().setVisible(isVisible());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Shortcut getShortcut() {
|
||||
return myShortcut;
|
||||
}
|
||||
|
||||
public void setShortcut(Shortcut shortcut) {
|
||||
myShortcut = shortcut;
|
||||
}
|
||||
}
|
||||
@@ -17,11 +17,13 @@ package com.intellij.ui;
|
||||
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.ui.VerticalFlowLayout;
|
||||
import com.intellij.openapi.util.IconLoader;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.util.PlatformIcons;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -34,10 +36,10 @@ public class AddRemoveUpDownPanel extends JPanel {
|
||||
|
||||
Icon getIcon() {
|
||||
switch (this) {
|
||||
case ADD: return IconLoader.getIcon("/actions/addBig.png");
|
||||
case REMOVE: return IconLoader.getIcon("/actions/removeBig.png");
|
||||
case UP: return IconLoader.getIcon("/actions/upBig.png");
|
||||
case DOWN: return IconLoader.getIcon("/actions/downBig.png");
|
||||
case ADD: return PlatformIcons.ADD_BIG;
|
||||
case REMOVE: return PlatformIcons.REMOVE_BIG;
|
||||
case UP: return PlatformIcons.UP_BIG;
|
||||
case DOWN: return PlatformIcons.DOWN_BIG;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -76,7 +78,9 @@ public class AddRemoveUpDownPanel extends JPanel {
|
||||
}
|
||||
|
||||
private Map<Buttons, TableActionButton> myButtons = new HashMap<Buttons, TableActionButton>();
|
||||
public AddRemoveUpDownPanel(Listener listener, @Nullable JComponent contentPane, Buttons... buttons) {
|
||||
|
||||
public AddRemoveUpDownPanel(Listener listener, @Nullable JComponent contentPane,
|
||||
@Nullable AnAction[] additionalActions, Buttons... buttons) {
|
||||
super(new VerticalFlowLayout(VerticalFlowLayout.TOP));
|
||||
AnAction[] actions = new AnAction[buttons.length];
|
||||
for (int i = 0; i < buttons.length; i++) {
|
||||
@@ -89,6 +93,19 @@ public class AddRemoveUpDownPanel extends JPanel {
|
||||
b.registerCustomShortcutSet(new CustomShortcutSet(shortcut), contentPane);
|
||||
}
|
||||
}
|
||||
if (additionalActions != null && additionalActions.length > 0) {
|
||||
final ArrayList<AnAction> allActions = new ArrayList<AnAction>(Arrays.asList(actions));
|
||||
allActions.addAll(Arrays.asList(additionalActions));
|
||||
actions = allActions.toArray(new AnAction[allActions.size()]);
|
||||
for (final AnAction action : additionalActions) {
|
||||
if (action instanceof ShortcutProvider && contentPane != null) {
|
||||
final Shortcut shortcut = ((ShortcutProvider)action).getShortcut();
|
||||
if (shortcut != null) {
|
||||
action.registerCustomShortcutSet(new CustomShortcutSet(shortcut), contentPane);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
add(ActionManager.getInstance().createActionToolbar(ActionPlaces.UNKNOWN, new DefaultActionGroup(actions), false).getComponent());
|
||||
}
|
||||
|
||||
@@ -99,8 +116,8 @@ public class AddRemoveUpDownPanel extends JPanel {
|
||||
}
|
||||
}
|
||||
|
||||
public AddRemoveUpDownPanel(Listener listener, @Nullable JComponent contentPane) {
|
||||
this(listener, contentPane, Buttons.ADD, Buttons.REMOVE, Buttons.UP, Buttons.DOWN);
|
||||
public AddRemoveUpDownPanel(Listener listener, @Nullable JComponent contentPane, @Nullable AnAction[] additionalActions) {
|
||||
this(listener, contentPane, additionalActions, Buttons.ADD, Buttons.REMOVE, Buttons.UP, Buttons.DOWN);
|
||||
}
|
||||
|
||||
static class TableActionButton extends AnAction implements ShortcutProvider {
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.ui;
|
||||
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
|
||||
import javax.swing.*;
|
||||
@@ -34,7 +35,9 @@ public class EditableRowTable {
|
||||
return createButtonsTable(table, tableModel, addMnemonics, false);
|
||||
}
|
||||
|
||||
public static JPanel createButtonsTable(final JTable table, final RowEditableTableModel tableModel, boolean addMnemonics, boolean iconsOnly) {
|
||||
public static JPanel createButtonsTable(final JTable table, final RowEditableTableModel tableModel,
|
||||
boolean addMnemonics, boolean iconsOnly,
|
||||
AnAction...actions) {
|
||||
JPanel panel = new JPanel();
|
||||
panel.setBorder(iconsOnly ? IdeBorderFactory.createEmptyBorder(0) : BorderFactory.createEmptyBorder(4, 4, 4, 4));
|
||||
|
||||
@@ -158,7 +161,7 @@ public class EditableRowTable {
|
||||
gbConstraints.weighty = 1;
|
||||
panel.add(new JPanel(), gbConstraints);
|
||||
} else {
|
||||
p.set(new AddRemoveUpDownPanel(listener, table));
|
||||
p.set(new AddRemoveUpDownPanel(listener, table, actions));
|
||||
panel.add(p.get(), BorderLayout.NORTH);
|
||||
}
|
||||
|
||||
|
||||
@@ -89,6 +89,7 @@ public interface PlatformIcons {
|
||||
Icon VARIABLE_RW_ACCESS = IconLoader.getIcon("/nodes/rw-access.png");
|
||||
Icon CUSTOM_FILE_ICON = IconLoader.getIcon("/fileTypes/custom.png");
|
||||
Icon PROPERTY_ICON = IconLoader.getIcon("/nodes/property.png");
|
||||
Icon NEW_PARAMETER = IconLoader.getIcon("/nodes/newParameter.png");
|
||||
Icon ASPECT_ICON = IconLoader.getIcon("/nodes/aspect.png");
|
||||
Icon POINTCUT_ICON = IconLoader.getIcon("/nodes/pointcut.png");
|
||||
Icon ADVICE_ICON = IconLoader.getIcon("/nodes/advice.png");
|
||||
|
||||
Reference in New Issue
Block a user