IDEA-82299 Groovy: Introduce Closure Parameter: selecting 'def' type for parameter of Closure type doesn't take effect

This commit is contained in:
Maxim.Medvedev
2012-03-15 16:49:08 +04:00
parent ca4a6e39d1
commit f504442866
5 changed files with 13 additions and 6 deletions
@@ -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
@@ -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();
@@ -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;
@@ -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));
}
@@ -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
}