diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionData.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionData.java index cd4d59117699..4de511021a00 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionData.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionData.java @@ -606,7 +606,9 @@ public class GroovyCompletionData { } private static boolean suggestModifiers(PsiElement context) { - if (GroovyCompletionUtil.asSimpleVariable(context) || GroovyCompletionUtil.asTypedMethod(context)) { + if (GroovyCompletionUtil.asSimpleVariable(context) || + GroovyCompletionUtil.asTypedMethod(context) || + GroovyCompletionUtil.isNewStatementInScript(context)) { return true; } if (GroovyCompletionUtil.isFirstElementAfterPossibleModifiersInVariableDeclaration(context, false) && @@ -640,13 +642,6 @@ public class GroovyCompletionData { if (context.getTextRange().getStartOffset() == 0 && !(context instanceof OuterLanguageElement)) { return true; } - final PsiElement leaf = GroovyCompletionUtil.getLeafByOffset(context.getTextRange().getStartOffset() - 1, context); - if (leaf != null && GroovyCompletionUtil.isNewStatement(context, false)) { - PsiElement parent = leaf.getParent(); - if (parent instanceof GroovyFile) { - return true; - } - } return contextParent instanceof GrExpression && contextParent.getParent() instanceof GrApplicationStatement && contextParent.getParent().getParent() instanceof GroovyFile && @@ -656,7 +651,8 @@ public class GroovyCompletionData { public static boolean suggestFinalDef(PsiElement context) { if (GroovyCompletionUtil.asSimpleVariable(context) || GroovyCompletionUtil.asTypedMethod(context) || - GroovyCompletionUtil.asVariableInBlock(context)) { + GroovyCompletionUtil.asVariableInBlock(context) || + GroovyCompletionUtil.isNewStatementInScript(context)) { return true; } if ((context.getParent() instanceof GrParameter && diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionUtil.java index 064df778c9b2..e71f78596c48 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionUtil.java @@ -51,6 +51,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.formatter.GeeseUtil; import org.jetbrains.plugins.groovy.lang.GrReferenceAdjuster; import org.jetbrains.plugins.groovy.lang.psi.GrReferenceElement; +import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement; import org.jetbrains.plugins.groovy.lang.psi.api.GroovyResolveResult; import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.annotation.GrAnnotation; @@ -565,4 +566,15 @@ public class GroovyCompletionUtil { return Collections.emptyList(); } + + static boolean isNewStatementInScript(PsiElement context) { + final PsiElement leaf = getLeafByOffset(context.getTextRange().getStartOffset() - 1, context); + if (leaf != null && isNewStatement(context, false)) { + PsiElement parent = leaf.getParent(); + if (parent instanceof GroovyFile) { + return true; + } + } + return false; + } } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyCompletionTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyCompletionTest.groovy index e9028fb78f71..8b6a02a96ac3 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyCompletionTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyCompletionTest.groovy @@ -984,6 +984,8 @@ println "abcd" public void testIfParenthesis() { checkCompletion 'int iff; if', '(', "int iff; if ()" } + public void testMakingDefFromAssignment() { checkCompletion 'int defInt; defoo = 2', 'f ', "int defInt; def foo = 2" } + public void testEnumPropertyType() { checkSingleItemCompletion 'enum Foo {a,b; static List>', "enum Foo {a,b; static List>" }