diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/weighers/GrKindWeigher.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/weighers/GrKindWeigher.java index 6576cc835bb8..ec55633f7873 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/weighers/GrKindWeigher.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/weighers/GrKindWeigher.java @@ -18,6 +18,7 @@ package org.jetbrains.plugins.groovy.lang.completion.weighers; import com.intellij.codeInsight.completion.CompletionLocation; import com.intellij.codeInsight.completion.CompletionWeigher; import com.intellij.codeInsight.lookup.LookupElement; +import com.intellij.codeInsight.lookup.PsiTypeLookupItem; import com.intellij.psi.*; import com.intellij.psi.impl.light.LightElement; import com.intellij.psi.util.PsiTreeUtil; @@ -77,6 +78,12 @@ public class GrKindWeigher extends CompletionWeigher { if (o instanceof PsiVariable && !(o instanceof PsiField)) { return NotQualifiedKind.local; } + + PsiTypeLookupItem item = element.as(PsiTypeLookupItem.CLASS_CONDITION_KEY); + if (item != null && item.getBracketsCount() > 0) { + return NotQualifiedKind.arrayType; + } + if (isPriorityKeyword(o)) return NotQualifiedKind.local; if (isLightElement(o)) return NotQualifiedKind.unknown; if (o instanceof PsiMember) { @@ -139,6 +146,7 @@ public class GrKindWeigher extends CompletionWeigher { } private static enum NotQualifiedKind { + arrayType, innerClass, unknown, accessor, diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyCompletionTestBase.java b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyCompletionTestBase.java index 8ceaaa150941..9c3a3bda4644 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyCompletionTestBase.java +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyCompletionTestBase.java @@ -28,6 +28,10 @@ abstract public class GroovyCompletionTestBase extends LightCodeInsightFixtureTe protected void doSmartTest() { myFixture.configureByFile(getTestName(false) + ".groovy"); myFixture.complete(CompletionType.SMART); + checkResult(); + } + + protected void checkResult() { myFixture.checkResultByFile(getTestName(false) + "_after.groovy", true); } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovySmartCompletionTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovySmartCompletionTest.groovy index 682bdcd4e37e..236f70474fe1 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovySmartCompletionTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovySmartCompletionTest.groovy @@ -90,6 +90,12 @@ public class GroovySmartCompletionTest extends GroovyCompletionTestBase { public void testEnumMembersInAssignment() {doSmartCompletion "IN_STOCK", "NOWHERE", "ORDERED" } public void testEnumMembersInAssignmentInsideEnum() {doSmartCompletion "IN_STOCK", "NOWHERE", "ORDERED", "next", "previous" } + public void testPreferVarargElement() { + doSmartCompletion "Foo", "Foo" + myFixture.type('\n') + checkResult() + } + void testNativeList() {doSmartCompletion('a1', 'a2')}; public void testMembersImportStatically() { diff --git a/plugins/groovy/testdata/groovy/completion/smart/PreferVarargElement.groovy b/plugins/groovy/testdata/groovy/completion/smart/PreferVarargElement.groovy new file mode 100644 index 000000000000..3ae7230b5127 --- /dev/null +++ b/plugins/groovy/testdata/groovy/completion/smart/PreferVarargElement.groovy @@ -0,0 +1,5 @@ +def foo(Foo... args) {} + +class Foo {} + +foo(new ) \ No newline at end of file diff --git a/plugins/groovy/testdata/groovy/completion/smart/PreferVarargElement_after.groovy b/plugins/groovy/testdata/groovy/completion/smart/PreferVarargElement_after.groovy new file mode 100644 index 000000000000..4eb5e8767feb --- /dev/null +++ b/plugins/groovy/testdata/groovy/completion/smart/PreferVarargElement_after.groovy @@ -0,0 +1,5 @@ +def foo(Foo... args) {} + +class Foo {} + +foo(new Foo()) \ No newline at end of file