package railo.intergral.fusiondebug.server.util; public class FDUtil { /** * replace the last occurrence of from with to * @param str * @param from * @param to * @return changed string */ private static String replaceLast(String str, char from, char to) { int index = str.lastIndexOf(from); if(index==-1)return str; return str.substring(0,index)+to+str.substring(index+1); } /** * if given string is a keyword it will be replaced with none keyword * @param str * @return corrected word */ private static String correctReservedWord(String str) { char first=str.charAt(0); switch(first) { case 'a': if(str.equals("abstract")) return "_"+str; break; case 'b': if(str.equals("boolean")) return "_"+str; else if(str.equals("break")) return "_"+str; else if(str.equals("byte")) return "_"+str; break; case 'c': if(str.equals("case")) return "_"+str; else if(str.equals("catch")) return "_"+str; else if(str.equals("char")) return "_"+str; else if(str.equals("const")) return "_"+str; else if(str.equals("class")) return "_"+str; else if(str.equals("continue")) return "_"+str; break; case 'd': if(str.equals("default")) return "_"+str; else if(str.equals("do")) return "_"+str; else if(str.equals("double")) return "_"+str; break; case 'e': if(str.equals("else")) return "_"+str; else if(str.equals("extends")) return "_"+str; else if(str.equals("enum")) return "_"+str; break; case 'f': if(str.equals("false")) return "_"+str; else if(str.equals("final")) return "_"+str; else if(str.equals("finally")) return "_"+str; else if(str.equals("float")) return "_"+str; else if(str.equals("for")) return "_"+str; break; case 'g': if(str.equals("goto")) return "_"+str; break; case 'i': if(str.equals("if")) return "_"+str; else if(str.equals("implements")) return "_"+str; else if(str.equals("import")) return "_"+str; else if(str.equals("instanceof")) return "_"+str; else if(str.equals("int")) return "_"+str; else if(str.equals("interface")) return "_"+str; break; case 'n': if(str.equals("native")) return "_"+str; else if(str.equals("new")) return "_"+str; else if(str.equals("null")) return "_"+str; break; case 'p': if(str.equals("package")) return "_"+str; else if(str.equals("private")) return "_"+str; else if(str.equals("protected")) return "_"+str; else if(str.equals("public")) return "_"+str; break; case 'r': if(str.equals("return")) return "_"+str; break; case 's': if(str.equals("short")) return "_"+str; else if(str.equals("static")) return "_"+str; else if(str.equals("strictfp")) return "_"+str; else if(str.equals("super")) return "_"+str; else if(str.equals("switch")) return "_"+str; else if(str.equals("synchronized")) return "_"+str; break; case 't': if(str.equals("this")) return "_"+str; else if(str.equals("throw")) return "_"+str; else if(str.equals("throws")) return "_"+str; else if(str.equals("transient")) return "_"+str; else if(str.equals("true")) return "_"+str; else if(str.equals("try")) return "_"+str; break; case 'v': if(str.equals("void")) return "_"+str; else if(str.equals("volatile")) return "_"+str; break; case 'w': if(str.equals("while")) return "_"+str; break; } return str; } /** * translate a string to a valid variable string * @param str string to translate * @return translated String */ private static String toVariableName(String str) { StringBuffer rtn=new StringBuffer(); char[] chars=str.toCharArray(); long changes=0; boolean doCorrect=true; for(int i=0;i<chars.length;i++) { char c=chars[i]; if(i==0 && (c>='0' && c<='9'))rtn.append("_"+c); else if((c>='a' && c<='z') ||(c>='A' && c<='Z') ||(c>='0' && c<='9') || c=='_' || c=='$') rtn.append(c); else { doCorrect=false; rtn.append('_'); changes+=(c*(i+1)); } } if(changes>0)rtn.append(changes); if(doCorrect)return correctReservedWord(rtn.toString()); return rtn.toString(); } /** * creates a classbane from give source path * @param str * @return */ public static String toClassName(String str) { StringBuffer javaName=new StringBuffer(); String[] arr=railo.runtime.type.util.ListUtil.listToStringArray(str, '/'); for(int i=0;i<arr.length;i++) { if(i==(arr.length-1)) arr[i]=replaceLast(arr[i],'.','$'); if(i!=0)javaName.append('.'); javaName.append(toVariableName(arr[i])); } return javaName.toString().toLowerCase(); } }