1
0
Fork 0
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:
Emanuel Graf 2010-03-18 15:40:14 +00:00
parent 78e4512614
commit 3d44a24ca3
3 changed files with 78 additions and 7 deletions

View file

@ -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;
}
}

View file

@ -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"));
}
}

View file

@ -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;
}