From 13a5cfc999a02477bbd1db9fa5c1387ec719c686 Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 21 Mar 2011 21:23:03 +0100 Subject: [PATCH] 1st-letter-case-sensitive filtering for classes only --- .../completion/BasicToClassNameDelegator.java | 6 +---- .../completion/JavaCompletionContributor.java | 24 +++++++++++++------ .../completion/JavaCompletionUtil.java | 6 +++-- .../openapi/util/text/StringUtil.java | 4 ++++ .../com/intellij/psi/codeStyle/NameUtil.java | 2 +- .../GroovyCompletionContributor.java | 9 ++++--- 6 files changed, 33 insertions(+), 18 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/BasicToClassNameDelegator.java b/java/java-impl/src/com/intellij/codeInsight/completion/BasicToClassNameDelegator.java index ec78df97dcb1..bff39d62c421 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/BasicToClassNameDelegator.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/BasicToClassNameDelegator.java @@ -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 diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java index ade0d69873f6..555fdc4f4ecc 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java @@ -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 lookupSet = new LinkedHashSet(); @@ -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, diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java index 934de4bb4869..499a309000ed 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java @@ -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); diff --git a/platform/util/src/com/intellij/openapi/util/text/StringUtil.java b/platform/util/src/com/intellij/openapi/util/text/StringUtil.java index 37f10dad2a45..63fe7de8a65a 100644 --- a/platform/util/src/com/intellij/openapi/util/text/StringUtil.java +++ b/platform/util/src/com/intellij/openapi/util/text/StringUtil.java @@ -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))) { diff --git a/platform/util/src/com/intellij/psi/codeStyle/NameUtil.java b/platform/util/src/com/intellij/psi/codeStyle/NameUtil.java index cb6199573132..4c631a1c46b8 100644 --- a/platform/util/src/com/intellij/psi/codeStyle/NameUtil.java +++ b/platform/util/src/com/intellij/psi/codeStyle/NameUtil.java @@ -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) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionContributor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionContributor.java index d6e8262d6d4d..60c6b7a58362 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionContributor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionContributor.java @@ -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() { 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); } }