001 /*
002 * Licensed under the Apache License, Version 2.0 (the "License");
003 * you may not use this file except in compliance with the License.
004 * You may obtain a copy of the License at
005 *
006 * http://www.apache.org/licenses/LICENSE-2.0
007 *
008 * Unless required by applicable law or agreed to in writing, software
009 * distributed under the License is distributed on an "AS IS" BASIS,
010 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
011 * See the License for the specific language governing permissions and
012 * limitations under the License.
013 */
014 package org.apache.commons.classscan.model;
015
016 import java.util.Set;
017
018 import org.apache.commons.classscan.HasName;
019 import org.apache.commons.classscan.MetaClassPathElement;
020
021 /**
022 * Metadata about a class or primitive type
023 */
024 public interface MetaClass extends HasName, MetaType {
025 /**
026 * Get the ClassLocation from which the corresponding class came. For
027 * primitive types, this will return null.
028 */
029 MetaClassPathElement getClassLocation();
030
031 /**
032 * Get the canonical name of the corresponding Class. For primitive types,
033 * this will be the primitive type name. e.g. char
034 */
035 String getName();
036
037 /**
038 * Get metadata about the corresponding Class's parent
039 *
040 * @return The MetaClass, or null if the corresponding Class is a primitive
041 * type or Object.class
042 */
043 MetaClass getParent();
044
045 /**
046 * Get metadata about the interfaces which the corresponding Class
047 * implements. No inherited interfaces will be in the set.
048 *
049 * @return A read-only set of the interface information
050 */
051 Set<? extends MetaClass> getInterfaces();
052
053 /**
054 * Get metadata about the annotations on the corresponding Class.
055 *
056 * @return A read-only set of the annotation information
057 */
058 Set<? extends MetaAnnotation> getAnnotations();
059
060 /**
061 * Get metadata about a particular annotation on the corresponding Class.
062 *
063 * @param annotationName
064 * The name of the annotation desired
065 *
066 * @return The annotation information, or null if not specified on the
067 * corresponding Class
068 */
069 MetaAnnotation getAnnotation(String annotationName);
070
071 /**
072 * Get metadata about the corresponding Class's methods and constructors. No
073 * inherited methods will be in the set.
074 *
075 * @return A read-only set of the method information
076 */
077 Set<? extends MetaMethod> getMethods();
078
079 /**
080 * Get metadata about the corresponding Class's methods and constructors. No
081 * inherited fields will be in the set.
082 *
083 * @return A read-only set of the field information
084 */
085 Set<? extends MetaField> getFields();
086
087 /**
088 * Is the associated Class assignable from the class associated with the
089 * given MetaClass.
090 *
091 * @param assignor
092 * The non-null MetaClass (associated with class or interface)
093 * @return true, if and only if instances represented by implementor can be
094 * assigned to instances represented by this MetaClass
095 */
096 boolean isAssignableFrom(MetaClass assignor);
097 }