mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
extract base class from PullUpDialog
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
* Copyright 2000-2013 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.
|
||||
@@ -261,40 +261,34 @@ class ExtractClassDialog extends RefactoringDialog implements MemberInfoChangeLi
|
||||
|
||||
protected JComponent createCenterPanel() {
|
||||
final JPanel panel = new JPanel(new BorderLayout());
|
||||
final MemberSelectionPanel memberSelectionPanel =
|
||||
new MemberSelectionPanel(RefactorJBundle.message("members.to.extract.label"), memberInfo, "As enum") {
|
||||
@Override
|
||||
protected MemberSelectionTable createMemberSelectionTable(final List<MemberInfo> memberInfo, String abstractColumnHeader) {
|
||||
return new MemberSelectionTable(memberInfo, abstractColumnHeader) {
|
||||
@Nullable
|
||||
@Override
|
||||
protected Object getAbstractColumnValue(MemberInfo memberInfo) {
|
||||
if (isExtractAsEnum()) {
|
||||
final PsiMember member = memberInfo.getMember();
|
||||
if (isConstantField(member)) {
|
||||
return Boolean.valueOf(enumConstants.contains(memberInfo));
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isAbstractColumnEditable(int rowIndex) {
|
||||
final MemberInfo info = memberInfo.get(rowIndex);
|
||||
if (info.isChecked()) {
|
||||
final PsiMember member = info.getMember();
|
||||
if (isConstantField(member)) {
|
||||
if (enumConstants.isEmpty()) return true;
|
||||
final MemberInfo currentEnumConstant = enumConstants.get(0);
|
||||
if (((PsiField)currentEnumConstant.getMember()).getType().equals(((PsiField)member).getType())) return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
final MemberSelectionTable table = new MemberSelectionTable(memberInfo, "As enum") {
|
||||
@Nullable
|
||||
@Override
|
||||
protected Object getAbstractColumnValue(MemberInfo memberInfo) {
|
||||
if (isExtractAsEnum()) {
|
||||
final PsiMember member = memberInfo.getMember();
|
||||
if (isConstantField(member)) {
|
||||
return Boolean.valueOf(enumConstants.contains(memberInfo));
|
||||
}
|
||||
}
|
||||
};
|
||||
final MemberSelectionTable table = memberSelectionPanel.getTable();
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isAbstractColumnEditable(int rowIndex) {
|
||||
final MemberInfo info = memberInfo.get(rowIndex);
|
||||
if (info.isChecked()) {
|
||||
final PsiMember member = info.getMember();
|
||||
if (isConstantField(member)) {
|
||||
if (enumConstants.isEmpty()) return true;
|
||||
final MemberInfo currentEnumConstant = enumConstants.get(0);
|
||||
if (((PsiField)currentEnumConstant.getMember()).getType().equals(((PsiField)member).getType())) return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
table.setMemberInfoModel(new DelegatingMemberInfoModel<PsiMember, MemberInfo>(table.getMemberInfoModel()) {
|
||||
|
||||
@Override
|
||||
@@ -342,6 +336,10 @@ class ExtractClassDialog extends RefactoringDialog implements MemberInfoChangeLi
|
||||
return cause;
|
||||
}
|
||||
});
|
||||
|
||||
final MemberSelectionPanelBase<PsiMember, MemberInfo, MemberSelectionTable> memberSelectionPanel =
|
||||
new MemberSelectionPanelBase<PsiMember, MemberInfo, MemberSelectionTable>(RefactorJBundle.message("members.to.extract.label"), table);
|
||||
|
||||
panel.add(memberSelectionPanel, BorderLayout.CENTER);
|
||||
table.addMemberInfoChangeListener(this);
|
||||
extractAsEnum.addActionListener(new ActionListener() {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
* Copyright 2000-2013 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.
|
||||
@@ -153,16 +153,17 @@ public class JavaPullUpHandler implements RefactoringActionHandler, PullUpDialog
|
||||
|
||||
|
||||
public boolean checkConflicts(final PullUpDialog dialog) {
|
||||
final MemberInfo[] infos = dialog.getSelectedMemberInfos();
|
||||
final List<MemberInfo> infos = dialog.getSelectedMemberInfos();
|
||||
final MemberInfo[] memberInfos = infos.toArray(new MemberInfo[infos.size()]);
|
||||
final PsiClass superClass = dialog.getSuperClass();
|
||||
if (!checkWritable(superClass, infos)) return false;
|
||||
if (!checkWritable(superClass, memberInfos)) return false;
|
||||
final MultiMap<PsiElement, String> conflicts = new MultiMap<PsiElement, String>();
|
||||
if (!ProgressManager.getInstance().runProcessWithProgressSynchronously(new Runnable() {
|
||||
public void run() {
|
||||
final PsiDirectory targetDirectory = superClass.getContainingFile().getContainingDirectory();
|
||||
final PsiPackage targetPackage = targetDirectory != null ? JavaDirectoryService.getInstance().getPackage(targetDirectory) : null;
|
||||
conflicts
|
||||
.putAllValues(PullUpConflictsUtil.checkConflicts(infos, mySubclass, superClass, targetPackage, targetDirectory, dialog.getContainmentVerifier()));
|
||||
.putAllValues(PullUpConflictsUtil.checkConflicts(memberInfos, mySubclass, superClass, targetPackage, targetDirectory, dialog.getContainmentVerifier()));
|
||||
}
|
||||
}, RefactoringBundle.message("detecting.possible.conflicts"), true, myProject)) return false;
|
||||
if (!conflicts.isEmpty()) {
|
||||
|
||||
@@ -28,43 +28,40 @@ import com.intellij.psi.util.TypeConversionUtil;
|
||||
import com.intellij.refactoring.HelpID;
|
||||
import com.intellij.refactoring.JavaRefactoringSettings;
|
||||
import com.intellij.refactoring.RefactoringBundle;
|
||||
import com.intellij.refactoring.classMembers.MemberInfoChange;
|
||||
import com.intellij.refactoring.classMembers.DelegatingMemberInfoModel;
|
||||
import com.intellij.refactoring.ui.AbstractMemberSelectionTable;
|
||||
import com.intellij.refactoring.ui.ClassCellRenderer;
|
||||
import com.intellij.refactoring.ui.DocCommentPanel;
|
||||
import com.intellij.refactoring.ui.MemberSelectionPanel;
|
||||
import com.intellij.refactoring.ui.RefactoringDialog;
|
||||
import com.intellij.refactoring.ui.MemberSelectionTable;
|
||||
import com.intellij.refactoring.util.DocCommentPolicy;
|
||||
import com.intellij.refactoring.util.RefactoringHierarchyUtil;
|
||||
import com.intellij.refactoring.util.classMembers.InterfaceContainmentVerifier;
|
||||
import com.intellij.refactoring.util.classMembers.MemberInfo;
|
||||
import com.intellij.refactoring.util.classMembers.MemberInfoStorage;
|
||||
import com.intellij.refactoring.util.classMembers.UsesAndInterfacesDependencyMemberInfoModel;
|
||||
import com.intellij.usageView.UsageViewUtil;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ItemEvent;
|
||||
import java.awt.event.ItemListener;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author dsl
|
||||
* Date: 18.06.2002
|
||||
*/
|
||||
public class PullUpDialog extends RefactoringDialog {
|
||||
public class PullUpDialog extends PullUpDialogBase<MemberInfoStorage, MemberInfo, PsiMember, PsiClass> {
|
||||
private final Callback myCallback;
|
||||
private MemberSelectionPanel myMemberSelectionPanel;
|
||||
private MyMemberInfoModel myMemberInfoModel;
|
||||
private final PsiClass myClass;
|
||||
private final List<PsiClass> mySuperClasses;
|
||||
private final MemberInfoStorage myMemberInfoStorage;
|
||||
private List<MemberInfo> myMemberInfos;
|
||||
private DocCommentPanel myJavaDocPanel;
|
||||
private JComboBox myClassCombo;
|
||||
|
||||
private final InterfaceContainmentVerifier myInterfaceContainmentVerifier = new InterfaceContainmentVerifier() {
|
||||
public boolean checkedInterfacesContain(PsiMethod psiMethod) {
|
||||
return PullUpHelper.checkedInterfacesContain(myMemberInfos, psiMethod);
|
||||
}
|
||||
};
|
||||
|
||||
private static final String PULL_UP_STATISTICS_KEY = "pull.up##";
|
||||
|
||||
public interface Callback {
|
||||
@@ -72,42 +69,16 @@ public class PullUpDialog extends RefactoringDialog {
|
||||
}
|
||||
|
||||
public PullUpDialog(Project project, PsiClass aClass, List<PsiClass> superClasses, MemberInfoStorage memberInfoStorage, Callback callback) {
|
||||
super(project, true);
|
||||
myClass = aClass;
|
||||
mySuperClasses = superClasses;
|
||||
myMemberInfoStorage = memberInfoStorage;
|
||||
myMemberInfos = myMemberInfoStorage.getClassMemberInfos(aClass);
|
||||
super(project, aClass, superClasses, memberInfoStorage, JavaPullUpHandler.REFACTORING_NAME);
|
||||
myCallback = callback;
|
||||
|
||||
setTitle(JavaPullUpHandler.REFACTORING_NAME);
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public PsiClass getSuperClass() {
|
||||
if (myClassCombo != null) {
|
||||
return (PsiClass) myClassCombo.getSelectedItem();
|
||||
}
|
||||
else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public int getJavaDocPolicy() {
|
||||
return myJavaDocPanel.getPolicy();
|
||||
}
|
||||
|
||||
public MemberInfo[] getSelectedMemberInfos() {
|
||||
ArrayList<MemberInfo> list = new ArrayList<MemberInfo>(myMemberInfos.size());
|
||||
for (MemberInfo info : myMemberInfos) {
|
||||
if (info.isChecked() && myMemberInfoModel.isMemberEnabled(info)) {
|
||||
list.add(info);
|
||||
}
|
||||
}
|
||||
return list.toArray(new MemberInfo[list.size()]);
|
||||
}
|
||||
|
||||
protected String getDimensionServiceKey() {
|
||||
return "#com.intellij.refactoring.memberPullUp.PullUpDialog";
|
||||
}
|
||||
@@ -116,51 +87,23 @@ public class PullUpDialog extends RefactoringDialog {
|
||||
return myInterfaceContainmentVerifier;
|
||||
}
|
||||
|
||||
protected JComponent createNorthPanel() {
|
||||
JPanel panel = new JPanel();
|
||||
|
||||
panel.setLayout(new GridBagLayout());
|
||||
GridBagConstraints gbConstraints = new GridBagConstraints();
|
||||
|
||||
gbConstraints.insets = new Insets(4, 0, 4, 8);
|
||||
gbConstraints.weighty = 1;
|
||||
gbConstraints.weightx = 1;
|
||||
gbConstraints.gridy = 0;
|
||||
gbConstraints.gridwidth = GridBagConstraints.REMAINDER;
|
||||
gbConstraints.fill = GridBagConstraints.BOTH;
|
||||
gbConstraints.anchor = GridBagConstraints.WEST;
|
||||
final JLabel classComboLabel = new JLabel();
|
||||
panel.add(classComboLabel, gbConstraints);
|
||||
|
||||
myClassCombo = new JComboBox(mySuperClasses.toArray());
|
||||
myClassCombo.setRenderer(new ClassCellRenderer(myClassCombo.getRenderer()));
|
||||
classComboLabel.setText(RefactoringBundle.message("pull.up.members.to", UsageViewUtil.getLongName(myClass)));
|
||||
classComboLabel.setLabelFor(myClassCombo);
|
||||
final PsiClass preselection = getPreselection();
|
||||
int indexToSelect = 0;
|
||||
if (preselection != null) {
|
||||
indexToSelect = mySuperClasses.indexOf(preselection);
|
||||
}
|
||||
myClassCombo.setSelectedIndex(indexToSelect);
|
||||
myClassCombo.addItemListener(new ItemListener() {
|
||||
@Override
|
||||
protected void initClassCombo(JComboBox classCombo) {
|
||||
classCombo.setRenderer(new ClassCellRenderer(classCombo.getRenderer()));
|
||||
classCombo.addItemListener(new ItemListener() {
|
||||
public void itemStateChanged(ItemEvent e) {
|
||||
if (e.getStateChange() == ItemEvent.SELECTED) {
|
||||
updateMemberInfo();
|
||||
if (myMemberSelectionPanel != null) {
|
||||
myMemberInfoModel.setSuperClass(getSuperClass());
|
||||
((MyMemberInfoModel)myMemberInfoModel).setSuperClass(getSuperClass());
|
||||
myMemberSelectionPanel.getTable().setMemberInfos(myMemberInfos);
|
||||
myMemberSelectionPanel.getTable().fireExternalDataChange();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
gbConstraints.gridy++;
|
||||
panel.add(myClassCombo, gbConstraints);
|
||||
|
||||
return panel;
|
||||
}
|
||||
|
||||
private PsiClass getPreselection() {
|
||||
protected PsiClass getPreselection() {
|
||||
PsiClass preselection = RefactoringHierarchyUtil.getNearestBaseClass(myClass, false);
|
||||
|
||||
final String statKey = PULL_UP_STATISTICS_KEY + myClass.getQualifiedName();
|
||||
@@ -185,15 +128,6 @@ public class PullUpDialog extends RefactoringDialog {
|
||||
HelpManager.getInstance().invokeHelp(HelpID.MEMBERS_PULL_UP);
|
||||
}
|
||||
|
||||
private void updateMemberInfo() {
|
||||
final PsiClass targetClass = (PsiClass) myClassCombo.getSelectedItem();
|
||||
myMemberInfos = myMemberInfoStorage.getIntermediateMemberInfosList(targetClass);
|
||||
/*Set duplicate = myMemberInfoStorage.getDuplicatedMemberInfos(targetClass);
|
||||
for (Iterator iterator = duplicate.getSectionsIterator(); getSectionsIterator.hasNext();) {
|
||||
((MemberInfo) iterator.next()).setChecked(false);
|
||||
}*/
|
||||
}
|
||||
|
||||
protected void doAction() {
|
||||
if (!myCallback.checkConflicts(this)) return;
|
||||
JavaRefactoringSettings.getInstance().PULL_UP_MEMBERS_JAVADOC = myJavaDocPanel.getPolicy();
|
||||
@@ -203,21 +137,15 @@ public class PullUpDialog extends RefactoringDialog {
|
||||
StatisticsManager
|
||||
.getInstance().incUseCount(new StatisticsInfo(PULL_UP_STATISTICS_KEY + myClass.getQualifiedName(), name));
|
||||
}
|
||||
|
||||
invokeRefactoring(new PullUpHelper(myClass, superClass, getSelectedMemberInfos(),
|
||||
|
||||
List<MemberInfo> infos = getSelectedMemberInfos();
|
||||
invokeRefactoring(new PullUpHelper(myClass, superClass, infos.toArray(new MemberInfo[infos.size()]),
|
||||
new DocCommentPolicy(getJavaDocPolicy())));
|
||||
close(OK_EXIT_CODE);
|
||||
}
|
||||
|
||||
protected JComponent createCenterPanel() {
|
||||
JPanel panel = new JPanel(new BorderLayout());
|
||||
myMemberSelectionPanel = new MemberSelectionPanel(RefactoringBundle.message("members.to.be.pulled.up"), myMemberInfos, RefactoringBundle.message("make.abstract"));
|
||||
myMemberInfoModel = new MyMemberInfoModel();
|
||||
myMemberInfoModel.memberInfoChanged(new MemberInfoChange<PsiMember, MemberInfo>(myMemberInfos));
|
||||
myMemberSelectionPanel.getTable().setMemberInfoModel(myMemberInfoModel);
|
||||
myMemberSelectionPanel.getTable().addMemberInfoChangeListener(myMemberInfoModel);
|
||||
panel.add(myMemberSelectionPanel, BorderLayout.CENTER);
|
||||
|
||||
@Override
|
||||
protected void addCustomElementsToCentralPanel(JPanel panel) {
|
||||
myJavaDocPanel = new DocCommentPanel(RefactoringBundle.message("javadoc.for.abstracts"));
|
||||
myJavaDocPanel.setPolicy(JavaRefactoringSettings.getInstance().PULL_UP_MEMBERS_JAVADOC);
|
||||
boolean hasJavadoc = false;
|
||||
@@ -233,14 +161,17 @@ public class PullUpDialog extends RefactoringDialog {
|
||||
}
|
||||
UIUtil.setEnabled(myJavaDocPanel, hasJavadoc, true);
|
||||
panel.add(myJavaDocPanel, BorderLayout.EAST);
|
||||
return panel;
|
||||
}
|
||||
private final InterfaceContainmentVerifier myInterfaceContainmentVerifier =
|
||||
new InterfaceContainmentVerifier() {
|
||||
public boolean checkedInterfacesContain(PsiMethod psiMethod) {
|
||||
return PullUpHelper.checkedInterfacesContain(myMemberInfos, psiMethod);
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
protected AbstractMemberSelectionTable<PsiMember, MemberInfo> createMemberSelectionTable(List<MemberInfo> infos) {
|
||||
return new MemberSelectionTable(infos, RefactoringBundle.message("make.abstract"));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected DelegatingMemberInfoModel<PsiMember, MemberInfo> createMemberInfoModel() {
|
||||
return new MyMemberInfoModel();
|
||||
}
|
||||
|
||||
private class MyMemberInfoModel extends UsesAndInterfacesDependencyMemberInfoModel {
|
||||
public MyMemberInfoModel() {
|
||||
@@ -296,11 +227,9 @@ public class PullUpDialog extends RefactoringDialog {
|
||||
PsiClass currentSuperClass = getSuperClass();
|
||||
|
||||
if (currentSuperClass != null && currentSuperClass.isInterface()) {
|
||||
PsiElement element = member.getMember();
|
||||
if (element instanceof PsiModifierListOwner) {
|
||||
if (((PsiModifierListOwner) element).hasModifierProperty(PsiModifier.STATIC)) {
|
||||
return super.checkForProblems(member);
|
||||
}
|
||||
PsiMember element = member.getMember();
|
||||
if (element.hasModifierProperty(PsiModifier.STATIC)) {
|
||||
return super.checkForProblems(member);
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
package com.intellij.refactoring.ui;
|
||||
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.refactoring.classMembers.MemberInfoBase;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* Nikolay.Tropin
|
||||
* 8/20/13
|
||||
*/
|
||||
public abstract class AbstractMemberSelectionPanel<T extends PsiElement, M extends MemberInfoBase<T>> extends JPanel {
|
||||
public abstract AbstractMemberSelectionTable<T, M> getTable();
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
* Copyright 2000-2013 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.
|
||||
|
||||
@@ -0,0 +1,150 @@
|
||||
/*
|
||||
* Copyright 2000-2013 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.memberPullUp;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.refactoring.RefactoringBundle;
|
||||
import com.intellij.refactoring.classMembers.AbstractMemberInfoStorage;
|
||||
import com.intellij.refactoring.classMembers.DelegatingMemberInfoModel;
|
||||
import com.intellij.refactoring.classMembers.MemberInfoBase;
|
||||
import com.intellij.refactoring.classMembers.MemberInfoChange;
|
||||
import com.intellij.refactoring.ui.AbstractMemberSelectionTable;
|
||||
import com.intellij.refactoring.ui.MemberSelectionPanelBase;
|
||||
import com.intellij.refactoring.ui.RefactoringDialog;
|
||||
import com.intellij.usageView.UsageViewUtil;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ItemEvent;
|
||||
import java.awt.event.ItemListener;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Max Medvedev
|
||||
*/
|
||||
public abstract class PullUpDialogBase<Storage extends AbstractMemberInfoStorage<Member, Class, MemberInfo>,
|
||||
MemberInfo extends MemberInfoBase<Member>,
|
||||
Member extends PsiElement,
|
||||
Class extends PsiElement> extends RefactoringDialog {
|
||||
protected MemberSelectionPanelBase<Member, MemberInfo, AbstractMemberSelectionTable<Member, MemberInfo>> myMemberSelectionPanel;
|
||||
protected DelegatingMemberInfoModel<Member, MemberInfo> myMemberInfoModel;
|
||||
protected final Class myClass;
|
||||
protected final List<Class> mySuperClasses;
|
||||
protected final Storage myMemberInfoStorage;
|
||||
protected List<MemberInfo> myMemberInfos;
|
||||
private JComboBox myClassCombo;
|
||||
|
||||
public PullUpDialogBase(Project project, Class aClass, List<Class> superClasses, Storage memberInfoStorage, String title) {
|
||||
super(project, true);
|
||||
myClass = aClass;
|
||||
mySuperClasses = superClasses;
|
||||
myMemberInfoStorage = memberInfoStorage;
|
||||
myMemberInfos = myMemberInfoStorage.getClassMemberInfos(aClass);
|
||||
|
||||
setTitle(title);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Class getSuperClass() {
|
||||
if (myClassCombo != null) {
|
||||
return (Class) myClassCombo.getSelectedItem();
|
||||
}
|
||||
else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public List<MemberInfo> getSelectedMemberInfos() {
|
||||
ArrayList<MemberInfo> list = new ArrayList<MemberInfo>(myMemberInfos.size());
|
||||
for (MemberInfo info : myMemberInfos) {
|
||||
if (info.isChecked() && myMemberInfoModel.isMemberEnabled(info)) {
|
||||
list.add(info);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
protected JComponent createNorthPanel() {
|
||||
JPanel panel = new JPanel();
|
||||
|
||||
panel.setLayout(new GridBagLayout());
|
||||
GridBagConstraints gbConstraints = new GridBagConstraints();
|
||||
|
||||
gbConstraints.insets = new Insets(4, 0, 4, 8);
|
||||
gbConstraints.weighty = 1;
|
||||
gbConstraints.weightx = 1;
|
||||
gbConstraints.gridy = 0;
|
||||
gbConstraints.gridwidth = GridBagConstraints.REMAINDER;
|
||||
gbConstraints.fill = GridBagConstraints.BOTH;
|
||||
gbConstraints.anchor = GridBagConstraints.WEST;
|
||||
final JLabel classComboLabel = new JLabel();
|
||||
panel.add(classComboLabel, gbConstraints);
|
||||
|
||||
myClassCombo = new JComboBox(mySuperClasses.toArray());
|
||||
initClassCombo(myClassCombo);
|
||||
classComboLabel.setText(RefactoringBundle.message("pull.up.members.to", UsageViewUtil.getLongName(myClass)));
|
||||
classComboLabel.setLabelFor(myClassCombo);
|
||||
final Class preselection = getPreselection();
|
||||
int indexToSelect = 0;
|
||||
if (preselection != null) {
|
||||
indexToSelect = mySuperClasses.indexOf(preselection);
|
||||
}
|
||||
myClassCombo.setSelectedIndex(indexToSelect);
|
||||
myClassCombo.addItemListener(new ItemListener() {
|
||||
public void itemStateChanged(ItemEvent e) {
|
||||
if (e.getStateChange() == ItemEvent.SELECTED) {
|
||||
updateMemberInfo();
|
||||
}
|
||||
}
|
||||
});
|
||||
gbConstraints.gridy++;
|
||||
panel.add(myClassCombo, gbConstraints);
|
||||
|
||||
return panel;
|
||||
}
|
||||
|
||||
protected abstract void initClassCombo(JComboBox classCombo);
|
||||
|
||||
protected abstract Class getPreselection();
|
||||
|
||||
private void updateMemberInfo() {
|
||||
final Class targetClass = (Class) myClassCombo.getSelectedItem();
|
||||
myMemberInfos = myMemberInfoStorage.getIntermediateMemberInfosList(targetClass);
|
||||
}
|
||||
|
||||
protected JComponent createCenterPanel() {
|
||||
JPanel panel = new JPanel(new BorderLayout());
|
||||
myMemberSelectionPanel = new MemberSelectionPanelBase<Member, MemberInfo, AbstractMemberSelectionTable<Member, MemberInfo>>(RefactoringBundle.message("members.to.be.pulled.up"), createMemberSelectionTable(myMemberInfos));
|
||||
myMemberInfoModel = createMemberInfoModel();
|
||||
myMemberInfoModel.memberInfoChanged(new MemberInfoChange<Member, MemberInfo>(myMemberInfos));
|
||||
myMemberSelectionPanel.getTable().setMemberInfoModel(myMemberInfoModel);
|
||||
myMemberSelectionPanel.getTable().addMemberInfoChangeListener(myMemberInfoModel);
|
||||
panel.add(myMemberSelectionPanel, BorderLayout.CENTER);
|
||||
|
||||
addCustomElementsToCentralPanel(panel);
|
||||
|
||||
return panel;
|
||||
}
|
||||
|
||||
protected void addCustomElementsToCentralPanel(JPanel panel) { }
|
||||
|
||||
protected abstract AbstractMemberSelectionTable<Member,MemberInfo> createMemberSelectionTable(List<MemberInfo> infos);
|
||||
|
||||
protected abstract DelegatingMemberInfoModel<Member, MemberInfo> createMemberInfoModel();
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright 2000-2013 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.psi.PsiElement;
|
||||
import com.intellij.refactoring.classMembers.MemberInfoBase;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* Nikolay.Tropin
|
||||
* 8/20/13
|
||||
*/
|
||||
public abstract class AbstractMemberSelectionPanel<T extends PsiElement, M extends MemberInfoBase<T>> extends JPanel {
|
||||
public abstract AbstractMemberSelectionTable<T, M> getTable();
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright 2000-2013 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.psi.PsiElement;
|
||||
import com.intellij.refactoring.classMembers.MemberInfoBase;
|
||||
import com.intellij.ui.ScrollPaneFactory;
|
||||
import com.intellij.ui.SeparatorFactory;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
||||
/**
|
||||
* @author Max Medvedev
|
||||
*/
|
||||
public class MemberSelectionPanelBase<Member extends PsiElement,
|
||||
MemberInfo extends MemberInfoBase<Member>,
|
||||
Table extends AbstractMemberSelectionTable<Member, MemberInfo>> extends AbstractMemberSelectionPanel<Member, MemberInfo> {
|
||||
private final Table myTable;
|
||||
|
||||
/**
|
||||
* @param title if title contains 'm' - it would look and feel as mnemonic
|
||||
*/
|
||||
public MemberSelectionPanelBase(String title, Table table) {
|
||||
super();
|
||||
setLayout(new BorderLayout());
|
||||
|
||||
myTable = table;
|
||||
JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(myTable);
|
||||
add(SeparatorFactory.createSeparator(title, myTable), BorderLayout.NORTH);
|
||||
add(scrollPane, BorderLayout.CENTER);
|
||||
}
|
||||
|
||||
public Table getTable() {
|
||||
return myTable;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user