1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

bug 330693: Improve suggested variable name in Extract Local Variable

https://bugs.eclipse.org/bugs/show_bug.cgi?id=330693 Improved handling of long names
This commit is contained in:
Emanuel Graf 2011-01-05 10:20:42 +00:00
parent c81916affe
commit e27e34dd13
2 changed files with 91 additions and 12 deletions

View file

@ -546,3 +546,53 @@ int main() {
return 0;
}
//!Bug 330693 Improve suggested variable name in Extract Local Variable
//#org.eclipse.cdt.ui.tests.refactoring.extractlocalvariable.ExtractLocalVariableRefactoringTest
//@A.cpp
struct Foo{
int getVarWithLongName();
};
void bar(){
Foo f;
/*$*/f.getVarWithLongName()/*$$*/;
}
//=
struct Foo{
int getVarWithLongName();
};
void bar(){
Foo f;
int varWithLongName = f.getVarWithLongName();
varWithLongName;
}
//!Bug 330693 Improve suggested variable name in Extract Local Variable: name == prefix
//#org.eclipse.cdt.ui.tests.refactoring.extractlocalvariable.ExtractLocalVariableRefactoringTest
//@A.cpp
struct Foo{
int get();
};
void bar(){
Foo f;
/*$*/f.get()/*$$*/;
}
//=
struct Foo{
int get();
};
void bar(){
Foo f;
int get = f.get();
get;
}

View file

@ -320,21 +320,15 @@ public class ExtractLocalVariableRefactoring extends CRefactoring {
if (proposals.length == 0) {
return info.getName();
} else {
String name = getLastCamelCasePart(proposals[proposals.length - 1]);
String name = proposals[proposals.length - 1];
return name;
}
}
private String getLastCamelCasePart(String string) {
if (string.length() == 0) {
return string;
}
int index = string.length() - 1;
while (index > 0
&& (Character.isLowerCase(string.charAt(index)) || Character.isDigit(string.charAt(index)))) {
--index;
}
return string.substring(index).toLowerCase();
private String[] getPrefixes() {
// In Future we could use user preferences to define the prefixes
String[] prefixes = { "get", "is" }; //$NON-NLS-1$//$NON-NLS-2$
return prefixes;
}
/**
@ -408,7 +402,7 @@ public class ExtractLocalVariableRefactoring extends CRefactoring {
tmpName[len++] = c;
}
}
name = getLastCamelCasePart(new String(tmpName, 0, len));
name = trimPrefixes(new String(tmpName, 0, len));
if (name.length() > 0) {
if (nameAvailable(name, guessedTempNames, scope)) {
guessedTempNames.add(name);
@ -417,6 +411,7 @@ public class ExtractLocalVariableRefactoring extends CRefactoring {
}
}
}
});
}
if (guessedTempNames.isEmpty()) {
@ -428,6 +423,40 @@ public class ExtractLocalVariableRefactoring extends CRefactoring {
return guessedTempNames.toArray(new String[0]);
}
private String trimPrefixes(String name) {
String lower = name.toLowerCase();
int start = 0;
for (String prefix : getPrefixes()) {
if(lower.startsWith(prefix)) {
if (name.length() > prefix.length()) {
start = prefix.length();
}
}
prefix = prefix + "_"; //$NON-NLS-1$
if(lower.startsWith(prefix)) {
if (name.length() > prefix.length()) {
start = prefix.length();
}
}
}
if (start > 0) {
String nameWithoutPrefix = name.substring(start);
if (Character.isUpperCase(nameWithoutPrefix.charAt(0))) {
nameWithoutPrefix = nameWithoutPrefix.substring(0, 1).toLowerCase()
+ nameWithoutPrefix.substring(1);
}
if (!Character.isJavaIdentifierStart(nameWithoutPrefix.charAt(0))) {
nameWithoutPrefix = "_" + nameWithoutPrefix; //$NON-NLS-1$
}
return nameWithoutPrefix;
} else {
return name;
}
}
private boolean nameAvailable(String name, List<String> guessedNames, IScope scope) {
if (guessedNames.contains(name) || info.getUsedNames().contains(name)) {
return false;