diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/extract/method/ExtractMethodInfoHelper.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/extract/method/ExtractMethodInfoHelper.java index 52a913ce125e..0149acf92ca7 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/extract/method/ExtractMethodInfoHelper.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/extract/method/ExtractMethodInfoHelper.java @@ -21,7 +21,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiModifier; import org.jetbrains.annotations.NotNull; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMember; import org.jetbrains.plugins.groovy.refactoring.extract.ExtractInfoHelperBase; import org.jetbrains.plugins.groovy.refactoring.extract.InitialInfo; @@ -88,8 +88,8 @@ public class ExtractMethodInfoHelper extends ExtractInfoHelperBase { private static boolean canBeStatic(PsiElement statement) { PsiElement parent = statement.getParent(); while (parent != null && !(parent instanceof PsiFile)) { - if (parent instanceof GrMethod) { - return ((GrMethod) parent).hasModifierProperty(PsiModifier.STATIC); + if (parent instanceof GrMember) { + return ((GrMember) parent).hasModifierProperty(PsiModifier.STATIC); } parent = parent.getParent(); } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/extract/method/ExtractMethodTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/extract/method/ExtractMethodTest.groovy index cf167e024754..d17fea8cae5d 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/extract/method/ExtractMethodTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/extract/method/ExtractMethodTest.groovy @@ -198,4 +198,45 @@ private int testMethod() { } ''') } + + void testExtractMethodFromStaticFieldClosureInitializer() { + doTest('''\ +class Foo { + static constraints = { + bar validator: { val, obj -> + println "validating ${obj}.$val" + } + } +} +''', '''\ +class Foo { + static constraints = { + bar validator: { val, obj -> + testMethod(obj, val) + } + } + + private static testMethod(obj, val) { + println "validating ${obj}.$val" + } +} +''') + } + + void testExtractMethodFromStaticFieldInitializer() { + doTest('''\ +class Foo { + static constraints = 2 +} +''', '''\ +class Foo { + static constraints = testMethod() + + private static int testMethod() { + return 2 + } +} +''') + } + } \ No newline at end of file