IDEA-66425 Groovy: Introduce Field Refactoring applied to closure with parameter(s) doesn't allow to initialize filed in its declaration or class constructor

This commit is contained in:
Maxim Medvedev
2011-03-11 14:46:52 +03:00
parent 92fe151d54
commit 7883e7a3e5
@@ -20,7 +20,9 @@ import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiParameter;
import com.intellij.psi.PsiType;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.introduceField.IntroduceFieldHandler;
import com.intellij.refactoring.ui.NameSuggestionsField;
@@ -339,6 +341,7 @@ public class GrIntroduceFieldDialog extends DialogWrapper implements GrIntroduce
}
final Ref<Boolean> ref = new Ref<Boolean>(Boolean.TRUE);
final GrExpression finalExpression = expression;
expression.accept(new GroovyRecursiveElementVisitor() {
@Override
public void visitReferenceExpression(GrReferenceExpression refExpr) {
@@ -348,6 +351,10 @@ public class GrIntroduceFieldDialog extends DialogWrapper implements GrIntroduce
if (resolved instanceof GrField && scope.getManager().areElementsEquivalent(scope, ((GrField)resolved).getContainingClass())) {
return;
}
if (resolved instanceof PsiParameter &&
PsiTreeUtil.isAncestor(finalExpression, ((PsiParameter)resolved).getDeclarationScope(), false)) {
return;
}
ref.set(Boolean.FALSE);
}
});