mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-23 17:05:26 +02:00
FIXED - bug 306129: Error occurred when using generates getter and setters (for underscrore suffix variable)
https://bugs.eclipse.org/bugs/show_bug.cgi?id=306129
This commit is contained in:
parent
78e4512614
commit
3d44a24ca3
3 changed files with 78 additions and 7 deletions
|
@ -31,6 +31,7 @@ public class IdentifierHelperTest extends TestSuite {
|
|||
suite.addTest(new EmptyCaseTest());
|
||||
suite.addTest(new IllegalCharCaseTest());
|
||||
suite.addTest(new KeywordCaseTest());
|
||||
suite.addTestSuite(NameHelperTest.class);
|
||||
return suite;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2010 Marc-Andre Laperle and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* Marc-Andre Laperle - Initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.ui.tests.refactoring.utils;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.eclipse.cdt.internal.ui.refactoring.utils.NameHelper;
|
||||
|
||||
public class NameHelperTest extends TestCase {
|
||||
|
||||
public void testTrimFieldName() {
|
||||
assertEquals("f", NameHelper.trimFieldName("f_"));
|
||||
assertEquals("F", NameHelper.trimFieldName("F_"));
|
||||
assertEquals("oo", NameHelper.trimFieldName("F_oo"));
|
||||
assertEquals("o", NameHelper.trimFieldName("f_o"));
|
||||
|
||||
assertEquals("M", NameHelper.trimFieldName("a_M_"));
|
||||
assertEquals("bs", NameHelper.trimFieldName("a_bs_"));
|
||||
assertEquals("foo_bar", NameHelper.trimFieldName("foo_bar"));
|
||||
assertEquals("foo_bar", NameHelper.trimFieldName("foo_bar_"));
|
||||
|
||||
assertEquals("foo_b", NameHelper.trimFieldName("foo_b_"));
|
||||
|
||||
assertEquals("foo", NameHelper.trimFieldName("foo"));
|
||||
assertEquals("foo", NameHelper.trimFieldName("_foo"));
|
||||
assertEquals("bar", NameHelper.trimFieldName("_f_bar"));
|
||||
|
||||
assertEquals("f", NameHelper.trimFieldName("f__"));
|
||||
assertEquals("f", NameHelper.trimFieldName("__f"));
|
||||
assertEquals("O__b", NameHelper.trimFieldName("fO__b"));
|
||||
assertEquals("Oo", NameHelper.trimFieldName("fOo"));
|
||||
assertEquals("O", NameHelper.trimFieldName("fO"));
|
||||
|
||||
assertEquals("8", NameHelper.trimFieldName("_8"));
|
||||
|
||||
assertEquals("8bar", NameHelper.trimFieldName("_8bar_"));
|
||||
assertEquals("8bar_8", NameHelper.trimFieldName("_8bar_8"));
|
||||
assertEquals("8bAr", NameHelper.trimFieldName("_8bAr"));
|
||||
assertEquals("b8Ar", NameHelper.trimFieldName("_b8Ar"));
|
||||
}
|
||||
|
||||
}
|
|
@ -81,24 +81,44 @@ public class NameHelper {
|
|||
return qname;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the trimmed field name. Leading and trailing non-letters-digits are trimmed.
|
||||
* If the first letter-digit is in lower case and the next is in upper case,
|
||||
* the first letter is trimmed.
|
||||
*
|
||||
* @param fieldName Complete, unmodified name of the field to trim
|
||||
* @return Trimmed field
|
||||
*/
|
||||
public static String trimFieldName(String fieldName){
|
||||
char[] letters = fieldName.toCharArray();
|
||||
int start = 0;
|
||||
int end = letters.length - 1;
|
||||
try{
|
||||
while(!Character.isLetter(letters[start]) && start < end) {
|
||||
|
||||
// Trim, non-letters at the beginning
|
||||
while(!Character.isLetterOrDigit(letters[start]) && start < end) {
|
||||
++start;
|
||||
}
|
||||
|
||||
if(Character.isLowerCase(letters[start])){
|
||||
if(!Character.isLetter(letters[start + 1])){
|
||||
start+= 2;
|
||||
}
|
||||
else if (Character.isUpperCase(letters[start + 1])){
|
||||
start += 1;
|
||||
// If the next character is not a letter or digit,
|
||||
// look ahead because the first letter might not be needed
|
||||
if (start + 1 <= end
|
||||
&& !Character.isLetterOrDigit(letters[start + 1])) {
|
||||
int lookAhead = 1;
|
||||
while (start + lookAhead <= end) {
|
||||
// Only change the start if something is found after the non-letters
|
||||
if (Character.isLetterOrDigit(letters[start + lookAhead])) {
|
||||
start += lookAhead;
|
||||
break;
|
||||
}
|
||||
lookAhead++;
|
||||
}
|
||||
} else if (start + 1 <= end
|
||||
&& Character.isUpperCase(letters[start + 1])) {
|
||||
start++;
|
||||
}
|
||||
|
||||
// Trim, non-letters at the end
|
||||
while((!Character.isLetter(letters[end]) && !Character.isDigit(letters[end])) && start < end) {
|
||||
--end;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue