diff --git a/platform/platform-tests/testSrc/com/intellij/psi/util/NameUtilMatchingTest.java b/platform/platform-tests/testSrc/com/intellij/psi/util/NameUtilMatchingTest.java index 196de52477aa..07524f7483f8 100644 --- a/platform/platform-tests/testSrc/com/intellij/psi/util/NameUtilMatchingTest.java +++ b/platform/platform-tests/testSrc/com/intellij/psi/util/NameUtilMatchingTest.java @@ -711,4 +711,11 @@ public class NameUtilMatchingTest extends UsefulTestCase { assertPreference("GEN", "GetName", "GetExtendedName"); assertPreference("*GEN", "GetName", "GetExtendedName"); } + + public void testPrintln() { + assertMatches("pl", "println"); + assertMatches("pl", "printlnFoo"); + assertDoesntMatch("pl", "printlnx"); + } + } diff --git a/platform/util/src/com/intellij/psi/codeStyle/NameUtil.java b/platform/util/src/com/intellij/psi/codeStyle/NameUtil.java index dd679336c140..db029c99fcf0 100644 --- a/platform/util/src/com/intellij/psi/codeStyle/NameUtil.java +++ b/platform/util/src/com/intellij/psi/codeStyle/NameUtil.java @@ -385,7 +385,13 @@ public class NameUtil { if (!Character.isLetter(c)) { return false; } - return i == 0 || !Character.isLetterOrDigit(text.charAt(i - 1)); + return i == 0 || !Character.isLetterOrDigit(text.charAt(i - 1)) || isHardCodedWordStart(text, i); + } + + private static boolean isHardCodedWordStart(String text, int i) { + return text.charAt(i) == 'l' && + i < text.length() - 1 && text.charAt(i + 1) == 'n' && + (text.length() == i + 2 || isWordStart(text, i + 2)); } /**