diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/refactoring/JetNameSuggester.java b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/refactoring/JetNameSuggester.java index 66acdc5e5ec..0f3dda8b9c9 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/refactoring/JetNameSuggester.java +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/refactoring/JetNameSuggester.java @@ -219,15 +219,44 @@ public class JetNameSuggester { } } + boolean upperCaseLetterBefore = false; for (int i = 0; i < s.length(); ++i) { + char c = s.charAt(i); + boolean upperCaseLetter = Character.isUpperCase(c); + if (i == 0) { - addName(result, StringUtil.decapitalize(s), validator); + addName(result, decapitalize(s), validator); } - else if (s.charAt(i) >= 'A' && s.charAt(i) <= 'Z') { - addName(result, StringUtil.decapitalize(s.substring(i)), validator); + else { + if (upperCaseLetter && !upperCaseLetterBefore) { + addName(result, decapitalize(s.substring(i)), validator); + } } + + upperCaseLetterBefore = upperCaseLetter; } } + + private static String decapitalize(String s) { + char c = s.charAt(0); + if (!Character.isUpperCase(c)) return s; + + StringBuilder builder = new StringBuilder(s.length()); + boolean decapitalize = true; + for (int i = 0; i < s.length(); i++) { + c = s.charAt(i); + if (decapitalize) { + if (Character.isUpperCase(c)) { + c = Character.toLowerCase(c); + } + else { + decapitalize = false; + } + } + builder.append(c); + } + return builder.toString(); + } private static String deleteNonLetterFromString(String s) { Pattern pattern = Pattern.compile("[^a-zA-Z]"); diff --git a/idea/testData/refactoring/nameSuggester/URL.kt b/idea/testData/refactoring/nameSuggester/URL.kt new file mode 100644 index 00000000000..d8981dac9c6 --- /dev/null +++ b/idea/testData/refactoring/nameSuggester/URL.kt @@ -0,0 +1,10 @@ +class URL + +fun a() { + val x = URL() + x +} +/* +url +x +*/ diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/nameSuggester/JetNameSuggesterTest.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/nameSuggester/JetNameSuggesterTest.java index 0dbc6e5dd05..f90efa4599d 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/nameSuggester/JetNameSuggesterTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/nameSuggester/JetNameSuggesterTest.java @@ -82,6 +82,10 @@ public class JetNameSuggesterTest extends LightCodeInsightFixtureTestCase { doTest(); } + public void testURL() { + doTest(); + } + @Override protected void setUp() throws Exception { super.setUp();