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 d5ca1da89b5..d662f612a77 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 @@ -192,11 +192,22 @@ public class JetNameSuggester { } } + private static final String[] ACCESSOR_PREFIXES = { "get", "is", "set" }; + private static void addCamelNames(ArrayList result, String name, JetNameValidator validator) { if (name == "") return; String s = deleteNonLetterFromString(name); - if (s.startsWith("get") || s.startsWith("set")) s = s.substring(3); - else if (s.startsWith("is")) s = s.substring(2); + + for (String prefix : ACCESSOR_PREFIXES) { + if (!s.startsWith(prefix)) continue; + + int len = prefix.length(); + if (len < s.length() && Character.isUpperCase(s.charAt(len))) { + s = s.substring(len); + break; + } + } + for (int i = 0; i < s.length(); ++i) { if (i == 0) { addName(result, StringUtil.decapitalize(s), validator); diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/afterDoNotStripPrefix.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/afterDoNotStripPrefix.kt new file mode 100644 index 00000000000..e13ee32404f --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/afterDoNotStripPrefix.kt @@ -0,0 +1,10 @@ +// "Create function 'foo'" "true" +class Settings + +fun isModified(settings: Settings, c: C) = c.foo(settings) + +class C { + fun foo(settings: Settings): Any { + throw UnsupportedOperationException("not implemented") //To change body of created functions use File | Settings | File Templates. + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/afterStripPrefix.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/afterStripPrefix.kt new file mode 100644 index 00000000000..65b35513241 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/afterStripPrefix.kt @@ -0,0 +1,10 @@ +// "Create function 'foo'" "true" +class SetOptions + +fun isModified(setOptions: SetOptions, c: C) = c.foo(setOptions) + +class C { + fun foo(options: SetOptions): Any { + throw UnsupportedOperationException("not implemented") //To change body of created functions use File | Settings | File Templates. + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/beforeDoNotStripPrefix.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/beforeDoNotStripPrefix.kt new file mode 100644 index 00000000000..982aaa712cd --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/beforeDoNotStripPrefix.kt @@ -0,0 +1,7 @@ +// "Create function 'foo'" "true" +class Settings + +fun isModified(settings: Settings, c: C) = c.foo(settings) + +class C { +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/beforeStripPrefix.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/beforeStripPrefix.kt new file mode 100644 index 00000000000..ab9b92435f0 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/beforeStripPrefix.kt @@ -0,0 +1,7 @@ +// "Create function 'foo'" "true" +class SetOptions + +fun isModified(setOptions: SetOptions, c: C) = c.foo(setOptions) + +class C { +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 8c07cb13b46..58889a46858 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -1586,6 +1586,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("beforeDoNotStripPrefix.kt") + public void testDoNotStripPrefix() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createFunction/call/beforeDoNotStripPrefix.kt"); + doTest(fileName); + } + @TestMetadata("beforeExtensionFunOnTrait.kt") public void testExtensionFunOnTrait() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createFunction/call/beforeExtensionFunOnTrait.kt"); @@ -1778,6 +1784,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("beforeStripPrefix.kt") + public void testStripPrefix() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createFunction/call/beforeStripPrefix.kt"); + doTest(fileName); + } + @TestMetadata("beforeThisInClass.kt") public void testThisInClass() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createFunction/call/beforeThisInClass.kt");