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 f085488f00dc..a2e133dea603 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 @@ -405,12 +405,24 @@ public class GroovyCompletionUtil { } public static boolean hasConstructorParameters(@NotNull PsiClass clazz, @NotNull GroovyPsiElement place) { - for (GroovyResolveResult result : ResolveUtil.getAllClassConstructors(clazz, place, PsiSubstitutor.EMPTY, null)) { - if (result.isAccessible() && ((PsiMethod)result.getElement()).getParameterList().getParametersCount() > 0) { - return true; + final GroovyResolveResult[] constructors = ResolveUtil.getAllClassConstructors(clazz, place, PsiSubstitutor.EMPTY, null); + + boolean hasParameters = false; + boolean hasAccessibleConstructors = false; + for (GroovyResolveResult result : constructors) { + final PsiElement element = result.getElement(); + if (element instanceof PsiMethod) { + if (((PsiMethod)element).getParameterList().getParametersCount() > 0) { + hasParameters = true; + } + if (result.isAccessible()) { + hasAccessibleConstructors = true; + } + if (hasAccessibleConstructors && hasParameters) return true; } } - return false; + + return !hasAccessibleConstructors && hasParameters; } public static void addImportForItem(PsiFile file, int startOffset, LookupItem item) throws IncorrectOperationException { 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 7875b149d9b3..aa1fad3d2b3c 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyCompletionTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyCompletionTest.groovy @@ -1583,4 +1583,39 @@ this. void testPrimitiveTypeTailTextInSafeCast() { doBasicTest('print(a as boolea)', 'print(a as boolean)') } + + void testCompleteInaccessibleConstructors() { + doBasicTest('''\ +class Foooo { + private Foooo(int x) {} +} + +new Fooo +''', '''\ +class Foooo { + private Foooo(int x) {} +} + +new Foooo() +''') + } + + void testCompleteInaccessibleVsAccessibleConstructors() { + doBasicTest('''\ +class Foooo { + private Foooo(int x) {} + public Foooo() {} +} + +new Fooo +''', '''\ +class Foooo { + private Foooo(int x) {} + public Foooo() {} +} + +new Foooo() +''') + } + } \ No newline at end of file