001: /*
002: * FindBugs - Find Bugs in Java programs
003: * Copyright (C) 2003-2007 University of Maryland
004: *
005: * This library is free software; you can redistribute it and/or
006: * modify it under the terms of the GNU Lesser General Public
007: * License as published by the Free Software Foundation; either
008: * version 2.1 of the License, or (at your option) any later version.
009: *
010: * This library is distributed in the hope that it will be useful,
011: * but WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
013: * Lesser General Public License for more details.
014: *
015: * You should have received a copy of the GNU Lesser General Public
016: * License along with this library; if not, write to the Free Software
017: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
018: */
019:
020: package edu.umd.cs.findbugs.ba;
021:
022: import java.util.Collection;
023: import java.util.List;
024:
025: import edu.umd.cs.findbugs.annotations.CheckForNull;
026: import edu.umd.cs.findbugs.classfile.ClassDescriptor;
027: import edu.umd.cs.findbugs.classfile.MethodDescriptor;
028: import edu.umd.cs.findbugs.classfile.analysis.AnnotatedObject;
029: import edu.umd.cs.findbugs.classfile.analysis.AnnotationValue;
030:
031: /**
032: * Interface for object representing information about a class.
033: *
034: * @author David Hovemeyer
035: */
036: public interface XClass extends Comparable<ClassDescriptor>,
037: AccessibleEntity, AnnotatedObject {
038:
039: /**
040: * Get ClassDescriptor of this class's immediate superclass.
041: *
042: * @return ClassDescriptor of this class's immediate superclass, or
043: * null if this class has no immediate superclass
044: */
045: public @CheckForNull
046: ClassDescriptor getSuperclassDescriptor();
047:
048: /**
049: * Get ClassDescriptors of interfaces directly implemented by this class.
050: *
051: * @return ClassDescriptors of interfaces directly implemented by this class
052: */
053: public ClassDescriptor[] getInterfaceDescriptorList();
054:
055: /**
056: * Get the ClassDescriptor of the immediate enclosing class,
057: * or null if this XClass is not a nested or inner class.
058: *
059: * @return the ClassDescriptor of the immediate enclosing class,
060: * or null if this XClass is not a nested or inner class
061: */
062: public ClassDescriptor getImmediateEnclosingClass();
063:
064: /**
065: * @return true if the class is an interface, false otherwise
066: */
067: public boolean isInterface();
068:
069: /**
070: * @return true if the class is an abstract
071: */
072: public boolean isAbstract();
073:
074: /**
075: *
076: * @return the Source attribute
077: */
078: public @CheckForNull
079: String getSource();
080:
081: public Collection<ClassDescriptor> getAnnotationDescriptors();
082:
083: public AnnotationValue getAnnotation(ClassDescriptor desc);
084:
085: /**
086: * Find an XMethod matching given parameters.
087: *
088: * @param methodName name of the method
089: * @param methodSig signature of the method
090: * @param isStatic true if the method is static, false if not
091: * @return matching XMethod, or null if there is no matching XMethod
092: */
093: public XMethod findMethod(String methodName, String methodSig,
094: boolean isStatic);
095:
096: /**
097: * Find XMethod matching given MethodDescriptor.
098: *
099: * @param descriptor a MethodDescriptor
100: * @return matching XMethod, or null if there is no matching method
101: */
102: public XMethod findMethod(MethodDescriptor descriptor);
103:
104: /**
105: * Find an XField matching given parameters.
106: *
107: * @param name name of the field
108: * @param signature signature of the field
109: * @param isStatic true if field is static, false if not
110: * @return XField, or null if there is no matching XField
111: */
112: public XField findField(String name, String signature,
113: boolean isStatic);
114:
115: public List<? extends XField> getXFields();
116:
117: public List<? extends XMethod> getXMethods();
118: }
|