1st-letter-case-sensitive filtering for classes only

This commit is contained in:
peter
2011-03-21 21:29:06 +01:00
parent 8fbf9a7767
commit 13a5cfc999
6 changed files with 33 additions and 18 deletions
@@ -29,11 +29,7 @@ public class BasicToClassNameDelegator extends AbstractBasicToClassNameDelegator
@Override
protected boolean isClassNameCompletionSupported(CompletionResultSet result, PsiFile file, PsiElement position) {
if (file.getLanguage() != StdLanguages.XML) return false;
final String s = result.getPrefixMatcher().getPrefix();
if (StringUtil.isEmpty(s) || !Character.isUpperCase(s.charAt(0))) return false;
return true;
return file.getLanguage() == StdLanguages.XML && StringUtil.isCapitalized(result.getPrefixMatcher().getPrefix());
}
@Override
@@ -15,6 +15,7 @@
*/
package com.intellij.codeInsight.completion;
import com.intellij.codeInsight.CodeInsightSettings;
import com.intellij.codeInsight.TailType;
import com.intellij.codeInsight.daemon.impl.quickfix.ImportClassFix;
import com.intellij.codeInsight.hint.ShowParameterInfoHandler;
@@ -30,9 +31,10 @@ import com.intellij.openapi.editor.highlighter.HighlighterIterator;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.patterns.*;
import com.intellij.patterns.ElementPattern;
import com.intellij.patterns.PatternCondition;
import com.intellij.patterns.PsiNameValuePairPattern;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.NameUtil;
import com.intellij.psi.filters.*;
import com.intellij.psi.filters.classes.AssignableFromContextFilter;
import com.intellij.psi.filters.element.ExcludeDeclaredFilter;
@@ -247,6 +249,7 @@ public class JavaCompletionContributor extends CompletionContributor {
if (reference instanceof PsiJavaReference) {
final ElementFilter filter = getReferenceFilter(position);
if (filter != null) {
boolean showCapitalizedClasses = showCapitalizedClasses(result);
final boolean isSwitchLabel = SWITCH_LABEL.accepts(position);
final PsiFile originalFile = parameters.getOriginalFile();
for (LookupElement element : JavaCompletionUtil.processJavaReference(position,
@@ -258,6 +261,12 @@ public class JavaCompletionContributor extends CompletionContributor {
continue;
}
if (!showCapitalizedClasses &&
element.getObject() instanceof PsiClass &&
StringUtil.isCapitalized(((PsiClass)element.getObject()).getName())) {
continue;
}
if (isSwitchLabel) {
result.addElement(TailTypeDecorator.withTail(element, TailType.createSimpleTailType(':')));
}
@@ -299,6 +308,11 @@ public class JavaCompletionContributor extends CompletionContributor {
});
}
public static boolean showCapitalizedClasses(CompletionResultSet result) {
String prefix = result.getPrefixMatcher().getPrefix();
return StringUtil.isEmpty(prefix) || StringUtil.isCapitalized(prefix) || CodeInsightSettings.getInstance().COMPLETION_CASE_SENSITIVE == CodeInsightSettings.NONE;
}
private static void addKeywords(CompletionParameters parameters, CompletionResultSet result) {
PsiElement position = parameters.getPosition();
final Set<LookupElement> lookupSet = new LinkedHashSet<LookupElement>();
@@ -330,11 +344,7 @@ public class JavaCompletionContributor extends CompletionContributor {
return false;
}
if (NameUtil.isUseMinusculeHumpMatcher()) return true;
final String s = result.getPrefixMatcher().getPrefix();
if (StringUtil.isEmpty(s) || !Character.isUpperCase(s.charAt(0))) return false;
return true;
return StringUtil.isCapitalized(result.getPrefixMatcher().getPrefix());
}
private static void completeAnnotationAttributeName(CompletionResultSet result, PsiElement insertedElement,
@@ -489,8 +489,10 @@ public class JavaCompletionUtil {
LookupElement item = createLookupElement(completionElement, qualifierType);
if (item != null) {
final Object o = item.getObject();
if (o instanceof PsiClass && !isSourceLevelAccessible(element, (PsiClass)o, pkgContext)) {
continue;
if (o instanceof PsiClass) {
if (!isSourceLevelAccessible(element, (PsiClass)o, pkgContext)) {
continue;
}
}
if (o instanceof PsiMember) {
mentioned.add((PsiMember)o);