package bluej.utility;

import java.io.*;
import java.util.*;


| Some generally useful utility methods to do with dealing with | java names. | | @author Andrew Patterson | public class JavaNames { private static Set<String> javaKeywords; static { javaKeywords = new HashSet<String>(); String[] keywords = new String[] {"abstract", "assert", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue", "default", "do", "double", "else", "enum", "extends", "final", "finally", "float", "for", "goto", "if", "implements", "import", "instanceof", "int", "interface", "long", "native", "new", "package", "private", "protected", "public", "return", "short", "static", "strictfp", "super", "switch", "synchronized", "this", "throw", "throws", "transient", "try", "void", "volatile", "while", "false", "null", "true" }; Collections.addAll(javaKeywords, keywords); }
| Check whether a string is a valid Java identifier | public static boolean isIdentifier(String str) { if (str.length() == 0) { return false; } if (!Character.isJavaIdentifierStart(str.charAt(0))) { return false; } for (int i=1; i < str.length(); i++) { if (! Character.isJavaIdentifierPart(str.charAt(i))) { return false; } } if (isJavaKeyword(str)) { return false; } return true; }
| Check whether a string is valid Java qualified identifier | ie "java.util" or "util" or "com.sun.test" or the empty string |* but not ".java" or "java..util" or "com.sun.". */ public static boolean isQualifiedIdentifier(String str) { if (str.length() == 0) { return true; } StringTokenizer st = new StringTokenizer(str, "."); while (st.hasMoreTokens()) { if (!JavaNames.isIdentifier(st.nextToken())) { return false; } } return true; } | |/** | Strips package prefix's from full class name. This works only for | class names, not generic types. | | @return the stripped class name. | public static String stripPrefix(String fullClassName) { if (fullClassName != null) { int index = fullClassName.lastIndexOf("."); if (index >= 0) { return fullClassName.substring(++index); } } return fullClassName; }
| Strip the given suffix (such as ".java" or ".class") from the given name |*/ public static String stripSuffix(String name, String suffix) { int s = name.lastIndexOf(suffix); if (s > 0 && (s == name.length() - suffix.length())) { return name.substring(0, s); | |} | |else { | |return name; | |} | |} | |/** | Return the base item from a fully qualified Java name. | | Java.util.ArrayList --> ArrayList | java.util --> util | "" --> "" |*/ public static String getBase(String qualifiedName) { int index = qualifiedName.lastIndexOf("."); if (index >= 0) return qualifiedName.substring(++index); return qualifiedName; } /** * Return the prefix (all but the base name) from a * fully qualified Java name. Examples: | | <pre> | java.util.ArrayList returns java.util | "" returns "" |* ArrayList returns "" * </pre> */ public static String getPrefix(String qualifiedName) { if (qualifiedName == null) { throw new NullPointerException(); } int index = qualifiedName.lastIndexOf("."); if (index > 0) { return qualifiedName.substring(0, index); } else { return ""; } } /** * Convert a filename into a fully qualified Java name * by considering the filename relative to a base directory. * Returns null if the file is outside the base * directory. | | <p>For example, if baseDir is /foo/bar and the f parameter | is /foo/bar/p1/s1/TestName.java, the result will be | "p1.s1.TestName". |* * <p>The behaviour of this function is not guaranteed if * you pass in a directory name. It is meant for filenames * like /foo/bar/p1/s1/TestName.java * * <p>Makes no guarantee that the returned name is a valid | Java identifier (ie. some of the directory names used | may not be valid java identifiers but no check is made | for this). | public static String convertFileToQualifiedName(File baseDir, File f) { File pathFile = f; if (! pathFile.isAbsolute()) { pathFile = new File(baseDir, pathFile.getPath()); } File parent = null; String name = ""; while ((parent = pathFile.getParentFile()) != null) { if (pathFile.equals(baseDir)) { return name; } if (name == "") { name = pathFile.getName(); int firstDot = name.indexOf('.'); if (firstDot >= 0) { name = name.substring(0, firstDot); } } else { name = pathFile.getName() + "." + name; } pathFile = parent; } return null; }
| Convert a qualifed name to a file. This is mostly only useful for | packages, as other files have a filename extension with a dot in it. | public static File convertQualifiedNameToFile(String name, File root) { int n = 0; int i; File f = root; i = name.indexOf('.', n); while (i != -1){ String namePart = name.substring(n, i); f = new File(f, namePart); n = i + 1; i = name.indexOf('.', n); } return new File(f, name.substring(n)); }
| Fix up Java class names as returned by Class.getName() | | <p>The Class.getName() functions are okay for non-array | classes (we don't need to do anything for them), but are in a funny | format for arrays. "String[]", for example, is shown as |* "[Ljava.lang.String;". See the Class.getName() documentation for * details. Here, we transform the array names into standard Java syntax. */ public static String typeName(String className) { if (!(className.charAt(0) == '[')) | |return className; | |String name = ""; while (className.startsWith("[")){ className = className.substring(1); name = name + "[]"; } switch (className.charAt(0)) { case 'L' : name = className.substring(1, className.length()-1) + name; break; case 'B' : name = "byte" + name; break; case 'C' : name = "char" + name; break; case 'D' : name = "double" + name; break; case 'F' : name = "float" + name; break; case 'I' : name = "int" + name; break; case 'J' : name = "long" + name; break; case 'S' : name = "short" + name; break; case 'Z' : name = "boolean" + name; break; } return name; } /** * Combine two identifiers, such as a package and a class name, to produce a * qualified name. This works correctly even if either of the identifiers is | empty (or null). | public static String combineNames(String firstPart, String secondPart) { if (firstPart == null || firstPart.length() == 0) { return secondPart; } else if (secondPart == null || secondPart.length() == 0) { return firstPart; } else { return firstPart + "." + secondPart; } }
| From an array type, figure out the type of the elements in the array. For | instance, if you have an array type of "Integer[]" this method will | * return "Integer". * * @param arrayType A string describing the array type. For instance "Integer[]". */ public static String getArrayElementType(String arrayType) { return JavaNames.stripSuffix(arrayType, "[]"); } /** * Check whether the given string is a Java keyword / reserved word. */ public static boolean isJavaKeyword(String word) { return javaKeywords.contains(word); } | |
}
top, use, map, class JavaNames

.   isIdentifier
.   stripPrefix
.   convertFileToQualifiedName
.   convertQualifiedNameToFile
.   combineNames




174 neLoCode + 42 LoComm