From 83a2d9cb96fa0e05b7073ff5eb4050c368aeccc8 Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 1 Aug 2013 15:55:45 +0200 Subject: [PATCH] IDEA-111362 Generate constructor removes "m" from variable name --- .../impl/source/codeStyle/JavaCodeStyleManagerImpl.java | 7 +++++-- .../generateConstructor/afterFieldPrefixCoincidence.java | 8 ++++++++ .../generateConstructor/beforeFieldPrefixCoincidence.java | 5 +++++ .../com/intellij/codeInsight/GenerateConstructorTest.java | 5 +++++ 4 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/generateConstructor/afterFieldPrefixCoincidence.java create mode 100644 java/java-tests/testData/codeInsight/generateConstructor/beforeFieldPrefixCoincidence.java diff --git a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/JavaCodeStyleManagerImpl.java b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/JavaCodeStyleManagerImpl.java index 8beff5d7b21e..0fe403b84ff8 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/JavaCodeStyleManagerImpl.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/JavaCodeStyleManagerImpl.java @@ -748,8 +748,11 @@ public class JavaCodeStyleManagerImpl extends JavaCodeStyleManager { String suffix = getSuffixByVariableKind(variableKind); boolean doDecapitalize = false; - if (name.startsWith(prefix) && name.length() > prefix.length()) { - name = name.substring(prefix.length()); + int pLength = prefix.length(); + if (pLength > 0 && name.startsWith(prefix) && name.length() > pLength && + // check it's not just a long camel word that happens to begin with the specified prefix + (!Character.isJavaIdentifierPart(prefix.charAt(pLength - 1)) || Character.isUpperCase(name.charAt(pLength)))) { + name = name.substring(pLength); doDecapitalize = true; } diff --git a/java/java-tests/testData/codeInsight/generateConstructor/afterFieldPrefixCoincidence.java b/java/java-tests/testData/codeInsight/generateConstructor/afterFieldPrefixCoincidence.java new file mode 100644 index 000000000000..9ae5a0b2ec4d --- /dev/null +++ b/java/java-tests/testData/codeInsight/generateConstructor/afterFieldPrefixCoincidence.java @@ -0,0 +1,8 @@ +class Parent { + Object menu; + + Parent(Object menu) { + this.menu = menu; + } +} + diff --git a/java/java-tests/testData/codeInsight/generateConstructor/beforeFieldPrefixCoincidence.java b/java/java-tests/testData/codeInsight/generateConstructor/beforeFieldPrefixCoincidence.java new file mode 100644 index 000000000000..e1a589cf2575 --- /dev/null +++ b/java/java-tests/testData/codeInsight/generateConstructor/beforeFieldPrefixCoincidence.java @@ -0,0 +1,5 @@ +class Parent { + Object menu; + +} + diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/GenerateConstructorTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/GenerateConstructorTest.java index 1aeb16c810bd..3fb5b7c848f4 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/GenerateConstructorTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/GenerateConstructorTest.java @@ -50,6 +50,11 @@ public class GenerateConstructorTest extends LightCodeInsightTestCase { public void testFinalFieldPreselection() throws Exception { doTest(true); } public void testSubstitution() throws Exception { doTest(true); } + public void testFieldPrefixCoincidence() throws Exception { + CodeStyleSettingsManager.getInstance(getProject()).getCurrentSettings().FIELD_NAME_PREFIX = "m"; + doTest(); + } + private void doTest() throws Exception { doTest(false); }