diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/extract/closure/ExtractClosureFromMethodProcessor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/extract/closure/ExtractClosureFromMethodProcessor.java index 16188752ecc5..3627c3b52566 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/extract/closure/ExtractClosureFromMethodProcessor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/extract/closure/ExtractClosureFromMethodProcessor.java @@ -274,7 +274,8 @@ public class ExtractClosureFromMethodProcessor extends ExtractClosureProcessorBa @NotNull @Override public PsiType getForcedType() { - return myHelper.getSelectedType(); + PsiType type = myHelper.getSelectedType(); + return type != null ? type : PsiType.getJavaLangObject(PsiManager.getInstance(myProject), GlobalSearchScope.allScope(myProject)); } @NotNull diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/extract/closure/ExtractClosureHelperImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/extract/closure/ExtractClosureHelperImpl.java index b904ef7b5b5b..baa5dbd6d71d 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/extract/closure/ExtractClosureHelperImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/extract/closure/ExtractClosureHelperImpl.java @@ -44,6 +44,7 @@ public class ExtractClosureHelperImpl extends ExtractInfoHelperBase implements G private final boolean myForceReturn; private PsiType myType = null; + private boolean myForceDef; public ExtractClosureHelperImpl(IntroduceParameterInfo info, String name, @@ -51,9 +52,10 @@ public class ExtractClosureHelperImpl extends ExtractInfoHelperBase implements G TIntArrayList toRemove, boolean generateDelegate, int replaceFieldsWithGetters, - boolean forceReturn) { + boolean forceReturn, boolean forceDef) { super(info); myForceReturn = forceReturn; + myForceDef = forceDef; myOwner = info.getToReplaceIn(); myToSearchFor = info.getToSearchFor(); myName = name; @@ -102,6 +104,8 @@ public class ExtractClosureHelperImpl extends ExtractInfoHelperBase implements G @Override public PsiType getSelectedType() { + if (myForceDef) return null; + if (myType == null) { final GrClosableBlock closure = ExtractClosureProcessorBase.generateClosure(this); PsiType type = closure.getType(); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/parameter/GrIntroduceExpressionSettingsImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/parameter/GrIntroduceExpressionSettingsImpl.java index a93a26b3b02c..7fc90aa1101e 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/parameter/GrIntroduceExpressionSettingsImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/parameter/GrIntroduceExpressionSettingsImpl.java @@ -39,7 +39,7 @@ public class GrIntroduceExpressionSettingsImpl extends ExtractClosureHelperImpl GrVariable var, PsiType selectedType, boolean forceReturn) { - super(info, name, declareFinal, toRemove, generateDelegate, replaceFieldsWithGetters, forceReturn); + super(info, name, declareFinal, toRemove, generateDelegate, replaceFieldsWithGetters, forceReturn, false); myExpr = expr; myVar = var; mySelectedType = selectedType; diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/parameter/GrIntroduceParameterDialog.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/parameter/GrIntroduceParameterDialog.java index 3d7fc2293e69..ad2c75a0f6c7 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/parameter/GrIntroduceParameterDialog.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/parameter/GrIntroduceParameterDialog.java @@ -325,7 +325,7 @@ public class GrIntroduceParameterDialog extends DialogWrapper implements GrIntro @Nullable private PsiType inferClosureReturnType() { final ExtractClosureHelperImpl mockHelper = - new ExtractClosureHelperImpl(myInfo, "__test___n_", false, new TIntArrayList(), false, 0, false); + new ExtractClosureHelperImpl(myInfo, "__test___n_", false, new TIntArrayList(), false, 0, false, false); final PsiType returnType; final AccessToken token = WriteAction.start(); try { @@ -469,7 +469,8 @@ public class GrIntroduceParameterDialog extends DialogWrapper implements GrIntro getParametersToRemove(), myDelegateViaOverloadingMethodCheckBox.isSelected(), getReplaceFieldsWithGetter(), - myForceReturnCheckBox.isSelected()); + myForceReturnCheckBox.isSelected(), + myTypeComboBox.getSelectedType() == null); if (toReplaceIn instanceof GrMethod) { invokeRefactoring(new ExtractClosureFromMethodProcessor(settings)); } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/introduceParameter/ExtractClosureTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/introduceParameter/ExtractClosureTest.groovy index 374dde1b4b45..911977c3a0e9 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/introduceParameter/ExtractClosureTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/introduceParameter/ExtractClosureTest.groovy @@ -46,7 +46,8 @@ public abstract class ExtractClosureTest extends LightGroovyTestCase { GrIntroduceParameterSettings helper = new ExtractClosureHelperImpl(info, "closure", false, new TIntArrayList(toRemove as int[]), false, - IntroduceParameterRefactoring.REPLACE_FIELDS_WITH_GETTERS_NONE, forceReturn) + IntroduceParameterRefactoring.REPLACE_FIELDS_WITH_GETTERS_NONE, + forceReturn, false) for (p in notToUseAsParams) { helper.parameterInfos[p].passAsParameter = false }