diff --git a/source/com/intellij/refactoring/introduceParameter/IntroduceParameterDialog.java b/source/com/intellij/refactoring/introduceParameter/IntroduceParameterDialog.java index a2ff781825e2..907bad8a49c9 100644 --- a/source/com/intellij/refactoring/introduceParameter/IntroduceParameterDialog.java +++ b/source/com/intellij/refactoring/introduceParameter/IntroduceParameterDialog.java @@ -10,14 +10,12 @@ package com.intellij.refactoring.introduceParameter; import com.intellij.openapi.help.HelpManager; import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.DialogWrapper; -import com.intellij.psi.PsiManager; -import com.intellij.psi.PsiType; +import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleSettingsManager; import com.intellij.refactoring.HelpID; import com.intellij.refactoring.IntroduceParameterRefactoring; -import com.intellij.refactoring.RefactoringSettings; import com.intellij.refactoring.RefactoringDialog; +import com.intellij.refactoring.RefactoringSettings; import com.intellij.refactoring.ui.*; import com.intellij.ui.IdeBorderFactory; import com.intellij.ui.NonFocusableCheckBox; @@ -33,14 +31,14 @@ public class IntroduceParameterDialog extends RefactoringDialog { private TypeSelector myTypeSelector; private NameSuggestionsManager myNameSuggestionsManager; - public static interface Callback { - void run(IntroduceParameterDialog dialog); - } - private Project myProject; private List myClassMembersList; private int myOccurenceNumber; private final boolean myIsInvokedOnDeclaration; + private final PsiMethod myMethodToSearchFor; + private final PsiMethod myMethodToReplaceIn; + private PsiExpression myExpression; + private PsiLocalVariable myLocalVar; private boolean myIsLocalVariable; private boolean myHasInitializer; @@ -57,24 +55,30 @@ public class IntroduceParameterDialog extends RefactoringDialog { private ButtonGroup myReplaceFieldsWithGettersButtonGroup = new ButtonGroup(); - private Callback myCallback; private final NameSuggestionsGenerator myNameSuggestionsGenerator; private final TypeSelectorManager myTypeSelectorManager; - IntroduceParameterDialog(Project project, List localVarsList, - List parameterList, List classMembersList, int occurenceNumber, - boolean isInvokedOnDeclaration, boolean isLocalVariable, - boolean hasInitializer, Callback callback, NameSuggestionsGenerator generator, - TypeSelectorManager typeSelectorManager) { + IntroduceParameterDialog(Project project, + List classMembersList, + int occurenceNumber, + PsiLocalVariable onLocalVariable, + PsiExpression onExpression, + NameSuggestionsGenerator generator, + TypeSelectorManager typeSelectorManager, + PsiMethod methodToSearchFor, + PsiMethod methodToReplaceIn) { super(project, true); myProject = project; myClassMembersList = classMembersList; myOccurenceNumber = occurenceNumber; - myIsInvokedOnDeclaration = isInvokedOnDeclaration; - myIsLocalVariable = isLocalVariable; - myHasInitializer = hasInitializer; - myCallback = callback; + myExpression = onExpression; + myLocalVar = onLocalVariable; + myMethodToReplaceIn = methodToReplaceIn; + myIsInvokedOnDeclaration = onExpression != null; + myMethodToSearchFor = methodToSearchFor; + myIsLocalVariable = onLocalVariable != null; + myHasInitializer = onLocalVariable != null && onLocalVariable.getInitializer() != null; myNameSuggestionsGenerator = generator; myTypeSelectorManager = typeSelectorManager; @@ -116,8 +120,7 @@ public class IntroduceParameterDialog extends RefactoringDialog { if(myCbUseInitializer != null) { return myCbUseInitializer.isSelected(); } - else - return false; + return false; } public String getParameterName() { @@ -341,8 +344,6 @@ public class IntroduceParameterDialog extends RefactoringDialog { } protected void doAction() { - if (!isOKActionEnabled()) return; - final RefactoringSettings settings = RefactoringSettings.getInstance(); settings.INTRODUCE_PARAMETER_REPLACE_FIELDS_WITH_GETTERS = getReplaceFieldsWithGetters(); @@ -353,7 +354,24 @@ public class IntroduceParameterDialog extends RefactoringDialog { } myNameSuggestionsManager.nameSelected(); - myCallback.run(this); + + boolean isDeleteLocalVariable = false; + + PsiExpression parameterInitializer = myExpression; + if (myLocalVar != null) { + if (isUseInitializer()) { + parameterInitializer = myLocalVar.getInitializer(); } + isDeleteLocalVariable = isDeleteLocalVariable(); + } + + final IntroduceParameterProcessor processor = new IntroduceParameterProcessor( + myProject, myMethodToReplaceIn, myMethodToSearchFor, + parameterInitializer, myExpression, + myLocalVar, isDeleteLocalVariable, + getParameterName(), isReplaceAllOccurences(), + getReplaceFieldsWithGetters(), isDeclareFinal(), + getSelectedType()); + invokeRefactoring(processor); myParameterNameField.requestFocusInWindow(); } diff --git a/source/com/intellij/refactoring/introduceParameter/IntroduceParameterHandler.java b/source/com/intellij/refactoring/introduceParameter/IntroduceParameterHandler.java index e72e10c5dd4b..20f66695188a 100644 --- a/source/com/intellij/refactoring/introduceParameter/IntroduceParameterHandler.java +++ b/source/com/intellij/refactoring/introduceParameter/IntroduceParameterHandler.java @@ -19,7 +19,6 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.ScrollType; import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.util.Pair; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; @@ -27,9 +26,9 @@ import com.intellij.psi.codeStyle.SuggestedNameInfo; import com.intellij.psi.codeStyle.VariableKind; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.refactoring.HelpID; +import com.intellij.refactoring.IntroduceHandlerBase; import com.intellij.refactoring.IntroduceParameterRefactoring; import com.intellij.refactoring.RefactoringActionHandler; -import com.intellij.refactoring.IntroduceHandlerBase; import com.intellij.refactoring.introduceField.ElementToWorkOn; import com.intellij.refactoring.ui.NameSuggestionsGenerator; import com.intellij.refactoring.ui.TypeSelectorManager; @@ -43,7 +42,7 @@ import java.util.List; import java.util.Set; -public class IntroduceParameterHandler extends IntroduceHandlerBase implements RefactoringActionHandler, IntroduceParameterDialog.Callback { +public class IntroduceParameterHandler extends IntroduceHandlerBase implements RefactoringActionHandler { private static final Logger LOG = Logger.getInstance("#com.intellij.refactoring.introduceParameter.IntroduceParameterHandler"); private static final String REFACTORING_NAME = "Introduce Parameter"; private PsiExpression myParameterInitializer; @@ -168,7 +167,6 @@ public class IntroduceParameterHandler extends IntroduceHandlerBase implements R Util.analyzeExpression(expr, localVars, classMemberRefs, params); } - boolean previewUsages = false; String parameterName = "anObject"; boolean replaceAllOccurences = true; boolean isDeleteLocalVariable = true; @@ -192,33 +190,23 @@ public class IntroduceParameterHandler extends IntroduceHandlerBase implements R new TypeSelectorManagerImpl(project, initializerType, expr, occurences) : new TypeSelectorManagerImpl(project, initializerType, occurences)); - final IntroduceParameterDialog dialog = - new IntroduceParameterDialog( - myProject, localVars, params, classMemberRefs, - occurences.length, - expr == null, myLocalVar != null, - (myLocalVar != null) && (myLocalVar.getInitializer() != null), - this, - new NameSuggestionsGenerator() { - public SuggestedNameInfo getSuggestedNameInfo(PsiType type) { - return CodeStyleManager.getInstance(myProject).suggestVariableName(VariableKind.PARAMETER, propName, expr, initializerType); - } + new IntroduceParameterDialog( + myProject, classMemberRefs, + occurences.length, + myLocalVar, expr, + new NameSuggestionsGenerator() { + public SuggestedNameInfo getSuggestedNameInfo(PsiType type) { + return CodeStyleManager.getInstance(myProject).suggestVariableName(VariableKind.PARAMETER, propName, expr, initializerType); + } - public Pair> completeVariableName(String prefix, - PsiType type) { - LinkedHashSet set = new LinkedHashSet(); - LookupItemPreferencePolicy policy = CompletionUtil.completeVariableName(myProject, set, prefix, type, VariableKind.PARAMETER); - return new Pair> (policy, set); - } - }, - typeSelectorManager); - dialog.show(); - - if (!dialog.isOK()) { - return true; - } - - return true; + public Pair> completeVariableName(String prefix, + PsiType type) { + LinkedHashSet set = new LinkedHashSet(); + LookupItemPreferencePolicy policy = CompletionUtil.completeVariableName(myProject, set, prefix, type, VariableKind.PARAMETER); + return new Pair> (policy, set); + } + }, + typeSelectorManager, myMethodToSearchFor, myMethod).show(); } new IntroduceParameterProcessor( @@ -226,7 +214,7 @@ public class IntroduceParameterHandler extends IntroduceHandlerBase implements R myParameterInitializer, myExpressionToSearchFor, myLocalVar, isDeleteLocalVariable, parameterName, replaceAllOccurences, - IntroduceParameterRefactoring.REPLACE_FIELDS_WITH_GETTERS_NONE, false, null, null).run(null); + IntroduceParameterRefactoring.REPLACE_FIELDS_WITH_GETTERS_NONE, false, null).run(null); return true; } @@ -236,33 +224,6 @@ public class IntroduceParameterHandler extends IntroduceHandlerBase implements R /* do nothing */ } - public void run(final IntroduceParameterDialog dialog) { - boolean isDeleteLocalVariable = false; - - if (myLocalVar != null) { - if (dialog.isUseInitializer()) { - PsiExpression varInitializer = myLocalVar.getInitializer(); - if (varInitializer != null) { - myParameterInitializer = varInitializer; - } - } - isDeleteLocalVariable = dialog.isDeleteLocalVariable(); - } - - new IntroduceParameterProcessor( - myProject, myMethod, myMethodToSearchFor, - myParameterInitializer, myExpressionToSearchFor, - myLocalVar, isDeleteLocalVariable, - dialog.getParameterName(), dialog.isReplaceAllOccurences(), - dialog.getReplaceFieldsWithGetters(), dialog.isDeclareFinal(), - dialog.getSelectedType(), new Runnable() { - public void run() { - dialog.close(DialogWrapper.CANCEL_EXIT_CODE); - } - }).run(null); - } - - private static List getEnclosingMethods(PsiMethod nearest) { List enclosingMethods = new ArrayList(); enclosingMethods.add(nearest); diff --git a/source/com/intellij/refactoring/introduceParameter/IntroduceParameterProcessor.java b/source/com/intellij/refactoring/introduceParameter/IntroduceParameterProcessor.java index 0f850ed88374..96a70365d416 100644 --- a/source/com/intellij/refactoring/introduceParameter/IntroduceParameterProcessor.java +++ b/source/com/intellij/refactoring/introduceParameter/IntroduceParameterProcessor.java @@ -66,19 +66,18 @@ public class IntroduceParameterProcessor extends BaseRefactoringProcessor { * if expressionToSearch is null, search for localVariable */ public IntroduceParameterProcessor(Project project, - PsiMethod methodToReplaceIn, - PsiMethod methodToSearchFor, - PsiExpression parameterInitializer, - PsiExpression expressionToSearch, - PsiLocalVariable localVariable, - boolean removeLocalVariable, - String parameterName, - boolean replaceAllOccurences, - int replaceFieldsWithGetters, - boolean declareFinal, - PsiType forcedType, - Runnable prepareSuccessfulCallback) { - super(project, prepareSuccessfulCallback); + PsiMethod methodToReplaceIn, + PsiMethod methodToSearchFor, + PsiExpression parameterInitializer, + PsiExpression expressionToSearch, + PsiLocalVariable localVariable, + boolean removeLocalVariable, + String parameterName, + boolean replaceAllOccurences, + int replaceFieldsWithGetters, + boolean declareFinal, + PsiType forcedType) { + super(project); myMethodToReplaceIn = methodToReplaceIn; myMethodToSearchFor = methodToSearchFor; diff --git a/source/com/intellij/refactoring/makeMethodStatic/MakeMethodStaticProcessor.java b/source/com/intellij/refactoring/makeMethodStatic/MakeMethodStaticProcessor.java index 945cd35b0120..4252d7b06383 100644 --- a/source/com/intellij/refactoring/makeMethodStatic/MakeMethodStaticProcessor.java +++ b/source/com/intellij/refactoring/makeMethodStatic/MakeMethodStaticProcessor.java @@ -40,10 +40,9 @@ public class MakeMethodStaticProcessor extends BaseRefactoringProcessor { private Settings mySettings; public MakeMethodStaticProcessor(Project project, - PsiMethod method, - Settings settings, - Runnable prepareSuccessfulCallback) { - super(project, prepareSuccessfulCallback); + PsiMethod method, + Settings settings) { + super(project); myMethod = method; mySettings = settings; myMethodClass = method.getContainingClass(); diff --git a/source/com/intellij/refactoring/openapi/impl/IntroduceParameterRefactoringImpl.java b/source/com/intellij/refactoring/openapi/impl/IntroduceParameterRefactoringImpl.java index 78cf6fc46e69..a17c73183b59 100644 --- a/source/com/intellij/refactoring/openapi/impl/IntroduceParameterRefactoringImpl.java +++ b/source/com/intellij/refactoring/openapi/impl/IntroduceParameterRefactoringImpl.java @@ -29,8 +29,7 @@ public class IntroduceParameterRefactoringImpl extends RefactoringImpl