diff --git a/platform/platform-tests/testSrc/com/intellij/psi/util/NameUtilMatchingTest.groovy b/platform/platform-tests/testSrc/com/intellij/psi/util/NameUtilMatchingTest.groovy index 0388aed9b612..0e0231940761 100644 --- a/platform/platform-tests/testSrc/com/intellij/psi/util/NameUtilMatchingTest.groovy +++ b/platform/platform-tests/testSrc/com/intellij/psi/util/NameUtilMatchingTest.groovy @@ -280,6 +280,7 @@ public class NameUtilMatchingTest extends UsefulTestCase { assertMatches("*_dark", "collapseAll_dark.png"); assertMatches("*_dark.png", "collapseAll_dark.png"); assertMatches("**_dark.png", "collapseAll_dark.png"); + assertTrue(firstLetterMatcher("*_DARK").matches("A_DARK.png")); } public void testMiddleMatching() { diff --git a/platform/util/src/com/intellij/psi/codeStyle/MinusculeMatcher.java b/platform/util/src/com/intellij/psi/codeStyle/MinusculeMatcher.java index 559b6d0d1092..03fc8bde0055 100644 --- a/platform/util/src/com/intellij/psi/codeStyle/MinusculeMatcher.java +++ b/platform/util/src/com/intellij/psi/codeStyle/MinusculeMatcher.java @@ -410,13 +410,18 @@ public class MinusculeMatcher implements Matcher { if (!charEquals(patternChar, patternIndex, name.charAt(nameIndex), ignoreCase)) return false; if (myOptions == NameUtil.MatchingCaseSensitivity.FIRST_LETTER && - (patternIndex == 0 || patternIndex == 1 && isWildcard(0)) && + (patternIndex == 0 || patternIndex == 1 && isWildcard(0)) && + hasCase(patternChar) && Character.isUpperCase(patternChar) != Character.isUpperCase(name.charAt(0))) { return false; } return true; } + private static boolean hasCase(char patternChar) { + return Character.isUpperCase(patternChar) || Character.isLowerCase(patternChar); + } + private boolean isWildcard(int patternIndex) { if (patternIndex >= 0 && patternIndex < myPattern.length) { char pc = myPattern[patternIndex];