From 7883e7a3e58254e865b0a5c8fcd7d10b0ad95c56 Mon Sep 17 00:00:00 2001 From: Maxim Medvedev Date: Fri, 11 Mar 2011 11:38:16 +0300 Subject: [PATCH] IDEA-66425 Groovy: Introduce Field Refactoring applied to closure with parameter(s) doesn't allow to initialize filed in its declaration or class constructor --- .../introduce/field/GrIntroduceFieldDialog.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/field/GrIntroduceFieldDialog.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/field/GrIntroduceFieldDialog.java index 5dafb7fc3a8f..e20ab324720a 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/field/GrIntroduceFieldDialog.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/field/GrIntroduceFieldDialog.java @@ -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 ref = new Ref(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); } });