/*******************************************************************************
* Copyright (c) 2008, 2010 Institute for Software, HSR Hochschule fuer Technik
* Rapperswil, University of applied sciences 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:
* Institute for Software - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.internal.ui.refactoring.utils;
import java.util.HashSet;
import java.util.Set;
/**
* Helps to generate new unused names.
*
* @author Mirko Stocker
*
*/
public class PseudoNameGenerator {
private final Set<String> names = new HashSet<String>();
public void addExistingName(String name) {
names.add(name);
}
public String generateNewName(String typeName) {
String[] nameParts = typeName.split("::"); //$NON-NLS-1$
typeName = nameParts[nameParts.length - 1];
if (typeName.contains("<")) { //$NON-NLS-1$
typeName = typeName.substring(0, typeName.indexOf('<'));
}
if (typeName.length() != 0) {
typeName = typeName.substring(0, 1).toLowerCase() + typeName.substring(1);
}
nameParts = typeName.split("\\s"); //$NON-NLS-1$
for (int i = 0; i < nameParts.length; i++) {
if (i <= 0) {
typeName = nameParts[i];
} else {
typeName = typeName.concat(nameParts[i].substring(0,1).toUpperCase());
if (nameParts[i].length() > 1) {
typeName = typeName.concat(nameParts[i].substring(1));
}
}
}
String numberString = ""; //$NON-NLS-1$
String newNameCandidate;
int index = 0;
do {
newNameCandidate = typeName + numberString;
if (!NameHelper.isValidLocalVariableName(newNameCandidate)) {
return ""; //$NON-NLS-1$
}
index++;
numberString = Integer.toString(index);
} while (names.contains(newNameCandidate) || NameHelper.isKeyword(newNameCandidate));
names.add(newNameCandidate);
return newNameCandidate;
}
}