moved to java-psi

This commit is contained in:
Alexey Kudravtsev
2013-05-28 11:13:16 +04:00
parent 1be15d831e
commit c2ec8ad25b
39 changed files with 297 additions and 243 deletions
@@ -30,6 +30,7 @@ import com.intellij.refactoring.ui.NameSuggestionsField;
import com.intellij.refactoring.util.CommonRefactoringUtil;
import com.intellij.refactoring.util.ParameterTablePanel;
import com.intellij.refactoring.util.RefactoringMessageUtil;
import com.intellij.refactoring.util.VariableData;
import com.intellij.ui.IdeBorderFactory;
import com.intellij.ui.NonFocusableCheckBox;
import com.intellij.util.Function;
@@ -49,7 +50,7 @@ class AnonymousToInnerDialog extends DialogWrapper{
private final boolean myShowCanBeStatic;
private NameSuggestionsField myNameField;
private final ParameterTablePanel.VariableData[] myVariableData;
private final VariableData[] myVariableData;
private final Map<PsiVariable,VariableInfo> myVariableToInfoMap = new HashMap<PsiVariable, VariableInfo>();
private JCheckBox myCbMakeStatic;
@@ -65,7 +66,7 @@ class AnonymousToInnerDialog extends DialogWrapper{
for (VariableInfo info : variableInfos) {
myVariableToInfoMap.put(info.variable, info);
}
myVariableData = new ParameterTablePanel.VariableData[variableInfos.length];
myVariableData = new VariableData[variableInfos.length];
final JavaCodeStyleManager codeStyleManager = JavaCodeStyleManager.getInstance(myProject);
for(int idx = 0; idx < variableInfos.length; idx++){
@@ -74,7 +75,7 @@ class AnonymousToInnerDialog extends DialogWrapper{
VariableKind kind = codeStyleManager.getVariableKind(info.variable);
name = codeStyleManager.variableNameToPropertyName(name, kind);
name = codeStyleManager.propertyNameToVariableName(name, VariableKind.PARAMETER);
ParameterTablePanel.VariableData data = new ParameterTablePanel.VariableData(info.variable);
VariableData data = new VariableData(info.variable);
data.name = name;
data.passAsParameter = true;
myVariableData[idx] = data;
@@ -127,7 +128,7 @@ class AnonymousToInnerDialog extends DialogWrapper{
JavaCodeStyleManager codeStyleManager = JavaCodeStyleManager.getInstance(myProject);
VariableInfo[] infos = new VariableInfo[myVariableData.length];
for (int idx = 0; idx < myVariableData.length; idx++) {
ParameterTablePanel.VariableData data = myVariableData[idx];
VariableData data = myVariableData[idx];
VariableInfo info = myVariableToInfoMap.get(data.variable);
info.passAsParameter = data.passAsParameter;
@@ -23,7 +23,7 @@ package com.intellij.refactoring.extractMethod;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.psi.PsiModifier;
import com.intellij.refactoring.util.ParameterTablePanel;
import com.intellij.refactoring.util.VariableData;
public abstract class AbstractExtractDialog extends DialogWrapper {
protected AbstractExtractDialog(Project project) {
@@ -33,7 +33,7 @@ public abstract class AbstractExtractDialog extends DialogWrapper {
public abstract String getChosenMethodName();
public abstract ParameterTablePanel.VariableData[] getChosenParameters();
public abstract VariableData[] getChosenParameters();
@PsiModifier.ModifierConstant
public abstract String getVisibility();
@@ -32,6 +32,7 @@ import com.intellij.refactoring.ui.JavaComboBoxVisibilityPanel;
import com.intellij.refactoring.ui.MethodSignatureComponent;
import com.intellij.refactoring.util.ConflictsUtil;
import com.intellij.refactoring.util.ParameterTablePanel;
import com.intellij.refactoring.util.VariableData;
import com.intellij.ui.EditorTextField;
import com.intellij.ui.IdeBorderFactory;
import com.intellij.ui.NonFocusableCheckBox;
@@ -81,7 +82,7 @@ public class ExtractMethodDialog extends AbstractExtractDialog {
private final JCheckBox myFoldParameters = new NonFocusableCheckBox(RefactoringBundle.message("declare.folded.parameters"));
public JPanel myCenterPanel;
public JPanel myParamTable;
private ParameterTablePanel.VariableData[] myInputVariables;
private VariableData[] myInputVariables;
public ExtractMethodDialog(Project project,
PsiClass targetClass, final InputVariables inputVariables, PsiType returnType,
@@ -156,7 +157,7 @@ public class ExtractMethodDialog extends AbstractExtractDialog {
return myNameField.getText();
}
public ParameterTablePanel.VariableData[] getChosenParameters() {
public VariableData[] getChosenParameters() {
return myInputVariables;
}
@@ -182,7 +183,7 @@ public class ExtractMethodDialog extends AbstractExtractDialog {
}
if (myMakeVarargs != null && myMakeVarargs.isSelected()) {
final ParameterTablePanel.VariableData data = myInputVariables[myInputVariables.length - 1];
final VariableData data = myInputVariables[myInputVariables.length - 1];
if (data.type instanceof PsiArrayType) {
data.type = new PsiEllipsisType(((PsiArrayType)data.type).getComponentType());
}
@@ -243,12 +244,12 @@ public class ExtractMethodDialog extends AbstractExtractDialog {
myFoldParameters.setSelected(myVariableData.isFoldingSelectedByDefault());
myFoldParameters.setVisible(myVariableData.isFoldable());
myVariableData.setFoldingAvailable(myFoldParameters.isSelected());
myInputVariables = myVariableData.getInputVariables().toArray(new ParameterTablePanel.VariableData[myVariableData.getInputVariables().size()]);
myInputVariables = myVariableData.getInputVariables().toArray(new VariableData[myVariableData.getInputVariables().size()]);
myFoldParameters.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
myVariableData.setFoldingAvailable(myFoldParameters.isSelected());
myInputVariables =
myVariableData.getInputVariables().toArray(new ParameterTablePanel.VariableData[myVariableData.getInputVariables().size()]);
myVariableData.getInputVariables().toArray(new VariableData[myVariableData.getInputVariables().size()]);
updateVarargsEnabled();
createParametersPanel();
updateSignature();
@@ -258,7 +259,7 @@ public class ExtractMethodDialog extends AbstractExtractDialog {
myFoldParameters.setBorder(emptyBorder);
boolean canBeVarargs = false;
for (ParameterTablePanel.VariableData data : myInputVariables) {
for (VariableData data : myInputVariables) {
canBeVarargs |= data.type instanceof PsiArrayType;
}
if (myVariableData.isFoldable()) {
@@ -453,10 +454,10 @@ public class ExtractMethodDialog extends AbstractExtractDialog {
final String INDENT = StringUtil.repeatSymbol(' ', buffer.length());
final ParameterTablePanel.VariableData[] datas = myInputVariables;
final VariableData[] datas = myInputVariables;
int count = 0;
for (int i = 0; i < datas.length;i++) {
ParameterTablePanel.VariableData data = datas[i];
VariableData data = datas[i];
if (data.passAsParameter) {
//String typeAndModifiers = PsiFormatUtil.formatVariable(data.variable,
// PsiFormatUtil.SHOW_MODIFIERS | PsiFormatUtil.SHOW_TYPE);
@@ -500,7 +501,7 @@ public class ExtractMethodDialog extends AbstractExtractDialog {
PsiElementFactory factory = JavaPsiFacade.getInstance(myProject).getElementFactory();
prototype = factory.createMethod(myNameField.getText().trim(), myReturnType);
if (myTypeParameterList != null) prototype.getTypeParameterList().replace(myTypeParameterList);
for (ParameterTablePanel.VariableData data : myInputVariables) {
for (VariableData data : myInputVariables) {
if (data.passAsParameter) {
prototype.getParameterList().add(factory.createParameter(data.name, data.type));
}
@@ -67,10 +67,7 @@ import com.intellij.refactoring.introduceField.ElementToWorkOn;
import com.intellij.refactoring.introduceVariable.IntroduceVariableBase;
import com.intellij.refactoring.util.*;
import com.intellij.refactoring.util.classMembers.ElementNeedsThis;
import com.intellij.refactoring.util.duplicates.DuplicatesFinder;
import com.intellij.refactoring.util.duplicates.Match;
import com.intellij.refactoring.util.duplicates.MatchProvider;
import com.intellij.refactoring.util.duplicates.VariableReturnValue;
import com.intellij.refactoring.util.duplicates.*;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.Processor;
@@ -105,7 +102,7 @@ public class ExtractMethodProcessor implements MatchProvider {
protected String myMethodName; // name for extracted method
protected PsiType myReturnType; // return type for extracted method
protected PsiTypeParameterList myTypeParameterList; //type parameter list of extracted method
private ParameterTablePanel.VariableData[] myVariableDatum; // parameter data for extracted method
private VariableData[] myVariableDatum; // parameter data for extracted method
protected PsiClassType[] myThrownExceptions; // exception to declare as thrown by extracted method
protected boolean myStatic; // whether to declare extracted method static
@@ -547,7 +544,7 @@ public class ExtractMethodProcessor implements MatchProvider {
public void testPrepare() {
myInputVariables.setFoldingAvailable(myInputVariables.isFoldingSelectedByDefault());
myMethodName = myInitialMethodName;
myVariableDatum = new ParameterTablePanel.VariableData[myInputVariables.getInputVariables().size()];
myVariableDatum = new VariableData[myInputVariables.getInputVariables().size()];
for (int i = 0; i < myInputVariables.getInputVariables().size(); i++) {
myVariableDatum[i] = myInputVariables.getInputVariables().get(i);
}
@@ -806,7 +803,7 @@ public class ExtractMethodProcessor implements MatchProvider {
adjustFinalParameters(newMethod);
int i = 0;
for (ParameterTablePanel.VariableData data : myVariableDatum) {
for (VariableData data : myVariableDatum) {
if (!data.passAsParameter) continue;
final PsiVariable variable = data.variable;
final PsiParameter psiParameter = newMethod.getParameterList().getParameters()[i++];
@@ -927,20 +924,20 @@ public class ExtractMethodProcessor implements MatchProvider {
}
public PsiElement processMatch(Match match) throws IncorrectOperationException {
match.changeSignature(myExtractedMethod);
MatchUtil.changeSignature(match, myExtractedMethod);
if (RefactoringUtil.isInStaticContext(match.getMatchStart(), myExtractedMethod.getContainingClass())) {
PsiUtil.setModifierProperty(myExtractedMethod, PsiModifier.STATIC, true);
}
final PsiMethodCallExpression methodCallExpression = generateMethodCall(match.getInstanceExpression(), false);
ArrayList<ParameterTablePanel.VariableData> datas = new ArrayList<ParameterTablePanel.VariableData>();
for (final ParameterTablePanel.VariableData variableData : myVariableDatum) {
ArrayList<VariableData> datas = new ArrayList<VariableData>();
for (final VariableData variableData : myVariableDatum) {
if (variableData.passAsParameter) {
datas.add(variableData);
}
}
final PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(myProject);
for (ParameterTablePanel.VariableData data : datas) {
for (VariableData data : datas) {
final List<PsiElement> parameterValue = match.getParameterValues(data.variable);
if (parameterValue != null) {
for (PsiElement val : parameterValue) {
@@ -984,7 +981,7 @@ public class ExtractMethodProcessor implements MatchProvider {
}
private void renameInputVariables() throws IncorrectOperationException {
for (ParameterTablePanel.VariableData data : myVariableDatum) {
for (VariableData data : myVariableDatum) {
PsiVariable variable = data.variable;
if (!data.name.equals(variable.getName())) {
for (PsiElement element : myElements) {
@@ -1016,7 +1013,7 @@ public class ExtractMethodProcessor implements MatchProvider {
boolean isFinal = CodeStyleSettingsManager.getSettings(myProject).GENERATE_FINAL_PARAMETERS;
PsiParameterList list = newMethod.getParameterList();
for (ParameterTablePanel.VariableData data : myVariableDatum) {
for (VariableData data : myVariableDatum) {
if (data.passAsParameter) {
PsiParameter parm = myElementFactory.createParameter(data.name, data.type);
if (isFinal) {
@@ -1105,7 +1102,7 @@ public class ExtractMethodProcessor implements MatchProvider {
buffer.append("(");
if (generateArgs) {
int count = 0;
for (ParameterTablePanel.VariableData data : myVariableDatum) {
for (VariableData data : myVariableDatum) {
if (data.passAsParameter) {
if (count > 0) {
buffer.append(",");
@@ -1253,7 +1250,7 @@ public class ExtractMethodProcessor implements MatchProvider {
}
private String getNewVariableName(PsiVariable variable) {
for (ParameterTablePanel.VariableData data : myVariableDatum) {
for (VariableData data : myVariableDatum) {
if (data.variable.equals(variable)) {
return data.name;
}
@@ -1374,7 +1371,8 @@ public class ExtractMethodProcessor implements MatchProvider {
@Nullable
public String getConfirmDuplicatePrompt(Match match) {
final boolean needToBeStatic = RefactoringUtil.isInStaticContext(match.getMatchStart(), myExtractedMethod.getContainingClass());
final String changedSignature = match.getChangedSignature(myExtractedMethod, needToBeStatic, VisibilityUtil.getVisibilityStringToDisplay(myExtractedMethod));
final String changedSignature = MatchUtil
.getChangedSignature(match, myExtractedMethod, needToBeStatic, VisibilityUtil.getVisibilityStringToDisplay(myExtractedMethod));
if (changedSignature != null) {
return RefactoringBundle.message("replace.this.code.fragment.and.change.signature", changedSignature);
}
@@ -27,6 +27,7 @@ import com.intellij.refactoring.extractMethod.AbstractExtractDialog;
import com.intellij.refactoring.extractMethod.InputVariables;
import com.intellij.refactoring.ui.ConflictsDialog;
import com.intellij.refactoring.util.ParameterTablePanel;
import com.intellij.refactoring.util.VariableData;
import com.intellij.ui.EditorTextField;
import com.intellij.util.Function;
import com.intellij.util.VisibilityUtil;
@@ -78,7 +79,7 @@ public class ExtractMethodObjectDialog extends AbstractExtractDialog {
private JPanel myAnonymousClassPanel;
private JCheckBox myFoldCb;
private ButtonGroup myVisibilityGroup;
private ParameterTablePanel.VariableData[] myInputVariables;
private VariableData[] myInputVariables;
public ExtractMethodObjectDialog(Project project, PsiClass targetClass, final InputVariables inputVariables, PsiType returnType,
@@ -96,7 +97,7 @@ public class ExtractMethodObjectDialog extends AbstractExtractDialog {
myMultipleExitPoints = multipleExitPoints;
boolean canBeVarargs = false;
for (ParameterTablePanel.VariableData data : inputVariables.getInputVariables()) {
for (VariableData data : inputVariables.getInputVariables()) {
canBeVarargs |= data.type instanceof PsiArrayType;
}
canBeVarargs |= inputVariables.isFoldable() && inputVariables.isFoldingSelectedByDefault();
@@ -136,7 +137,7 @@ public class ExtractMethodObjectDialog extends AbstractExtractDialog {
return myCreateInnerClassRb.isSelected() ? myInnerClassName.getText() : myMethodName.getText();
}
public ParameterTablePanel.VariableData[] getChosenParameters() {
public VariableData[] getChosenParameters() {
return myInputVariables;
}
@@ -167,7 +168,7 @@ public class ExtractMethodObjectDialog extends AbstractExtractDialog {
final JCheckBox makeVarargsCb = myCreateInnerClassRb.isSelected() ? myCbMakeVarargs : myCbMakeVarargsAnonymous;
if (makeVarargsCb != null && makeVarargsCb.isSelected()) {
final ParameterTablePanel.VariableData data = myInputVariables[myInputVariables.length - 1];
final VariableData data = myInputVariables[myInputVariables.length - 1];
if (data.type instanceof PsiArrayType) {
data.type = new PsiEllipsisType(((PsiArrayType)data.type).getComponentType());
}
@@ -212,7 +213,7 @@ public class ExtractMethodObjectDialog extends AbstractExtractDialog {
protected JComponent createCenterPanel() {
mySignatureArea.setEditable(false);
myCreateInnerClassRb.setSelected(true);
final ActionListener enableDisableListener = new ActionListener() {
public void actionPerformed(final ActionEvent e) {
enable(myCreateInnerClassRb.isSelected());
@@ -225,11 +226,11 @@ public class ExtractMethodObjectDialog extends AbstractExtractDialog {
myFoldCb.setSelected(myVariableData.isFoldingSelectedByDefault());
myFoldCb.setVisible(myVariableData.isFoldable());
myVariableData.setFoldingAvailable(myFoldCb.isSelected());
myInputVariables = myVariableData.getInputVariables().toArray(new ParameterTablePanel.VariableData[myVariableData.getInputVariables().size()]);
myInputVariables = myVariableData.getInputVariables().toArray(new VariableData[myVariableData.getInputVariables().size()]);
myFoldCb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
myVariableData.setFoldingAvailable(myFoldCb.isSelected());
myInputVariables = myVariableData.getInputVariables().toArray(new ParameterTablePanel.VariableData[myVariableData.getInputVariables().size()]);
myInputVariables = myVariableData.getInputVariables().toArray(new VariableData[myVariableData.getInputVariables().size()]);
myParametersTableContainer.removeAll();
myParametersTableContainer.add(createParametersPanel(), BorderLayout.CENTER);
updateSignature();
@@ -359,8 +360,8 @@ public class ExtractMethodObjectDialog extends AbstractExtractDialog {
buffer.append("\n}.");
buffer.append(myMethodName.getText());
buffer.append("(");
buffer.append(StringUtil.join(myInputVariables, new Function<ParameterTablePanel.VariableData, String>() {
public String fun(final ParameterTablePanel.VariableData variableData) {
buffer.append(StringUtil.join(myInputVariables, new Function<VariableData, String>() {
public String fun(final VariableData variableData) {
return variableData.name;
}
}, ", "));
@@ -375,7 +376,7 @@ public class ExtractMethodObjectDialog extends AbstractExtractDialog {
int count = 0;
final String indent = " ";
for (int i = 0; i < myInputVariables.length; i++) {
ParameterTablePanel.VariableData data = myInputVariables[i];
VariableData data = myInputVariables[i];
if (data.passAsParameter) {
//String typeAndModifiers = PsiFormatUtil.formatVariable(data.variable,
// PsiFormatUtil.SHOW_MODIFIERS | PsiFormatUtil.SHOW_TYPE);
@@ -32,6 +32,7 @@ import com.intellij.refactoring.move.moveClassesOrPackages.DestinationFolderComb
import com.intellij.refactoring.ui.PackageNameReferenceEditorCombo;
import com.intellij.refactoring.ui.RefactoringDialog;
import com.intellij.refactoring.util.ParameterTablePanel;
import com.intellij.refactoring.util.VariableData;
import com.intellij.ui.ComboboxWithBrowseButton;
import com.intellij.ui.DocumentAdapter;
import com.intellij.ui.RecentsManager;
@@ -53,7 +54,7 @@ import java.util.List;
public class IntroduceParameterObjectDialog extends RefactoringDialog {
private final PsiMethod sourceMethod;
private final ParameterTablePanel.VariableData[] parameterInfo;
private final VariableData[] parameterInfo;
private JTextField sourceMethodTextField;
private JRadioButton useExistingClassButton;
@@ -94,9 +95,9 @@ public class IntroduceParameterObjectDialog extends RefactoringDialog {
myInnerClassNameTextField.getDocument().addDocumentListener(docListener);
final PsiParameterList parameterList = sourceMethod.getParameterList();
final PsiParameter[] parameters = parameterList.getParameters();
parameterInfo = new ParameterTablePanel.VariableData[parameters.length];
parameterInfo = new VariableData[parameters.length];
for (int i = 0; i < parameterInfo.length; i++) {
parameterInfo[i] = new ParameterTablePanel.VariableData(parameters[i]);
parameterInfo[i] = new VariableData(parameters[i]);
parameterInfo[i].name = parameters[i].getName();
parameterInfo[i].passAsParameter = true;
}
@@ -164,8 +165,8 @@ public class IntroduceParameterObjectDialog extends RefactoringDialog {
packageName = getPackageName();
className = getClassName();
}
List<ParameterTablePanel.VariableData> parameters = new ArrayList<ParameterTablePanel.VariableData>();
for (ParameterTablePanel.VariableData data : parameterInfo) {
List<VariableData> parameters = new ArrayList<VariableData>();
for (VariableData data : parameterInfo) {
if (data.passAsParameter) {
parameters.add(data);
}
@@ -175,7 +176,7 @@ public class IntroduceParameterObjectDialog extends RefactoringDialog {
final MoveDestination moveDestination = ((DestinationFolderComboBox)myDestinationCb)
.selectDirectory(new PackageWrapper(PsiManager.getInstance(myProject), packageName), false);
invokeRefactoring(new IntroduceParameterObjectProcessor(className, packageName, moveDestination, sourceMethod,
parameters.toArray(new ParameterTablePanel.VariableData[parameters.size()]),
parameters.toArray(new VariableData[parameters.size()]),
keepMethod, useExistingClass,
createInnerClass, newVisibility, myGenerateAccessorsCheckBox.isSelected()));
}
@@ -238,7 +239,7 @@ public class IntroduceParameterObjectDialog extends RefactoringDialog {
@NotNull
public List<PsiParameter> getParametersToExtract() {
final List<PsiParameter> out = new ArrayList<PsiParameter>();
for (ParameterTablePanel.VariableData info : parameterInfo) {
for (VariableData info : parameterInfo) {
if (info.passAsParameter) {
out.add((PsiParameter)info.variable);
}
@@ -37,10 +37,7 @@ import com.intellij.psi.util.TypeConversionUtil;
import com.intellij.refactoring.MoveDestination;
import com.intellij.refactoring.RefactorJBundle;
import com.intellij.refactoring.introduceparameterobject.usageInfo.*;
import com.intellij.refactoring.util.FixableUsageInfo;
import com.intellij.refactoring.util.FixableUsagesRefactoringProcessor;
import com.intellij.refactoring.util.ParameterTablePanel;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.refactoring.util.*;
import com.intellij.usageView.UsageInfo;
import com.intellij.usageView.UsageViewDescriptor;
import com.intellij.util.IncorrectOperationException;
@@ -76,7 +73,7 @@ public class IntroduceParameterObjectProcessor extends FixableUsagesRefactoringP
String packageName,
MoveDestination moveDestination,
PsiMethod method,
ParameterTablePanel.VariableData[] parameters, boolean keepMethodAsDelegate, final boolean useExistingClass,
VariableData[] parameters, boolean keepMethodAsDelegate, final boolean useExistingClass,
final boolean createInnerClass,
String newVisibility,
boolean generateAccessors) {
@@ -91,14 +88,14 @@ public class IntroduceParameterObjectProcessor extends FixableUsagesRefactoringP
myNewVisibility = newVisibility;
myGenerateAccessors = generateAccessors;
this.parameters = new ArrayList<ParameterChunk>();
for (ParameterTablePanel.VariableData parameter : parameters) {
for (VariableData parameter : parameters) {
this.parameters.add(new ParameterChunk(parameter));
}
final PsiParameterList parameterList = method.getParameterList();
final PsiParameter[] methodParams = parameterList.getParameters();
paramsToMerge = new int[parameters.length];
for (int p = 0; p < parameters.length; p++) {
ParameterTablePanel.VariableData parameter = parameters[p];
VariableData parameter = parameters[p];
for (int i = 0; i < methodParams.length; i++) {
final PsiParameter methodParam = methodParams[i];
if (parameter.variable.equals(methodParam)) {
@@ -118,7 +115,7 @@ public class IntroduceParameterObjectProcessor extends FixableUsagesRefactoringP
return super.visitClassType(classType);
}
};
for (ParameterTablePanel.VariableData parameter : parameters) {
for (VariableData parameter : parameters) {
parameter.type.accept(typeParametersVisitor);
}
typeParams = new ArrayList<PsiTypeParameter>(typeParamSet);
@@ -265,7 +262,7 @@ public class IntroduceParameterObjectProcessor extends FixableUsagesRefactoringP
beanClassBuilder.setClassName(className);
beanClassBuilder.setPackageName(packageName);
for (ParameterChunk parameterChunk : parameters) {
final ParameterTablePanel.VariableData parameter = parameterChunk.parameter;
final VariableData parameter = parameterChunk.parameter;
final boolean setterRequired = paramsNeedingSetters.contains(parameter.variable);
beanClassBuilder.addField((PsiParameter)parameter.variable, parameter.name, parameter.type, setterRequired);
}
@@ -438,12 +435,12 @@ public class IntroduceParameterObjectProcessor extends FixableUsagesRefactoringP
}
public static class ParameterChunk {
private final ParameterTablePanel.VariableData parameter;
private final VariableData parameter;
private PsiField field;
private String getter;
private String setter;
public ParameterChunk(ParameterTablePanel.VariableData parameter) {
public ParameterChunk(VariableData parameter) {
this.parameter = parameter;
}
@@ -19,7 +19,7 @@
* User: dsl
* Date: 04.07.2002
* Time: 13:14:49
* To change template for new class use
* To change template for new class use
* Code Style | Class Templates options (Tools | IDE Options).
*/
package com.intellij.refactoring.makeStatic;
@@ -30,7 +30,7 @@ import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiTypeParameterListOwner;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.ui.RefactoringDialog;
import com.intellij.refactoring.util.ParameterTablePanel;
import com.intellij.refactoring.util.VariableData;
import com.intellij.usageView.UsageViewUtil;
import javax.swing.*;
@@ -68,7 +68,7 @@ public abstract class AbstractMakeStaticDialog extends RefactoringDialog {
public abstract String getClassParameterName();
public abstract ParameterTablePanel.VariableData[] getVariableData();
public abstract VariableData[] getVariableData();
public abstract boolean isReplaceUsages();
@@ -34,6 +34,7 @@ import com.intellij.psi.*;
import com.intellij.refactoring.HelpID;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.util.ParameterTablePanel;
import com.intellij.refactoring.util.VariableData;
import com.intellij.ui.DocumentAdapter;
import com.intellij.usageView.UsageViewUtil;
@@ -52,7 +53,7 @@ public class MakeParameterizedStaticDialog extends AbstractMakeStaticDialog {
private final JCheckBox myMakeFieldParameters = new JCheckBox();
private ParameterTablePanel myParameterPanel;
private ParameterTablePanel.VariableData[] myVariableData;
private VariableData[] myVariableData;
private final boolean myAnyNonFieldMembersUsed;
@@ -71,10 +72,10 @@ public class MakeParameterizedStaticDialog extends AbstractMakeStaticDialog {
}
private boolean buildVariableData(InternalUsageInfo[] internalUsages) {
ArrayList<ParameterTablePanel.VariableData> variableDatum = new ArrayList<ParameterTablePanel.VariableData>();
ArrayList<VariableData> variableDatum = new ArrayList<VariableData>();
boolean nonFieldUsages = MakeStaticUtil.collectVariableData(myMember, internalUsages, variableDatum);
myVariableData = variableDatum.toArray(new ParameterTablePanel.VariableData[0]);
myVariableData = variableDatum.toArray(new VariableData[0]);
return nonFieldUsages;
}
@@ -109,7 +110,7 @@ public class MakeParameterizedStaticDialog extends AbstractMakeStaticDialog {
*
* @return null if field parameters are not selected
*/
public ParameterTablePanel.VariableData[] getVariableData() {
public VariableData[] getVariableData() {
if(myMakeFieldParameters != null && myMakeFieldParameters.isSelected()) {
return myVariableData;
}
@@ -29,8 +29,8 @@ import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.intellij.psi.codeStyle.VariableKind;
import com.intellij.psi.util.InheritanceUtil;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.refactoring.util.ParameterTablePanel;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.refactoring.util.VariableData;
import java.util.ArrayList;
import java.util.Collections;
@@ -132,13 +132,13 @@ public class MakeStaticUtil {
return false;
}
public static boolean buildVariableData(PsiTypeParameterListOwner member, ArrayList<ParameterTablePanel.VariableData> result) {
public static boolean buildVariableData(PsiTypeParameterListOwner member, ArrayList<VariableData> result) {
final InternalUsageInfo[] classRefsInMethod = findClassRefsInMember(member, false);
return collectVariableData(member, classRefsInMethod, result);
}
public static boolean collectVariableData(PsiMember member, InternalUsageInfo[] internalUsages,
ArrayList<ParameterTablePanel.VariableData> variableDatum) {
ArrayList<VariableData> variableDatum) {
HashSet<PsiField> reported = new HashSet<PsiField>();
HashSet<PsiField> accessedForWriting = new HashSet<PsiField>();
boolean needClassParameter = false;
@@ -165,7 +165,7 @@ public class MakeStaticUtil {
});
for (final PsiField field : psiFields) {
if (accessedForWriting.contains(field)) continue;
ParameterTablePanel.VariableData data = new ParameterTablePanel.VariableData(field);
VariableData data = new VariableData(field);
JavaCodeStyleManager codeStyleManager = JavaCodeStyleManager.getInstance(member.getProject());
String name = field.getName();
name = codeStyleManager.variableNameToPropertyName(name, VariableKind.FIELD);
@@ -19,14 +19,14 @@
* User: dsl
* Date: 01.07.2002
* Time: 15:48:33
* To change template for new class use
* To change template for new class use
* Code Style | Class Templates options (Tools | IDE Options).
*/
package com.intellij.refactoring.makeStatic;
import com.intellij.psi.PsiField;
import com.intellij.psi.PsiType;
import com.intellij.refactoring.util.ParameterTablePanel;
import com.intellij.refactoring.util.VariableData;
import com.intellij.util.containers.HashMap;
import org.jetbrains.annotations.Nullable;
@@ -56,7 +56,7 @@ public final class Settings {
public Settings(boolean replaceUsages, String classParameterName,
ParameterTablePanel.VariableData[] variableDatum) {
VariableData[] variableDatum) {
myReplaceUsages = replaceUsages;
myMakeClassParameter = classParameterName != null;
myClassParameterName = classParameterName;
@@ -64,7 +64,7 @@ public final class Settings {
myFieldToNameList = new ArrayList<FieldParameter>();
if(myMakeFieldParameters) {
myFieldToNameMapping = new com.intellij.util.containers.HashMap<PsiField, String>();
for (ParameterTablePanel.VariableData data : variableDatum) {
for (VariableData data : variableDatum) {
if (data.passAsParameter) {
myFieldToNameMapping.put((PsiField)data.variable, data.name);
myFieldToNameList.add(new FieldParameter((PsiField)data.variable, data.name, data.type));
@@ -76,7 +76,7 @@ public final class Settings {
}
}
public Settings(boolean replaceUsages, String classParameterName,
public Settings(boolean replaceUsages, String classParameterName,
PsiField[] fields, String[] names) {
myReplaceUsages = replaceUsages;
myMakeClassParameter = classParameterName != null;
@@ -96,7 +96,7 @@ public final class Settings {
myFieldToNameMapping = null;
}
}
public boolean isReplaceUsages() {
return myReplaceUsages;
}
@@ -19,7 +19,7 @@
* User: dsl
* Date: 04.07.2002
* Time: 13:54:39
* To change template for new class use
* To change template for new class use
* Code Style | Class Templates options (Tools | IDE Options).
*/
package com.intellij.refactoring.makeStatic;
@@ -30,8 +30,7 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiTypeParameterListOwner;
import com.intellij.refactoring.HelpID;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.util.ParameterTablePanel;
import com.intellij.ui.IdeBorderFactory;
import com.intellij.refactoring.util.VariableData;
import com.intellij.usageView.UsageViewUtil;
import javax.swing.*;
@@ -59,7 +58,7 @@ public class SimpleMakeStaticDialog extends AbstractMakeStaticDialog {
return null;
}
public ParameterTablePanel.VariableData[] getVariableData() {
public VariableData[] getVariableData() {
return null;
}
@@ -59,23 +59,6 @@ public abstract class ParameterTablePanel extends JPanel {
return myVariableData;
}
public static class VariableData {
public final PsiVariable variable;
public PsiType type;
public String name;
public boolean passAsParameter;
public VariableData(PsiVariable var) {
variable = var;
type = var.getType();
}
public VariableData(PsiVariable var, PsiType type) {
variable = var;
this.type = SmartTypePointerManager.getInstance(var.getProject()).createSmartTypePointer(type).getType();
}
}
protected abstract void updateSignature();
protected abstract void doEnterAction();
@@ -0,0 +1,116 @@
/*
* 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.util.duplicates;
import com.intellij.codeInsight.PsiEquivalenceUtil;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiFormatUtil;
import com.intellij.refactoring.changeSignature.ChangeSignatureProcessor;
import com.intellij.refactoring.changeSignature.ParameterInfoImpl;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class MatchUtil {
@Nullable
public static String getChangedSignature(Match match, final PsiMethod method, final boolean shouldBeStatic, String visibility) {
final PsiType returnType = match.getChangedReturnType(method);
if (!match.myChangedParams.isEmpty() || returnType != null) {
@NonNls StringBuilder buffer = new StringBuilder();
buffer.append(visibility);
if (buffer.length() > 0) {
buffer.append(" ");
}
if (shouldBeStatic) {
buffer.append("static ");
}
final PsiTypeParameterList typeParameterList = method.getTypeParameterList();
if (typeParameterList != null) {
buffer.append(typeParameterList.getText());
buffer.append(" ");
}
buffer.append(PsiFormatUtil.formatType(returnType != null ? returnType : method.getReturnType(), 0, PsiSubstitutor.EMPTY));
buffer.append(" ");
buffer.append(method.getName());
buffer.append("(");
int count = 0;
final String INDENT = " ";
final List<ParameterInfoImpl> params = patchParams(match.myChangedParams, method);
for (ParameterInfoImpl param : params) {
String typeText = param.getTypeText();
if (count > 0) {
buffer.append(",");
}
buffer.append("\n");
buffer.append(INDENT);
buffer.append(typeText);
buffer.append(" ");
buffer.append(param.getName());
count++;
}
if (count > 0) {
buffer.append("\n");
}
buffer.append(")");
final PsiClassType[] exceptions = method.getThrowsList().getReferencedTypes();
if (exceptions.length > 0) {
buffer.append("\n");
buffer.append("throws\n");
for (PsiType exception : exceptions) {
buffer.append(INDENT);
buffer.append(PsiFormatUtil.formatType(exception, 0, PsiSubstitutor.EMPTY));
buffer.append("\n");
}
}
return buffer.toString();
}
return null;
}
public static void changeSignature(@NotNull Match match, @NotNull PsiMethod psiMethod) {
final PsiType expressionType = match.getChangedReturnType(psiMethod);
if (expressionType == null && match.myChangedParams.isEmpty()) return;
final List<ParameterInfoImpl> newParameters = patchParams(match.myChangedParams, psiMethod);
final ChangeSignatureProcessor csp = new ChangeSignatureProcessor(psiMethod.getProject(), psiMethod, false, null, psiMethod.getName(),
expressionType != null ? expressionType : psiMethod.getReturnType(),
newParameters.toArray(new ParameterInfoImpl[newParameters.size()]));
csp.run();
}
public static List<ParameterInfoImpl> patchParams(Map<PsiVariable, PsiType> changedParams, final PsiMethod psiMethod) {
final ArrayList<ParameterInfoImpl> newParameters = new ArrayList<ParameterInfoImpl>();
final PsiParameter[] oldParameters = psiMethod.getParameterList().getParameters();
for (int i = 0; i < oldParameters.length; i++) {
final PsiParameter oldParameter = oldParameters[i];
PsiType type = oldParameter.getType();
for (PsiVariable variable : changedParams.keySet()) {
if (PsiEquivalenceUtil.areElementsEquivalent(variable, oldParameter)) {
type = changedParams.get(variable);
break;
}
}
newParameters.add(new ParameterInfoImpl(i, oldParameter.getName(), type));
}
return newParameters;
}
}
@@ -48,7 +48,7 @@ class MethodDuplicatesMatchProvider implements MatchProvider {
@Override
public PsiElement processMatch(Match match) throws IncorrectOperationException {
match.changeSignature(myMethod);
MatchUtil.changeSignature(match, myMethod);
final PsiClass containingClass = myMethod.getContainingClass();
if (isEssentialStaticContextAbsent(match)) {
PsiUtil.setModifierProperty(myMethod, PsiModifier.STATIC, true);
@@ -159,7 +159,8 @@ class MethodDuplicatesMatchProvider implements MatchProvider {
final PsiElement matchStart = match.getMatchStart();
String visibility = VisibilityUtil.getPossibleVisibility(myMethod, matchStart);
final boolean shouldBeStatic = isEssentialStaticContextAbsent(match);
final String signature = match.getChangedSignature(myMethod, myMethod.hasModifierProperty(PsiModifier.STATIC) || shouldBeStatic, visibility);
final String signature = MatchUtil
.getChangedSignature(match, myMethod, myMethod.hasModifierProperty(PsiModifier.STATIC) || shouldBeStatic, visibility);
if (signature != null) {
return RefactoringBundle.message("replace.this.code.fragment.and.change.signature", signature);
}
+1
View File
@@ -11,6 +11,7 @@
<orderEntry type="module" module-name="core-impl" exported="" />
<orderEntry type="module" module-name="resources-en" />
<orderEntry type="library" name="asm4" level="project" />
<orderEntry type="module" module-name="indexing-api" />
</component>
</module>
@@ -30,7 +30,7 @@ import com.intellij.psi.search.LocalSearchScope;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.TypeConversionUtil;
import com.intellij.refactoring.util.ParameterTablePanel;
import com.intellij.refactoring.util.VariableData;
import com.intellij.refactoring.util.duplicates.DuplicatesFinder;
import com.intellij.util.ArrayUtil;
import org.jetbrains.annotations.Nullable;
@@ -38,7 +38,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.*;
public class InputVariables {
private final List<ParameterTablePanel.VariableData> myInputVariables;
private final List<VariableData> myInputVariables;
private List<? extends PsiVariable> myInitialParameters;
private final Project myProject;
@@ -62,20 +62,20 @@ public class InputVariables {
/**
* copy use only
*/
public InputVariables(List<ParameterTablePanel.VariableData> inputVariables,
public InputVariables(List<VariableData> inputVariables,
Project project,
LocalSearchScope scope) {
myProject = project;
myScope = scope;
myInputVariables = new ArrayList<ParameterTablePanel.VariableData>(inputVariables);
myInputVariables = new ArrayList<VariableData>(inputVariables);
}
public boolean isFoldable() {
return myFolding.isFoldable();
}
public ArrayList<ParameterTablePanel.VariableData> wrapInputVariables(final List<? extends PsiVariable> inputVariables) {
final ArrayList<ParameterTablePanel.VariableData> inputData = new ArrayList<ParameterTablePanel.VariableData>(inputVariables.size());
public ArrayList<VariableData> wrapInputVariables(final List<? extends PsiVariable> inputVariables) {
final ArrayList<VariableData> inputData = new ArrayList<VariableData>(inputVariables.size());
for (PsiVariable var : inputVariables) {
String name = var.getName();
if (!(var instanceof PsiParameter)) {
@@ -117,7 +117,7 @@ public class InputVariables {
}
}
ParameterTablePanel.VariableData data = new ParameterTablePanel.VariableData(var, type);
VariableData data = new VariableData(var, type);
data.name = name;
data.passAsParameter = true;
inputData.add(data);
@@ -127,9 +127,9 @@ public class InputVariables {
if (myFoldingAvailable) {
final Set<ParameterTablePanel.VariableData> toDelete = new HashSet<ParameterTablePanel.VariableData>();
final Set<VariableData> toDelete = new HashSet<VariableData>();
for (int i = inputData.size() - 1; i >=0; i--) {
final ParameterTablePanel.VariableData data = inputData.get(i);
final VariableData data = inputData.get(i);
if (myFolding.isParameterSafeToDelete(data, myScope)) {
toDelete.add(data);
}
@@ -189,7 +189,7 @@ public class InputVariables {
return currentType;
}
public List<ParameterTablePanel.VariableData> getInputVariables() {
public List<VariableData> getInputVariables() {
return myInputVariables;
}
@@ -197,15 +197,15 @@ public class InputVariables {
if (!myFoldingAvailable) return expression;
boolean update = elements[0] == expression;
for (ParameterTablePanel.VariableData inputVariable : myInputVariables) {
for (VariableData inputVariable : myInputVariables) {
myFolding.foldParameterUsagesInBody(inputVariable, elements, myScope);
}
return update ? (PsiExpression)elements[0] : expression;
}
public boolean toDeclareInsideBody(PsiVariable variable) {
final ArrayList<ParameterTablePanel.VariableData> knownVars = new ArrayList<ParameterTablePanel.VariableData>(myInputVariables);
for (ParameterTablePanel.VariableData data : knownVars) {
final ArrayList<VariableData> knownVars = new ArrayList<VariableData>(myInputVariables);
for (VariableData data : knownVars) {
if (data.variable.equals(variable)) {
return false;
}
@@ -214,7 +214,7 @@ public class InputVariables {
}
public boolean contains(PsiVariable variable) {
for (ParameterTablePanel.VariableData data : myInputVariables) {
for (VariableData data : myInputVariables) {
if (data.variable.equals(variable)) return true;
}
return false;
@@ -227,8 +227,8 @@ public class InputVariables {
int endOffset) {
final LocalSearchScope scope = new LocalSearchScope(codeFragment);
Variables:
for (Iterator<ParameterTablePanel.VariableData> iterator = myInputVariables.iterator(); iterator.hasNext();) {
final ParameterTablePanel.VariableData data = iterator.next();
for (Iterator<VariableData> iterator = myInputVariables.iterator(); iterator.hasNext();) {
final VariableData data = iterator.next();
for (PsiReference ref : ReferencesSearch.search(data.variable, scope)) {
PsiElement element = ref.getElement();
int elementOffset = controlFlow.getStartOffset(element);
@@ -257,7 +257,7 @@ public class InputVariables {
}
public void appendCallArguments(ParameterTablePanel.VariableData data, StringBuilder buffer) {
public void appendCallArguments(VariableData data, StringBuilder buffer) {
if (myFoldingAvailable) {
buffer.append(myFolding.getGeneratedCallArgument(data));
} else {
@@ -277,7 +277,7 @@ public class InputVariables {
}
public void annotateWithParameter(PsiJavaCodeReferenceElement reference) {
for (ParameterTablePanel.VariableData data : myInputVariables) {
for (VariableData data : myInputVariables) {
final PsiElement element = reference.resolve();
if (data.variable.equals(element)) {
PsiType type = data.variable.getType();
@@ -31,7 +31,7 @@ import com.intellij.psi.search.SearchScope;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.refactoring.util.ParameterTablePanel;
import com.intellij.refactoring.util.VariableData;
import com.intellij.refactoring.util.duplicates.DuplicatesFinder;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -54,7 +54,7 @@ public class ParametersFolder {
myDeleted.clear();
}
public boolean isParameterSafeToDelete(@NotNull ParameterTablePanel.VariableData data, @NotNull LocalSearchScope scope) {
public boolean isParameterSafeToDelete(@NotNull VariableData data, @NotNull LocalSearchScope scope) {
Next:
for (PsiReference reference : ReferencesSearch.search(data.variable, scope)) {
PsiElement expression = reference.getElement();
@@ -82,7 +82,7 @@ public class ParametersFolder {
return false;
}
public void foldParameterUsagesInBody(@NotNull ParameterTablePanel.VariableData data, PsiElement[] elements, SearchScope scope) {
public void foldParameterUsagesInBody(@NotNull VariableData data, PsiElement[] elements, SearchScope scope) {
if (myDeleted.contains(data.variable)) return;
final PsiExpression psiExpression = myExpressions.get(data.variable);
if (psiExpression == null) return;
@@ -108,7 +108,7 @@ public class ParametersFolder {
}
}
public boolean isParameterFoldable(@NotNull ParameterTablePanel.VariableData data,
public boolean isParameterFoldable(@NotNull VariableData data,
@NotNull LocalSearchScope scope,
@NotNull final List<? extends PsiVariable> inputVariables) {
final List<PsiExpression> mentionedInExpressions = getMentionedExpressions(data.variable, scope, inputVariables);
@@ -164,8 +164,8 @@ public class ParametersFolder {
}
return false;
}
private void setUniqueName(ParameterTablePanel.VariableData data) {
private void setUniqueName(VariableData data) {
int idx = 1;
while (myUsedNames.contains(data.name)) {
data.name += idx;
@@ -173,7 +173,7 @@ public class ParametersFolder {
myUsedNames.add(data.name);
}
private static Set<PsiVariable> findUsedVariables(ParameterTablePanel.VariableData data, final List<? extends PsiVariable> inputVariables,
private static Set<PsiVariable> findUsedVariables(VariableData data, final List<? extends PsiVariable> inputVariables,
PsiExpression expression) {
final Set<PsiVariable> found = new HashSet<PsiVariable>();
expression.accept(new JavaRecursiveElementVisitor() {
@@ -275,11 +275,11 @@ public class ParametersFolder {
}
@NotNull
public String getGeneratedCallArgument(@NotNull ParameterTablePanel.VariableData data) {
public String getGeneratedCallArgument(@NotNull VariableData data) {
return myExpressions.containsKey(data.variable) ? myExpressions.get(data.variable).getText() : data.variable.getName();
}
public boolean annotateWithParameter(@NotNull ParameterTablePanel.VariableData data, @NotNull PsiElement element) {
public boolean annotateWithParameter(@NotNull VariableData data, @NotNull PsiElement element) {
final PsiExpression psiExpression = myExpressions.get(data.variable);
if (psiExpression != null) {
final PsiExpression expression = findEquivalent(psiExpression, element);
@@ -0,0 +1,38 @@
/*
* 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.util;
import com.intellij.psi.PsiType;
import com.intellij.psi.PsiVariable;
import com.intellij.psi.SmartTypePointerManager;
import org.jetbrains.annotations.NotNull;
public class VariableData {
public final PsiVariable variable;
public PsiType type;
public String name;
public boolean passAsParameter;
public VariableData(@NotNull PsiVariable var) {
variable = var;
type = var.getType();
}
public VariableData(@NotNull PsiVariable var, @NotNull PsiType type) {
variable = var;
this.type = SmartTypePointerManager.getInstance(var.getProject()).createSmartTypePointer(type).getType();
}
}
@@ -26,13 +26,13 @@ import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.intellij.psi.controlFlow.*;
import com.intellij.psi.util.*;
import com.intellij.refactoring.changeSignature.ChangeSignatureProcessor;
import com.intellij.refactoring.changeSignature.ParameterInfoImpl;
import com.intellij.psi.util.InheritanceUtil;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.psi.util.TypeConversionUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.HashMap;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -53,7 +53,7 @@ public final class Match {
private final Map<PsiElement, PsiElement> myDeclarationCorrespondence = new HashMap<PsiElement, PsiElement>();
private ReturnValue myReturnValue = null;
private Ref<PsiExpression> myInstanceExpression = null;
private final Map<PsiVariable, PsiType> myChangedParams = new HashMap<PsiVariable, PsiType>();
final Map<PsiVariable, PsiType> myChangedParams = new HashMap<PsiVariable, PsiType>();
private final boolean myIgnoreParameterTypes;
Match(PsiElement start, PsiElement end, boolean ignoreParameterTypes) {
@@ -339,75 +339,7 @@ public final class Match {
}
@Nullable
public String getChangedSignature(final PsiMethod method, final boolean shouldBeStatic, String visibility) {
final PsiType returnType = getChangedReturnType(method);
if (!myChangedParams.isEmpty() || returnType != null) {
@NonNls StringBuilder buffer = new StringBuilder();
buffer.append(visibility);
if (buffer.length() > 0) {
buffer.append(" ");
}
if (shouldBeStatic) {
buffer.append("static ");
}
final PsiTypeParameterList typeParameterList = method.getTypeParameterList();
if (typeParameterList != null) {
buffer.append(typeParameterList.getText());
buffer.append(" ");
}
buffer.append(PsiFormatUtil.formatType(returnType != null ? returnType : method.getReturnType(), 0, PsiSubstitutor.EMPTY));
buffer.append(" ");
buffer.append(method.getName());
buffer.append("(");
int count = 0;
final String INDENT = " ";
final ArrayList<ParameterInfoImpl> params = patchParams(method);
for (ParameterInfoImpl param : params) {
String typeText = param.getTypeText();
if (count > 0) {
buffer.append(",");
}
buffer.append("\n");
buffer.append(INDENT);
buffer.append(typeText);
buffer.append(" ");
buffer.append(param.getName());
count++;
}
if (count > 0) {
buffer.append("\n");
}
buffer.append(")");
final PsiClassType[] exceptions = method.getThrowsList().getReferencedTypes();
if (exceptions.length > 0) {
buffer.append("\n");
buffer.append("throws\n");
for (PsiType exception : exceptions) {
buffer.append(INDENT);
buffer.append(PsiFormatUtil.formatType(exception, 0, PsiSubstitutor.EMPTY));
buffer.append("\n");
}
}
return buffer.toString();
}
return null;
}
public void changeSignature(final PsiMethod psiMethod) {
final PsiType expressionType = getChangedReturnType(psiMethod);
if (expressionType == null && myChangedParams.isEmpty()) return;
final ArrayList<ParameterInfoImpl> newParameters = patchParams(psiMethod);
final ChangeSignatureProcessor csp = new ChangeSignatureProcessor(psiMethod.getProject(), psiMethod, false, null, psiMethod.getName(),
expressionType != null ? expressionType : psiMethod.getReturnType(),
newParameters.toArray(new ParameterInfoImpl[newParameters.size()]));
csp.run();
}
@Nullable
private PsiType getChangedReturnType(final PsiMethod psiMethod) {
public PsiType getChangedReturnType(final PsiMethod psiMethod) {
final PsiType returnType = psiMethod.getReturnType();
if (returnType != null) {
PsiElement parent = getMatchEnd().getParent();
@@ -487,23 +419,6 @@ public final class Match {
return !TypeConversionUtil.isAssignable(currentType, substitutor.substitute(returnType));
}
private ArrayList<ParameterInfoImpl> patchParams(final PsiMethod psiMethod) {
final ArrayList<ParameterInfoImpl> newParameters = new ArrayList<ParameterInfoImpl>();
final PsiParameter[] oldParameters = psiMethod.getParameterList().getParameters();
for (int i = 0; i < oldParameters.length; i++) {
final PsiParameter oldParameter = oldParameters[i];
PsiType type = oldParameter.getType();
for (PsiVariable variable : myChangedParams.keySet()) {
if (PsiEquivalenceUtil.areElementsEquivalent(variable, oldParameter)) {
type = myChangedParams.get(variable);
break;
}
}
newParameters.add(new ParameterInfoImpl(i, oldParameter.getName(), type));
}
return newParameters;
}
public PsiFile getFile() {
return getMatchStart().getContainingFile();
}
@@ -27,7 +27,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.refactoring.introduceparameterobject.IntroduceParameterObjectProcessor;
import com.intellij.refactoring.util.ParameterTablePanel;
import com.intellij.refactoring.util.VariableData;
import com.intellij.util.Function;
import com.intellij.util.VisibilityUtil;
@@ -46,9 +46,9 @@ public class IntroduceParameterObjectTest extends MultiFileTestCase{
}
private void doTest(final boolean delegate, final boolean createInner) throws Exception {
doTest(delegate, createInner, new Function<PsiMethod, ParameterTablePanel.VariableData[]>() {
doTest(delegate, createInner, new Function<PsiMethod, VariableData[]>() {
@Override
public ParameterTablePanel.VariableData[] fun(PsiMethod psiMethod) {
public VariableData[] fun(PsiMethod psiMethod) {
return generateParams(psiMethod);
}
});
@@ -56,7 +56,7 @@ public class IntroduceParameterObjectTest extends MultiFileTestCase{
private void doTest(final boolean delegate,
final boolean createInner,
final Function<PsiMethod, ParameterTablePanel.VariableData[]> function) throws Exception {
final Function<PsiMethod, VariableData[]> function) throws Exception {
doTest(new PerformAction() {
@Override
public void performAction(final VirtualFile rootDir, final VirtualFile rootAfter) throws Exception {
@@ -65,7 +65,7 @@ public class IntroduceParameterObjectTest extends MultiFileTestCase{
assertNotNull("Class Test not found", aClass);
final PsiMethod method = aClass.findMethodsByName("foo", false)[0];
final ParameterTablePanel.VariableData[] datas = function.fun(method);
final VariableData[] datas = function.fun(method);
IntroduceParameterObjectProcessor processor = new IntroduceParameterObjectProcessor("Param", "", null, method, datas, delegate, false,
createInner, null, false);
@@ -74,13 +74,13 @@ public class IntroduceParameterObjectTest extends MultiFileTestCase{
});
}
private static ParameterTablePanel.VariableData[] generateParams(final PsiMethod method) {
private static VariableData[] generateParams(final PsiMethod method) {
final PsiParameter[] parameters = method.getParameterList().getParameters();
final ParameterTablePanel.VariableData[] datas = new ParameterTablePanel.VariableData[parameters.length];
final VariableData[] datas = new VariableData[parameters.length];
for (int i = 0; i < parameters.length; i++) {
PsiParameter parameter = parameters[i];
datas[i] = new ParameterTablePanel.VariableData(parameter);
datas[i] = new VariableData(parameter);
datas[i].name = parameter.getName();
datas[i].passAsParameter = true;
}
@@ -132,15 +132,15 @@ public class IntroduceParameterObjectTest extends MultiFileTestCase{
}
public void testSameTypeAndVarargs() throws Exception {
doTest(false, false, new Function<PsiMethod, ParameterTablePanel.VariableData[]>() {
doTest(false, false, new Function<PsiMethod, VariableData[]>() {
@Override
public ParameterTablePanel.VariableData[] fun(PsiMethod method) {
public VariableData[] fun(PsiMethod method) {
final PsiParameter[] parameters = method.getParameterList().getParameters();
final ParameterTablePanel.VariableData[] datas = new ParameterTablePanel.VariableData[parameters.length - 1];
final VariableData[] datas = new VariableData[parameters.length - 1];
for (int i = 0; i < parameters.length - 1; i++) {
PsiParameter parameter = parameters[i];
datas[i] = new ParameterTablePanel.VariableData(parameter);
datas[i] = new VariableData(parameter);
datas[i].name = parameter.getName();
datas[i].passAsParameter = true;
}
@@ -150,16 +150,16 @@ public class IntroduceParameterObjectTest extends MultiFileTestCase{
}
public void testTypeParametersWithChosenSubtype() throws Exception {
doTest(false, true, new Function<PsiMethod, ParameterTablePanel.VariableData[]>() {
doTest(false, true, new Function<PsiMethod, VariableData[]>() {
@Override
public ParameterTablePanel.VariableData[] fun(PsiMethod psiMethod) {
public VariableData[] fun(PsiMethod psiMethod) {
final PsiParameter parameter = psiMethod.getParameterList().getParameters()[0];
final PsiClass collectionClass = getJavaFacade().findClass(CommonClassNames.JAVA_UTIL_COLLECTION);
final ParameterTablePanel.VariableData variableData =
new ParameterTablePanel.VariableData(parameter, JavaPsiFacade.getElementFactory(getProject()).createType(collectionClass));
final VariableData variableData =
new VariableData(parameter, JavaPsiFacade.getElementFactory(getProject()).createType(collectionClass));
variableData.name = parameter.getName();
variableData.passAsParameter = true;
return new ParameterTablePanel.VariableData[]{variableData};
return new VariableData[]{variableData};
}
});
}
@@ -12,7 +12,7 @@ import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import com.intellij.refactoring.makeStatic.MakeClassStaticProcessor;
import com.intellij.refactoring.makeStatic.MakeStaticUtil;
import com.intellij.refactoring.makeStatic.Settings;
import com.intellij.refactoring.util.ParameterTablePanel;
import com.intellij.refactoring.util.VariableData;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
@@ -83,7 +83,7 @@ public class MakeClassStaticTest extends LightRefactoringTestCase {
PsiElement element = TargetElementUtilBase.findTargetElement(myEditor, TargetElementUtilBase.ELEMENT_NAME_ACCEPTED);
assertTrue(element instanceof PsiClass);
PsiClass aClass = (PsiClass)element;
final ArrayList<ParameterTablePanel.VariableData> parametersForFields = new ArrayList<ParameterTablePanel.VariableData>();
final ArrayList<VariableData> parametersForFields = new ArrayList<VariableData>();
final boolean addClassParameter = MakeStaticUtil.buildVariableData(aClass, parametersForFields);
new MakeClassStaticProcessor(
@@ -91,7 +91,7 @@ public class MakeClassStaticTest extends LightRefactoringTestCase {
aClass,
new Settings(true, addClassParameter ? "anObject" : null,
parametersForFields.toArray(
new ParameterTablePanel.VariableData[parametersForFields.size()]))).run();
new VariableData[parametersForFields.size()]))).run();
checkResultByFile(TEST_ROOT + getTestName(false) + "_after.java");
}
}
@@ -22,7 +22,7 @@ import com.intellij.psi.PsiMethod;
import com.intellij.refactoring.makeStatic.MakeMethodStaticProcessor;
import com.intellij.refactoring.makeStatic.MakeStaticUtil;
import com.intellij.refactoring.makeStatic.Settings;
import com.intellij.refactoring.util.ParameterTablePanel;
import com.intellij.refactoring.util.VariableData;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
@@ -176,7 +176,7 @@ public class MakeMethodStaticTest extends LightRefactoringTestCase {
configureByFile("/refactoring/makeMethodStatic/beforePreserveTypeParams.java");
performWithFields();
checkResultByFile("/refactoring/makeMethodStatic/afterPreserveTypeParams.java");
}
}
public void testInnerStaticClassUsed() throws Exception {
configureByFile("/refactoring/makeMethodStatic/beforeInnerStaticClassUsed.java");
@@ -218,7 +218,7 @@ public class MakeMethodStaticTest extends LightRefactoringTestCase {
PsiElement element = TargetElementUtilBase.findTargetElement(myEditor, TargetElementUtilBase.ELEMENT_NAME_ACCEPTED);
assertTrue(element instanceof PsiMethod);
PsiMethod method = (PsiMethod) element;
final ArrayList<ParameterTablePanel.VariableData> parametersForFields = new ArrayList<ParameterTablePanel.VariableData>();
final ArrayList<VariableData> parametersForFields = new ArrayList<VariableData>();
final boolean addClassParameter = MakeStaticUtil.buildVariableData(method, parametersForFields);
new MakeMethodStaticProcessor(
@@ -226,6 +226,6 @@ public class MakeMethodStaticTest extends LightRefactoringTestCase {
method,
new Settings(true, addClassParameter ? "anObject" : null,
parametersForFields.toArray(
new ParameterTablePanel.VariableData[parametersForFields.size()]))).run();
new VariableData[parametersForFields.size()]))).run();
}
}
@@ -31,6 +31,7 @@ import com.intellij.refactoring.extractMethod.ExtractMethodProcessor;
import com.intellij.refactoring.ui.TypeSelectorManager;
import com.intellij.refactoring.ui.TypeSelectorManagerImpl;
import com.intellij.refactoring.util.ParameterTablePanel;
import com.intellij.refactoring.util.VariableData;
import com.intellij.testFramework.LightCodeInsightTestCase;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -110,7 +111,7 @@ public class SuggestedParamTypesTest extends LightCodeInsightTestCase {
processor.prepare();
for (final ParameterTablePanel.VariableData data : processor.getInputVariables().getInputVariables()) {
for (final VariableData data : processor.getInputVariables().getInputVariables()) {
final PsiExpression[] occurrences = ParameterTablePanel.findVariableOccurrences(elements, data.variable);
final TypeSelectorManager manager = new TypeSelectorManagerImpl(project, data.type, occurrences, true) {
@Override
@@ -66,7 +66,7 @@ import org.jetbrains.annotations.Nullable;
import java.lang.reflect.InvocationTargetException;
import java.util.*;
public abstract class BaseRefactoringProcessor {
public abstract class BaseRefactoringProcessor implements Runnable {
private static final Logger LOG = Logger.getInstance("#com.intellij.refactoring.BaseRefactoringProcessor");
protected final Project myProject;