mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
OC-2385 Feature Request: Extract method should create interface definition
OC-3557 Create method from usage for protocols OC-4331 Allow extracting a method to a category
This commit is contained in:
+3
-3
@@ -80,7 +80,7 @@ import static com.intellij.refactoring.changeSignature.ChangeSignatureHandler.RE
|
||||
/**
|
||||
* @author Konstantin Bulenkov
|
||||
*/
|
||||
public class JavaChangeSignatureDialog extends ChangeSignatureDialogBase<ParameterInfoImpl, PsiMethod, JavaMethodDescriptor> {
|
||||
public class JavaChangeSignatureDialog extends ChangeSignatureDialogBase<ParameterInfoImpl, PsiMethod, String, JavaMethodDescriptor> {
|
||||
private ExceptionsTableModel myExceptionsModel;
|
||||
protected Set<PsiMethod> myMethodsToPropagateExceptions;
|
||||
private AnActionButton myPropExceptionsButton;
|
||||
@@ -95,7 +95,7 @@ public class JavaChangeSignatureDialog extends ChangeSignatureDialogBase<Paramet
|
||||
}
|
||||
|
||||
@Override
|
||||
protected VisibilityPanelBase createVisibilityControl() {
|
||||
protected VisibilityPanelBase<String> createVisibilityControl() {
|
||||
return new JavaComboBoxVisibilityPanel();
|
||||
}
|
||||
|
||||
@@ -192,7 +192,7 @@ public class JavaChangeSignatureDialog extends ChangeSignatureDialogBase<Paramet
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ParameterTableModelBase<ParameterInfoImpl> createParametersInfoModel(MethodDescriptor<ParameterInfoImpl> descriptor) {
|
||||
protected ParameterTableModelBase<ParameterInfoImpl> createParametersInfoModel(MethodDescriptor<ParameterInfoImpl, String> descriptor) {
|
||||
final PsiParameterList parameterList = ((JavaMethodDescriptor)descriptor).getMethod().getParameterList();
|
||||
return new JavaParameterTableModel(parameterList, myDefaultValueContext, this);
|
||||
}
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class JavaMethodDescriptor implements MethodDescriptor<ParameterInfoImpl> {
|
||||
public class JavaMethodDescriptor implements MethodDescriptor<ParameterInfoImpl, String> {
|
||||
|
||||
private final PsiMethod myMethod;
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@ public class ExtractMethodDialog extends AbstractExtractDialog {
|
||||
|
||||
private final InputVariables myVariableData;
|
||||
private final PsiClass myTargetClass;
|
||||
private ComboBoxVisibilityPanel myVisibilityPanel;
|
||||
private ComboBoxVisibilityPanel<String> myVisibilityPanel;
|
||||
|
||||
private boolean myDefaultVisibility = true;
|
||||
private boolean myChangingVisibility;
|
||||
@@ -300,7 +300,7 @@ public class ExtractMethodDialog extends AbstractExtractDialog {
|
||||
return optionsPanel;
|
||||
}
|
||||
|
||||
private ComboBoxVisibilityPanel createVisibilityPanel() {
|
||||
private ComboBoxVisibilityPanel<String> createVisibilityPanel() {
|
||||
final JavaComboBoxVisibilityPanel panel = new JavaComboBoxVisibilityPanel();
|
||||
panel.setVisibility(PsiModifier.PRIVATE);
|
||||
panel.addListener(new ChangeListener() {
|
||||
|
||||
@@ -22,7 +22,7 @@ import static com.intellij.util.VisibilityUtil.toPresentableText;
|
||||
/**
|
||||
* @author Konstantin Bulenkov
|
||||
*/
|
||||
public class JavaComboBoxVisibilityPanel extends ComboBoxVisibilityPanel implements PsiModifier {
|
||||
public class JavaComboBoxVisibilityPanel extends ComboBoxVisibilityPanel<String> implements PsiModifier {
|
||||
private static final String[] MODIFIERS = {PRIVATE, PACKAGE_LOCAL, PROTECTED, PUBLIC};
|
||||
|
||||
private static final String[] PRESENTABLE_NAMES = {
|
||||
|
||||
@@ -36,7 +36,7 @@ import java.awt.*;
|
||||
import java.awt.event.ItemEvent;
|
||||
import java.awt.event.ItemListener;
|
||||
|
||||
public class JavaVisibilityPanel extends VisibilityPanelBase {
|
||||
public class JavaVisibilityPanel extends VisibilityPanelBase<String> {
|
||||
private JRadioButton myRbAsIs;
|
||||
private JRadioButton myRbEscalate;
|
||||
private final JRadioButton myRbPrivate;
|
||||
|
||||
+5
-5
@@ -72,7 +72,7 @@ import java.util.Set;
|
||||
/**
|
||||
* @author Konstantin Bulenkov
|
||||
*/
|
||||
public abstract class ChangeSignatureDialogBase<P extends ParameterInfo, M extends PsiElement, D extends MethodDescriptor<P>>
|
||||
public abstract class ChangeSignatureDialogBase<P extends ParameterInfo, M extends PsiElement, V, D extends MethodDescriptor<P, V>>
|
||||
extends RefactoringDialog {
|
||||
|
||||
protected static final String EXIT_SILENTLY = "";
|
||||
@@ -89,7 +89,7 @@ public abstract class ChangeSignatureDialogBase<P extends ParameterInfo, M exten
|
||||
private MethodSignatureComponent mySignatureArea;
|
||||
private final Alarm myUpdateSignatureAlarm = new Alarm(Alarm.ThreadToUse.SWING_THREAD);
|
||||
|
||||
protected VisibilityPanelBase myVisibilityPanel;
|
||||
protected VisibilityPanelBase<V> myVisibilityPanel;
|
||||
protected PsiCodeFragment myReturnTypeCodeFragment;
|
||||
private DelegationPanel myDelegationPanel;
|
||||
protected AnActionButton myPropagateParamChangesButton;
|
||||
@@ -101,7 +101,7 @@ public abstract class ChangeSignatureDialogBase<P extends ParameterInfo, M exten
|
||||
|
||||
protected abstract LanguageFileType getFileType();
|
||||
|
||||
protected abstract ParameterTableModelBase<P> createParametersInfoModel(MethodDescriptor<P> method);
|
||||
protected abstract ParameterTableModelBase<P> createParametersInfoModel(MethodDescriptor<P, V> method);
|
||||
|
||||
protected abstract BaseRefactoringProcessor createRefactoringProcessor();
|
||||
|
||||
@@ -113,7 +113,7 @@ public abstract class ChangeSignatureDialogBase<P extends ParameterInfo, M exten
|
||||
|
||||
protected abstract String calculateSignature();
|
||||
|
||||
protected abstract VisibilityPanelBase createVisibilityControl();
|
||||
protected abstract VisibilityPanelBase<V> createVisibilityControl();
|
||||
|
||||
public ChangeSignatureDialogBase(Project project, final D method, boolean allowDelegation, PsiElement defaultValueContext) {
|
||||
super(project, true);
|
||||
@@ -148,7 +148,7 @@ public abstract class ChangeSignatureDialogBase<P extends ParameterInfo, M exten
|
||||
}
|
||||
}
|
||||
|
||||
protected String getVisibility() {
|
||||
protected V getVisibility() {
|
||||
if (myVisibilityPanel != null) {
|
||||
return myVisibilityPanel.getVisibility();
|
||||
}
|
||||
|
||||
+2
-2
@@ -19,7 +19,7 @@ import com.intellij.psi.PsiElement;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface MethodDescriptor<P extends ParameterInfo> {
|
||||
public interface MethodDescriptor<P extends ParameterInfo, V> {
|
||||
|
||||
enum ReadWriteOption { ReadWrite, Read, None }
|
||||
|
||||
@@ -29,7 +29,7 @@ public interface MethodDescriptor<P extends ParameterInfo> {
|
||||
|
||||
int getParametersCount();
|
||||
|
||||
String getVisibility();
|
||||
V getVisibility();
|
||||
|
||||
PsiElement getMethod();
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
*/
|
||||
package com.intellij.refactoring.ui;
|
||||
|
||||
import com.intellij.openapi.ui.VerticalFlowLayout;
|
||||
import com.intellij.refactoring.RefactoringBundle;
|
||||
import com.intellij.ui.ListCellRendererWrapper;
|
||||
import com.intellij.util.IJSwingUtilities;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.ui.DialogUtil;
|
||||
@@ -35,16 +35,17 @@ import java.util.Map;
|
||||
/**
|
||||
* @author Konstantin Bulenkov
|
||||
*/
|
||||
public class ComboBoxVisibilityPanel extends VisibilityPanelBase {
|
||||
public class ComboBoxVisibilityPanel<V> extends VisibilityPanelBase<V> {
|
||||
private final JLabel myLabel;
|
||||
private final JComboBox myComboBox;
|
||||
private final Map<String, String> myNamesMap = new HashMap<String, String>();
|
||||
protected final JComboBox myComboBox;
|
||||
private final Map<V, String> myNamesMap = new HashMap<V, String>();
|
||||
|
||||
public ComboBoxVisibilityPanel(String name, String[] options, String[] presentableNames) {
|
||||
public ComboBoxVisibilityPanel(String name, V[] options, String[] presentableNames) {
|
||||
setLayout(new BorderLayout(0,2));
|
||||
myLabel = new JLabel(name);
|
||||
add(myLabel, BorderLayout.NORTH);
|
||||
myComboBox = new JComboBox(presentableNames);
|
||||
myComboBox = new JComboBox(options);
|
||||
myComboBox.setRenderer(getRenderer());
|
||||
IJSwingUtilities.adjustComponentsOnMac(myLabel, myComboBox);
|
||||
add(myComboBox, BorderLayout.SOUTH);
|
||||
for (int i = 0; i < options.length; i++) {
|
||||
@@ -66,26 +67,57 @@ public class ComboBoxVisibilityPanel extends VisibilityPanelBase {
|
||||
DialogUtil.registerMnemonic(myLabel, myComboBox);
|
||||
}
|
||||
|
||||
public ComboBoxVisibilityPanel(String name, String[] options) {
|
||||
this(name, options, options);
|
||||
protected ListCellRendererWrapper getRenderer() {
|
||||
return new ListCellRendererWrapper(myComboBox) {
|
||||
@Override
|
||||
public void customize(JList list, Object value, int index, boolean selected, boolean hasFocus) {
|
||||
setText(myNamesMap.get((V)value));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public ComboBoxVisibilityPanel(String[] options) {
|
||||
public ComboBoxVisibilityPanel(String name, V[] options) {
|
||||
this(name, options, getObjectNames(options));
|
||||
}
|
||||
|
||||
private static String[] getObjectNames(Object[] options) {
|
||||
String[] names = new String[options.length];
|
||||
|
||||
for (int i = 0; i < options.length; i ++) {
|
||||
names[i] = options[i].toString();
|
||||
}
|
||||
|
||||
return names;
|
||||
}
|
||||
|
||||
public ComboBoxVisibilityPanel(V[] options) {
|
||||
this(RefactoringBundle.message("visibility.combo.title"), options);
|
||||
}
|
||||
|
||||
public ComboBoxVisibilityPanel(String[] options, String[] presentableNames) {
|
||||
public ComboBoxVisibilityPanel(V[] options, String[] presentableNames) {
|
||||
this(RefactoringBundle.message("visibility.combo.title"), options, presentableNames);
|
||||
}
|
||||
|
||||
protected void addOption(int index, V option, String presentableName, boolean select) {
|
||||
myNamesMap.put(option, presentableName);
|
||||
myComboBox.insertItemAt(option, index);
|
||||
|
||||
if (select) {
|
||||
myComboBox.setSelectedIndex(index);
|
||||
}
|
||||
}
|
||||
|
||||
protected void addOption(V option) {
|
||||
addOption(myComboBox.getItemCount(), option, option.toString(), false);
|
||||
}
|
||||
|
||||
public void setDisplayedMnemonicIndex(int index) {
|
||||
myLabel.setDisplayedMnemonicIndex(index);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getVisibility() {
|
||||
final String selected = (String)myComboBox.getSelectedItem();
|
||||
return ContainerUtil.reverseMap(myNamesMap).get((selected));
|
||||
public V getVisibility() {
|
||||
return (V)myComboBox.getSelectedItem();
|
||||
}
|
||||
|
||||
public void addListener(ChangeListener listener) {
|
||||
@@ -97,8 +129,8 @@ public class ComboBoxVisibilityPanel extends VisibilityPanelBase {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVisibility(String visibility) {
|
||||
myComboBox.setSelectedItem(myNamesMap.get(visibility));
|
||||
public void setVisibility(V visibility) {
|
||||
myComboBox.setSelectedItem(visibility);
|
||||
myEventDispatcher.getMulticaster().stateChanged(new ChangeEvent(this));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,13 +20,13 @@ import com.intellij.util.EventDispatcher;
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.ChangeListener;
|
||||
|
||||
public abstract class VisibilityPanelBase extends JPanel {
|
||||
public abstract class VisibilityPanelBase<V> extends JPanel {
|
||||
|
||||
protected final EventDispatcher<ChangeListener> myEventDispatcher = EventDispatcher.create(ChangeListener.class);
|
||||
|
||||
public abstract String getVisibility();
|
||||
public abstract V getVisibility();
|
||||
|
||||
public abstract void setVisibility(String visibility);
|
||||
public abstract void setVisibility(V visibility);
|
||||
|
||||
public void addListener(ChangeListener listener) {
|
||||
myEventDispatcher.addListener(listener);
|
||||
|
||||
+1
-1
@@ -75,7 +75,7 @@ public class GroovyExtractMethodDialog extends DialogWrapper {
|
||||
private JCheckBox myCbSpecifyType;
|
||||
private JLabel myNameLabel;
|
||||
private MethodSignatureComponent mySignature;
|
||||
private ComboBoxVisibilityPanel myVisibilityPanel;
|
||||
private ComboBoxVisibilityPanel<String> myVisibilityPanel;
|
||||
private Splitter mySplitter;
|
||||
private JCheckBox myForceReturnCheckBox;
|
||||
private ParameterTablePanel myParameterTablePanel;
|
||||
|
||||
+1
-1
@@ -24,7 +24,7 @@ import static com.intellij.util.VisibilityUtil.toPresentableText;
|
||||
/**
|
||||
* @author Max Medvedev
|
||||
*/
|
||||
public class GroovyComboboxVisibilityPanel extends ComboBoxVisibilityPanel {
|
||||
public class GroovyComboboxVisibilityPanel extends ComboBoxVisibilityPanel<String> {
|
||||
private static final String[] MODIFIERS = {PRIVATE, PROTECTED, PUBLIC, GrModifier.DEF};
|
||||
|
||||
private static final String[] PRESENTABLE_NAMES = {
|
||||
|
||||
Reference in New Issue
Block a user