![JAR search and dependency download from the Maven repository](/logo.png)
org.exolab.javasource.JNaming Maven / Gradle / Ivy
The newest version!
/**
* Redistribution and use of this software and associated documentation ("Software"), with or
* without modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain copyright statements and notices. Redistributions
* must also contain a copy of this document.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list of
* conditions and the following disclaimer in the documentation and/or other materials provided with
* the distribution.
*
* 3. The name "Exolab" must not be used to endorse or promote products derived from this Software
* without prior written permission of Intalio, Inc. For written permission, please contact
* [email protected].
*
* 4. Products derived from this Software may not be called "Exolab" nor may "Exolab" appear in
* their names without prior written permission of Intalio, Inc. Exolab is a registered trademark of
* Intalio, Inc.
*
* 5. Due credit should be given to the Exolab Project (http://www.exolab.org/).
*
* THIS SOFTWARE IS PROVIDED BY INTALIO, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTALIO, INC. OR ITS
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
* WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Copyright 1999-2000 (C) Intalio, Inc. All Rights Reserved.
*/
package org.exolab.javasource;
/**
* A utility class used to validate identifiers and class names.
*
* @author Keith Visco
* @version $Revision$ $Date: 2003-03-03 00:05:44 -0700 (Mon, 03 Mar 2003) $
*/
public final class JNaming {
// --------------------------------------------------------------------------
/**
* Reserved keywords in Java as of Java 5.
*/
private static final String[] KEYWORDS = {"abstract", "boolean", "break", "byte", "case", "catch",
"char", "class", "const", "continue", "default", "do", "double", "else", "enum", "extends",
"false", "final", "finally", "float", "for", "goto", "if", "implements", "import",
"instanceof", "int", "interface", "long", "native", "new", "null", "package", "private",
"protected", "public", "return", "short", "static", "super", "switch", "synchronized", "this",
"throw", "throws", "transient", "true", "try", "void", "volatile", "while"};
/**
* Collection classes in Java as of Java 5.
*/
private static final String[] COLLECTIONS = {"ArrayList", "List", "Set", "Collection", "Vector",
"Hashtable", "Map", "HashMap", "HashSet", "TreeSet", "Enumeration", "Iterator",
"ListIterator", "SortedSet", "SortedMap", "Queue", "EnumSet", "EnumMap", "IdentityHashMap",
"LinkedHashMap", "LinkedHashSet", "LinkedList", "Stack", "TreeMap", "WeakHashMap"};
/**
* Classes in java.lang.* as of Java 5.
*/
private static final String[] JAVA_LANG = {
// Interfaces in java.lang.*
"Appendable", "CharSequence", "Cloneable", "Comparable", "Iterable", "Readable", "Runnable",
// Classes in java.lang.*
"Boolean", "Byte", "Character", "Class", "ClassLoader", "Compiler", "Double", "Enum", "Float",
"InheritableThreadLocal", "Integer", "Long", "Math", "Number", "Object", "Package", "Process",
"ProcessBuilder", "Runtime", "RuntimePermission", "SecurityManager", "Short",
"StackTraceElement", "StrictMath", "String", "StringBuffer", "StringBuilder", "System",
"Thread", "ThreadGroup", "ThreadLocal", "Throwable", "Void",
// Exceptions in java.lang.*
"ArithmeticException", "ArrayIndexOutOfBoundsException", "ArrayStoreException",
"ClassCastException", "ClassNotFoundException", "CloneNotSupportedException",
"EnumConstantNotPresentException", "Exception", "IllegalAccessException",
"IllegalArgumentException", "IllegalMonitorStateException", "IllegalStateException",
"IllegalThreadStateException", "IndexOutOfBoundsException", "InstantiationException",
"InterruptedException", "NegativeArraySizeException", "NoSuchFieldException",
"NoSuchMethodException", "NullPointerException", "NumberFormatException", "RuntimeException",
"SecurityException", "StringIndexOutOfBoundsException", "TypeNotPresentException",
"UnsupportedOperationException",
// Errors in java.lang.*
"AbstractMethodError", "AssertionError", "ClassCircularityError", "ClassFormatError", "Error",
"ExceptionInInitializerError", "IllegalAccessError", "IncompatibleClassChangeError",
"InstantiationError", "InternalError", "LinkageError", "NoClassDefFoundError",
"NoSuchFieldError", "NoSuchMethodError", "OutOfMemoryError", "StackOverflowError",
"ThreadDeath", "UnknownError", "UnsatisfiedLinkError", "UnsupportedClassVersionError",
"VerifyError", "VirtualMachineError",
// Annotation types in java.lang.*
"Deprecated", "Override", "SuppressWarnings"};
/**
* Field names used within Castor that prevent a user from using the same name as an element
* without using a mapping file. Some fields that Castor uses depend on the contents of the
* schema, so we only warn.
* Reserved:
*
*
* _items -- might be fetched using getXXXXItems where XXX == class name
* _content
* _choiceValue
* _anyObject
*
*/
private static final String[] CASTOR_RESERVED = {"Content", "MenuItem",};
/**
* Special reserved names within Windows that prevent a user from using the same name as an
* element without using a mapping file. Windows will not allow the use of any of these names with
* any case with any extension. At least, not without contortions.
*
* @see
* The MSDN web page on file naming
*/
private static final String[] WINDOWS_RESERVED =
{"CON", "PRN", "AUX", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8",
"COM9", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9",};
// --------------------------------------------------------------------------
/**
* As we're a static utility class, our constructor is private.
*/
private JNaming() {
super();
}
// --------------------------------------------------------------------------
/**
* Returns true if the given String is a Java keyword which will cause a problem when used as a
* variable name.
*
* @param name The String to check against the list of keywords.
* @return True if the given String is a Java keyword which will cause a problem when used as a
* variable name.
*/
public static boolean isKeyword(final String name) {
if (name == null) {
return false;
}
for (String keyword : KEYWORDS) {
if (keyword.equals(name)) {
return true;
}
}
return false;
}
/**
* Returns true if the given String is a parameterized Java collection. object keyword which will
* cause a problem when used as a variable name
*
* @param name The String to check as a parameterized Java collection.
* @return True if the given String is a parameterized Java collection object keyword which will
* cause a problem when used as a variable name.
*/
public static boolean isParameterizedCollectionsObject(final String name) {
if (name == null) {
return false;
}
for (String collection : COLLECTIONS) {
if (name.indexOf(collection) != -1) {
return true;
}
}
return false;
}
/**
* Returns true if the given String is a Java class in java.lang.* which will cause a problem when
* used as a variable name.
*
* @param name The String to check against the list of keywords.
* @return True if the given String is a Java class in java.lang.* which will cause a problem when
* used as a variable name.
*/
public static boolean isInJavaLang(final String name) {
if (name == null) {
return false;
}
for (String javaLang : JAVA_LANG) {
if (javaLang.equals(name)) {
return true;
}
}
return false;
}
/**
* Returns true if the given String is a reserved name by Castor which may cause a problem when
* used as a variable name. Some fields that Castor uses depend on the contents of the schema, so
* we only warn.
*
* @param name The String to check against the list of keywords.
* @return True if the given String is a reserved name by Castor which may cause a problem when
* used as a variable name.
*/
public static boolean isReservedByCastor(final String name) {
if (name == null) {
return false;
}
for (String reserved : CASTOR_RESERVED) {
if (reserved.equals(name)) {
return true;
}
}
return false;
}
/**
* Returns true if the given String is a reserved name by the Windows filesystem which will cause
* a problem when used as a class name under Windows.
*
* @param name The String to check against the list of keywords.
* @return True if the given String is a reserved name by Castor which may cause a problem when
* used as a variable name.
*/
public static boolean isReservedByWindows(final String name) {
if (name == null) {
return false;
}
for (String windowsReserved : WINDOWS_RESERVED) {
if (windowsReserved.equalsIgnoreCase(name)) {
return true;
}
}
return false;
}
/**
* Returns true if the given String matches the production of a valid Java identifier.
*
* @param string The String to check the production of.
* @return True if the given String matches the production of a valid Java name, otherwise false.
*/
public static boolean isValidJavaIdentifier(final String string) {
if ((string == null) || (string.length() == 0)) {
return false;
}
char[] chars = string.toCharArray();
if (isParameterizedCollectionsObject(string)) {
return true;
}
// -- make sure starting character is valid
if (!Character.isJavaIdentifierStart(chars[0])) {
return false;
}
for (char ch : chars) {
if (!Character.isJavaIdentifierPart(ch)) {
return false;
}
}
if (isKeyword(string)) {
return false;
}
return true;
}
/**
* Returns the package name from the given class name.
*
* @param className An arbitrary class name, optionally including a package.
* @return The package name from the given class name.
*/
public static String getPackageFromClassName(final String className) {
if (className == null) {
return null;
}
int idx = className.lastIndexOf('.');
if (idx > 0) {
return className.substring(0, idx);
}
return null;
}
/**
* Returns the local class name from the given fully qualified class name.
*
* @param className An arbitrary class name, optionally including a package.
* @return The local name from the given class name.
*/
public static String getLocalNameFromClassName(final String className) {
if (className == null) {
return null;
}
int idx = className.lastIndexOf('.');
if (idx > 0) {
return className.substring(idx + 1);
}
return className;
}
// --------------------------------------------------------------------------
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy