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);
@@ -735,6 +735,10 @@ public class StringUtil {
return toUpperCase(s.charAt(0)) + s.substring(1);
}
public static boolean isCapitalized(@Nullable String s) {
return s != null && s.length() > 0 && Character.isUpperCase(s.charAt(0));
}
@NotNull
public static String capitalizeWithJavaBeanConvention(@NotNull String s) {
if (s.length() > 1 && Character.isUpperCase(s.charAt(1))) {
@@ -379,7 +379,7 @@ public class NameUtil {
}
public static Matcher buildCompletionMatcher(String pattern, int exactPrefixLen, boolean allowToUpper, boolean allowToLower) {
return buildMatcher(pattern, buildRegexp(pattern, exactPrefixLen, allowToUpper, allowToLower, false, true), exactPrefixLen > 0);
return buildMatcher(pattern, buildRegexp(pattern, exactPrefixLen, allowToUpper, allowToLower, false, true), false);
}
public static Matcher buildMatcher(String pattern, int exactPrefixLen, boolean allowToUpper, boolean allowToLower) {
@@ -29,7 +29,6 @@ import com.intellij.patterns.ElementPattern;
import com.intellij.patterns.PsiElementPattern;
import com.intellij.patterns.StandardPatterns;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.NameUtil;
import com.intellij.psi.filters.ElementFilter;
import com.intellij.psi.filters.FilterPositionUtil;
import com.intellij.psi.filters.TrueFilter;
@@ -363,6 +362,7 @@ public class GroovyCompletionContributor extends CompletionContributor {
final ElementFilter classFilter = getClassFilter(position);
final boolean showCapitalizedClasses = JavaCompletionContributor.showCapitalizedClasses(result);
reference.processVariants(new Consumer<Object>() {
public void consume(Object element) {
if (element instanceof PsiClass && inheritors.alreadyProcessed((PsiClass)element)) {
@@ -384,6 +384,10 @@ public class GroovyCompletionContributor extends CompletionContributor {
object = ((GroovyResolveResult)object).getElement();
}
if (!showCapitalizedClasses && object instanceof PsiClass && StringUtil.isCapitalized(((PsiClass)object).getName())) {
return;
}
final boolean autopopup = parameters.getInvocationCount() == 0;
//skip default groovy methods
if (!secondCompletionInvoked &&
@@ -454,8 +458,7 @@ public class GroovyCompletionContributor extends CompletionContributor {
}
});
final String s = result.getPrefixMatcher().getPrefix();
if (NameUtil.isUseMinusculeHumpMatcher() || !StringUtil.isEmpty(s) && Character.isUpperCase(s.charAt(0))) {
if (StringUtil.isCapitalized(prefix)) {
addAllClasses(parameters, result, inheritors);
}
}