IDEA-111780 Extract method from static closure should create static method

This commit is contained in:
Max Medvedev
2013-09-07 12:00:09 -07:00
parent bc4b2d7986
commit 8bc5fbfc64
2 changed files with 44 additions and 3 deletions
@@ -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();
}
@@ -198,4 +198,45 @@ private int testMethod() {
}
''')
}
void testExtractMethodFromStaticFieldClosureInitializer() {
doTest('''\
class Foo {
static constraints = {
bar validator: { val, obj ->
<begin>println "validating ${obj}.$val"<end>
}
}
}
''', '''\
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 = <begin>2<end>
}
''', '''\
class Foo {
static constraints = testMethod()
private static int testMethod() {
return 2
}
}
''')
}
}