don't suggest inaccessible qualifiers when chain-completing a java method reference (IDEA-217955)

GitOrigin-RevId: 78fc63c40948e6873279d6fe4c923bf3113a8b2e
This commit is contained in:
peter
2019-07-23 17:44:15 +03:00
committed by intellij-monorepo-bot
parent 9a3bace650
commit a04504dddc
3 changed files with 22 additions and 2 deletions
@@ -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<LookupElement> 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()) {
@@ -0,0 +1,8 @@
import java.util.Map;
import java.util.function.Function;
class Test2 {
void test() {
Function<Map.Entry<String, String>, String> fn = Entry::getKe<caret>x
}
}
@@ -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 -> '