diff options
Diffstat (limited to 'api/src/main/java/org/osjava/jardiff/AbstractInfo.java')
-rw-r--r-- | api/src/main/java/org/osjava/jardiff/AbstractInfo.java | 316 |
1 files changed, 316 insertions, 0 deletions
diff --git a/api/src/main/java/org/osjava/jardiff/AbstractInfo.java b/api/src/main/java/org/osjava/jardiff/AbstractInfo.java new file mode 100644 index 0000000..197752c --- /dev/null +++ b/api/src/main/java/org/osjava/jardiff/AbstractInfo.java @@ -0,0 +1,316 @@ +/* + * org.osjava.jardiff.AbstractInfo + * + * $Id: IOThread.java 1952 2005-08-28 18:03:41Z cybertiger $ + * $URL: https://svn.osjava.org/svn/osjava/trunk/osjava-nio/src/java/org/osjava/nio/IOThread.java $ + * $Rev: 1952 $ + * $Date: 2005-08-28 18:03:41 +0000 (Sun, 28 Aug 2005) $ + * $Author: cybertiger $ + * + * Copyright (c) 2005, Antony Riley + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * + Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * + 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. + * + * + Neither the name JarDiff nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS 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 THE COPYRIGHT OWNER OR 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. + */ +package org.osjava.jardiff; + +import org.objectweb.asm.Opcodes; + +/** + * An abstract class representing information about a class, method or field. + * + * @author <a href="mailto:[email protected]">Antony Riley</a> + */ +public abstract class AbstractInfo +{ + /** + * The string used to represent a class, method or field with public + * access. + */ + public final String ACCESS_PUBLIC = "public"; + + /** + * The string used to represent a class, method or field with protected + * access. + */ + public final String ACCESS_PROTECTED = "protected"; + + /** + * The string used to represent a class, method or field with package + * private access. + * Package private access is the default access level used by java when + * you do not specify one of public, protected or private. + */ + public final String ACCESS_PACKAGE = "package"; + + /** + * The string used to represent a class, method or field with private + * access. + */ + public final String ACCESS_PRIVATE = "private"; + + /** + * The access flags for this class, method or field. + */ + private final int access; + + /** + * The internal name of this class, method or field. + */ + private final String name; + + /** + * Construct a new AbstractInfo with the specified access and name. + * + * @param access The access flags for this class, method or field. + * @param name The internal name of this class, method or field. + */ + public AbstractInfo(int access, String name) { + this.access = access; + this.name = name; + } + + /** + * Get the access flags for this class, method or field. + * + * @return the access flags. + */ + public final int getAccess() { + return access; + } + + /** + * Get the internal name of this class, method or field. + * + * @return the name + */ + public final String getName() { + return name; + } + + /** + * Test if this class, method or field is public. + * + * @return true if it is public. + */ + public final boolean isPublic() { + return (access & Opcodes.ACC_PUBLIC) != 0; + } + + /** + * Test if this class, method or field is protected. + * + * @return true if it is protected. + */ + public final boolean isProtected() { + return (access & Opcodes.ACC_PROTECTED) != 0; + } + + /** + * Test if this class, method or field is package private. + * + * @return true if it is package private. + */ + public final boolean isPackagePrivate() { + return (access & (Opcodes.ACC_PUBLIC | Opcodes.ACC_PROTECTED | + Opcodes.ACC_PRIVATE)) == 0; + } + + /** + * Test if this class, method or field is private. + * + * @return true if it is private. + */ + public final boolean isPrivate() { + return (access & Opcodes.ACC_PRIVATE) != 0; + } + + /** + * Test if this class, method or field is abstract. + * + * @return true if it is abstract. + */ + public final boolean isAbstract() { + return (access & Opcodes.ACC_ABSTRACT) != 0; + } + + /** + * Test if this class, method or field is annotation + * + * @return true if it is annotation. + */ + public final boolean isAnnotation() { + return (access & Opcodes.ACC_ANNOTATION) != 0; + } + + /** + * Test if this class, method or field is a bridge + * + * @return true if it is a bridge. + */ + public final boolean isBridge() { + return (access & Opcodes.ACC_BRIDGE) != 0; + } + + /** + * Test if this class, method or field is deprecated. + * + * @return true if it is deprecated. + */ + public final boolean isDeprecated() { + return (access & Opcodes.ACC_DEPRECATED) != 0; + } + + /** + * Test if this class, method or field is an enum. + * + * @return true if it is an enum. + */ + public final boolean isEnum() { + return (access & Opcodes.ACC_ENUM) != 0; + } + + /** + * Test if this class, method or field is final. + * + * @return true if it is final. + */ + public final boolean isFinal() { + return (access & Opcodes.ACC_FINAL) != 0; + } + + /** + * Test if this class, method or field is an interface. + * + * @return true if it is an interface. + */ + public final boolean isInterface() { + return (access & Opcodes.ACC_INTERFACE) != 0; + } + + /** + * Test if this class, method or field is native. + * + * @return true if it is native. + */ + public final boolean isNative() { + return (access & Opcodes.ACC_NATIVE) != 0; + } + + /** + * Test if this class, method or field is static. + * + * @return true if it is static. + */ + public final boolean isStatic() { + return (access & Opcodes.ACC_STATIC) != 0; + } + + /** + * Test if this class, method or field is string. + * + * @return true if it is strict. + */ + public final boolean isStrict() { + return (access & Opcodes.ACC_STRICT) != 0; + } + + /** + * Test if this class, method or field is super. + * + * @return true if it is super. + */ + public final boolean isSuper() { + return (access & Opcodes.ACC_SUPER) != 0; + } + + /** + * Test if this class, method or field is synchronized. + * + * @return true if it is synchronized + */ + public final boolean isSynchronized() { + return (access & Opcodes.ACC_SYNCHRONIZED) != 0; + } + + /** + * Test if this class, method or field is synthetic. + * + * @return true if it is synchronized. + */ + public final boolean isSynthetic() { + return (access & Opcodes.ACC_SYNTHETIC) != 0; + } + + /** + * Test if this class or field is transient. + * If this flag is set on a method it means something different. + * + * @return true if it is transient. + */ + public final boolean isTransient() { + return !(this instanceof MethodInfo) && + ((access & Opcodes.ACC_TRANSIENT) != 0); + } + + /** + * Test if this method is varargs. + * If this flag is set on a class or field it means something different. + * Well, it probably shouldn't be set on a class as it would make + * no sense, it only really makes sense on fields and methods. + * + * @return true if it is vargargs. + */ + public final boolean isVarargs() { + return (this instanceof MethodInfo) && + ((access & Opcodes.ACC_VARARGS) != 0); + } + + /** + * Test if this class, method or field is volatile. + * + * @return true if it is volatile. + */ + public final boolean isVolatile() { + return (access & Opcodes.ACC_VOLATILE) != 0; + } + + /** + * Retrivie the access level for this class, method or field. + * + * @return the access level + */ + public final String getAccessType() { + if (isPublic()) + return ACCESS_PUBLIC; + if (isProtected()) + return ACCESS_PROTECTED; + if (isPrivate()) + return ACCESS_PRIVATE; + return ACCESS_PACKAGE; + } +} |