java completion: show only accessible constructors, make array braces non-grayed (IDEA-CR-13383)

This commit is contained in:
peter
2016-09-06 15:23:40 +02:00
parent 35ae3470ae
commit 14660aff41
3 changed files with 11 additions and 3 deletions
@@ -565,7 +565,7 @@ public class JavaCompletionUtil {
return methods.length == 0 || Arrays.stream(methods).anyMatch(JavaCompletionUtil::isConstructorCompletable);
}
static boolean isConstructorCompletable(@NotNull PsiMethod constructor) {
private static boolean isConstructorCompletable(@NotNull PsiMethod constructor) {
return !(constructor instanceof PsiCompiledElement) || !constructor.hasModifierProperty(PsiModifier.PRIVATE);
}
@@ -22,6 +22,7 @@ import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.resolve.JavaResolveUtil;
import com.intellij.psi.util.CachedValueProvider;
import com.intellij.psi.util.CachedValuesManager;
import com.intellij.psi.util.PsiTreeUtil;
@@ -94,7 +95,7 @@ public class JavaConstructorCallElement extends JavaMethodCallElement {
PsiMethod[] constructors = psiClass.getConstructors();
if (constructors.length > 0) {
return JBIterable.of(constructors).
filter(JavaCompletionUtil::isConstructorCompletable).
filter(c -> JavaResolveUtil.isAccessible(c, psiClass, c.getModifierList(), position, null, null)).
map(c -> new JavaConstructorCallElement(classItem, c, type)).
toList();
}
@@ -34,7 +34,9 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
@@ -284,7 +286,12 @@ public class PsiTypeLookupItem extends LookupItem implements TypedLookupItem {
}
if (myBracketsCount > 0) {
presentation.setTailText(StringUtil.repeat("[]", myBracketsCount) + StringUtil.notNullize(presentation.getTailText()), true);
List<LookupElementPresentation.TextFragment> tail = new ArrayList<>(presentation.getTailFragments());
presentation.clearTail();
presentation.appendTailText(StringUtil.repeat("[]", myBracketsCount), false);
for (LookupElementPresentation.TextFragment fragment : tail) {
presentation.appendTailText(fragment.text, fragment.isGrayed());
}
}
}