diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaNoVariantsDelegator.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaNoVariantsDelegator.java index faebdf75e87c..7121e95db2f1 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaNoVariantsDelegator.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaNoVariantsDelegator.java @@ -20,6 +20,7 @@ import com.intellij.codeInsight.completion.impl.BetterPrefixMatcher; import com.intellij.codeInsight.completion.impl.CamelHumpMatcher; import com.intellij.codeInsight.lookup.AutoCompletionPolicy; import com.intellij.codeInsight.lookup.LookupElement; +import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.psi.filters.ElementFilter; @@ -154,8 +155,12 @@ public class JavaNoVariantsDelegator extends CompletionContributor { Set plainVariants = JavaSmartCompletionContributor.completeReference(qualifier, qualifier, filter, true, true, parameters, qMatcher); - for (PsiClass aClass : PsiShortNamesCache.getInstance(qualifier.getProject()).getClassesByName(referenceName, qualifier.getResolveScope())) { - plainVariants.add(JavaClassNameCompletionContributor.createClassLookupItem(aClass, true)); + Project project = qualifier.getProject(); + PsiResolveHelper helper = JavaPsiFacade.getInstance(project).getResolveHelper(); + for (PsiClass aClass : PsiShortNamesCache.getInstance(project).getClassesByName(referenceName, qualifier.getResolveScope())) { + if (helper.isAccessible(aClass, qualifier, null)) { + plainVariants.add(JavaClassNameCompletionContributor.createClassLookupItem(aClass, true)); + } } if (!plainVariants.isEmpty()) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/completion/normal/OnlyAccessibleClassesInChainedMethodReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/completion/normal/OnlyAccessibleClassesInChainedMethodReference.java new file mode 100644 index 000000000000..0159025c54f4 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/completion/normal/OnlyAccessibleClassesInChainedMethodReference.java @@ -0,0 +1,8 @@ +import java.util.Map; +import java.util.function.Function; +class Test2 { + void test() { + Function, String> fn = Entry::getKex + } +} + diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/Normal8CompletionTest.groovy b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/Normal8CompletionTest.groovy index d2192fefa834..b809e2e1a82e 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/Normal8CompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/Normal8CompletionTest.groovy @@ -350,6 +350,13 @@ class Test88 { myFixture.assertPreferredCompletionItems 0, 'Strings::goo' } + void testOnlyAccessibleClassesInChainedMethodReference() { + configureByTestName() + def p = LookupElementPresentation.renderElement(assertOneElement(myFixture.lookupElements)) + assert p.itemText == 'Entry::getKey' + assert p.tailText.contains(' java.util.Map') + } + void testPreferVariableToLambda() { configureByTestName() myFixture.assertPreferredCompletionItems 0, 'output', 'out -> '