convert static to instance method: same class conversion presentation

This commit is contained in:
Anna.Kozlova
2017-04-12 17:31:06 +02:00
parent cc95d1709c
commit c78a54f238
5 changed files with 19 additions and 17 deletions
@@ -17,8 +17,8 @@ package com.intellij.refactoring.convertToInstanceMethod;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.help.HelpManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiParameter;
import com.intellij.refactoring.HelpID;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.move.moveInstanceMethod.MoveInstanceMethodDialogBase;
@@ -34,16 +34,16 @@ import java.awt.event.MouseEvent;
*/
public class ConvertToInstanceMethodDialog extends MoveInstanceMethodDialogBase {
private static final Logger LOG = Logger.getInstance("#com.intellij.refactoring.convertToInstanceMethod.ConvertToInstanceMethodDialog");
public ConvertToInstanceMethodDialog(final PsiMethod method, final PsiElement[] variables) {
public ConvertToInstanceMethodDialog(final PsiMethod method, final Object[] variables) {
super(method, variables, ConvertToInstanceMethodHandler.REFACTORING_NAME);
init();
}
protected void doAction() {
final PsiElement targetVariable = (PsiElement)myList.getSelectedValue();
final Object targetVariable = myList.getSelectedValue();
LOG.assertTrue(targetVariable != null);
final ConvertToInstanceMethodProcessor processor = new ConvertToInstanceMethodProcessor(myMethod.getProject(),
myMethod, targetVariable,
myMethod, targetVariable instanceof PsiParameter ? (PsiParameter)targetVariable : null,
myVisibilityPanel.getVisibility());
if (!verifyTargetClass(processor.getTargetClass())) return;
invokeRefactoring(processor);
@@ -26,6 +26,7 @@ import com.intellij.refactoring.HelpID;
import com.intellij.refactoring.RefactoringActionHandler;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.util.CommonRefactoringUtil;
import com.intellij.util.ArrayUtil;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
@@ -70,7 +71,7 @@ public class ConvertToInstanceMethodHandler implements RefactoringActionHandler
return;
}
final PsiParameter[] parameters = method.getParameterList().getParameters();
List<PsiElement> targetQualifiers = new ArrayList<>();
List<Object> targetQualifiers = new ArrayList<>();
for (final PsiParameter parameter : parameters) {
final PsiType type = parameter.getType();
if (type instanceof PsiClassType) {
@@ -89,11 +90,9 @@ public class ConvertToInstanceMethodHandler implements RefactoringActionHandler
boolean noArgConstructor =
constructors.length == 0 || Arrays.stream(constructors).anyMatch(constructor -> constructor.getParameterList().getParametersCount() == 0);
if (noArgConstructor) {
targetQualifiers.add(JavaPsiFacade.getElementFactory(project).createExpressionFromText("new " + className + "()", method));
targetQualifiers.add("this / new " + className + "()");
}
new ConvertToInstanceMethodDialog(
method,
targetQualifiers.toArray(new PsiElement[targetQualifiers.size()])).show();
new ConvertToInstanceMethodDialog(method, ArrayUtil.toObjectArray(targetQualifiers)).show();
}
}
@@ -65,11 +65,11 @@ public class ConvertToInstanceMethodProcessor extends BaseRefactoringProcessor {
public ConvertToInstanceMethodProcessor(final Project project,
final PsiMethod method,
final PsiElement targetParameter,
@Nullable final PsiParameter targetParameter,
final String newVisibility) {
super(project);
myMethod = method;
myTargetParameter = targetParameter instanceof PsiParameter ? (PsiParameter)targetParameter : null;
myTargetParameter = targetParameter;
LOG.assertTrue(method.hasModifierProperty(PsiModifier.STATIC));
if (myTargetParameter != null) {
LOG.assertTrue(myTargetParameter.getDeclarationScope() == myMethod);
@@ -106,7 +106,7 @@ public class MoveInstanceMethodDialog extends MoveInstanceMethodDialogBase {
textField.setEnabled(true);
}
final PsiElement variable = myVariables[selectedIndex];
final Object variable = myVariables[selectedIndex];
if (variable instanceof PsiField) {
final PsiField field = (PsiField)variable;
final PsiClass hisClass = field.getContainingClass();
@@ -18,7 +18,10 @@ package com.intellij.refactoring.move.moveInstanceMethod;
import com.intellij.lang.findUsages.DescriptiveNameUtil;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.psi.*;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiSubstitutor;
import com.intellij.psi.PsiVariable;
import com.intellij.psi.search.searches.ClassInheritorsSearch;
import com.intellij.psi.util.PsiFormatUtil;
import com.intellij.psi.util.PsiUtil;
@@ -39,7 +42,7 @@ import java.awt.*;
*/
public abstract class MoveInstanceMethodDialogBase extends MoveDialogBase {
protected final PsiMethod myMethod;
protected final PsiElement[] myVariables;
protected final Object[] myVariables;
public JComponent getPreferredFocusedComponent() {
return myList;
@@ -49,7 +52,7 @@ public abstract class MoveInstanceMethodDialogBase extends MoveDialogBase {
protected JavaVisibilityPanel myVisibilityPanel;
protected final String myRefactoringName;
public MoveInstanceMethodDialogBase(PsiMethod method, PsiElement[] variables, String refactoringName) {
public MoveInstanceMethodDialogBase(PsiMethod method, Object[] variables, String refactoringName) {
super(method.getProject(), true);
myMethod = method;
myVariables = variables;
@@ -147,8 +150,8 @@ public abstract class MoveInstanceMethodDialogBase extends MoveDialogBase {
setIcon(psiVariable.getIcon(0));
setText(text);
}
else if (value instanceof PsiExpression) {
setText(((PsiExpression)value).getText());
else if (value instanceof String) {
setText((String)value);
}
return this;
}