blob: 273b4d4fe2186e4b362d91f772c3bdd00cd775ee [file] [log] [blame]
/*
* Copyright 2003-2010 Dave Griffith, Bas Leijdekkers
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.siyeh.ig.psiutils;
import com.intellij.openapi.util.text.StringUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import java.util.HashSet;
import java.util.Set;
public class StringUtils {
@NonNls private static final Set<String> keywordTable =
new HashSet<String>();
@NonNls private static final String AN = "an";
static {
keywordTable.add("abstract");
keywordTable.add("assert");
keywordTable.add("boolean");
keywordTable.add("break");
keywordTable.add("byte");
keywordTable.add("case");
keywordTable.add("catch");
keywordTable.add("char");
keywordTable.add("class");
keywordTable.add("const");
keywordTable.add("continue");
keywordTable.add("default");
keywordTable.add("do");
keywordTable.add("double");
keywordTable.add("else");
keywordTable.add("enum");
keywordTable.add("extends");
keywordTable.add("false");
keywordTable.add("final");
keywordTable.add("finally");
keywordTable.add("float");
keywordTable.add("for");
keywordTable.add("goto");
keywordTable.add("if");
keywordTable.add("implements");
keywordTable.add("import");
keywordTable.add("instanceof");
keywordTable.add("int");
keywordTable.add("interface");
keywordTable.add("long");
keywordTable.add("native");
keywordTable.add("new");
keywordTable.add("null");
keywordTable.add("package");
keywordTable.add("private");
keywordTable.add("protected");
keywordTable.add("public");
keywordTable.add("return");
keywordTable.add("short");
keywordTable.add("static");
keywordTable.add("strictfp");
keywordTable.add("super");
keywordTable.add("switch");
keywordTable.add("synchronized");
keywordTable.add("this");
keywordTable.add("throw");
keywordTable.add("throws");
keywordTable.add("transient");
keywordTable.add("true");
keywordTable.add("try");
keywordTable.add("void");
keywordTable.add("volatile");
keywordTable.add("while");
}
private StringUtils() {
super();
}
@SuppressWarnings({"HardCodedStringLiteral"})
@NotNull
public static String createSingularFromName(@NotNull String name) {
final int nameLength = name.length();
final String singularName;
if (name.endsWith("ies")) {
singularName = name.substring(0, nameLength - 3) + 'y';
}
else if (name.endsWith("sses") || name.endsWith("shes")) {
singularName = name.substring(0, nameLength - 2);
}
else if (name.charAt(nameLength - 1) == 's') {
singularName = name.substring(0, nameLength - 1);
}
else if (name.endsWith("IES")) {
singularName = name.substring(0, nameLength - 3) + 'Y';
}
else if (name.endsWith("SSES") || name.endsWith("SHES")) {
singularName = name.substring(0, nameLength - 2);
}
else if (name.charAt(nameLength - 1) == 'S') {
singularName = name.substring(0, nameLength - 1);
}
else {
singularName = prependIndefiniteArticle(name);
}
if (keywordTable.contains(singularName)) {
return prependIndefiniteArticle(singularName);
}
else {
return singularName;
}
}
@NotNull
private static String prependIndefiniteArticle(
String singularName) {
switch (singularName.charAt(0)) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
return AN + StringUtil.capitalize(singularName);
default:
return 'a' + StringUtil.capitalize(singularName);
}
}
public static String stripAngleBrackets(String string) {
final int index = string.indexOf('<');
if (index == -1) {
return string;
}
return string.substring(0, index);
}
}