/*
* FindBugs - Find Bugs in Java programs
* Copyright (C) 2003-2007 University of Maryland
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package edu.umd.cs.findbugs.ba;
import java.util.Collection;
import java.util.List;
import edu.umd.cs.findbugs.annotations.CheckForNull;
import edu.umd.cs.findbugs.classfile.ClassDescriptor;
import edu.umd.cs.findbugs.classfile.MethodDescriptor;
import edu.umd.cs.findbugs.classfile.analysis.AnnotatedObject;
import edu.umd.cs.findbugs.classfile.analysis.AnnotationValue;
/**
* Interface for object representing information about a class.
*
* @author David Hovemeyer
*/
public interface XClass extends Comparable<ClassDescriptor>, AccessibleEntity, AnnotatedObject {
/**
* Get ClassDescriptor of this class's immediate superclass.
*
* @return ClassDescriptor of this class's immediate superclass, or null if
* this class has no immediate superclass
*/
public @CheckForNull
ClassDescriptor getSuperclassDescriptor();
/**
* Get ClassDescriptors of interfaces directly implemented by this class.
*
* @return ClassDescriptors of interfaces directly implemented by this class
*/
public ClassDescriptor[] getInterfaceDescriptorList();
/**
* Get the ClassDescriptor of the immediate enclosing class, or null if this
* XClass is not a nested or inner class.
*
* @return the ClassDescriptor of the immediate enclosing class, or null if
* this XClass is not a nested or inner class
*/
public ClassDescriptor getImmediateEnclosingClass();
/**
* @return true if the class is an interface, false otherwise
*/
public boolean isInterface();
/**
* @return true if the class is an abstract
*/
public boolean isAbstract();
/**
*
* @return the Source attribute
*/
public @CheckForNull
String getSource();
public Collection<ClassDescriptor> getAnnotationDescriptors();
public AnnotationValue getAnnotation(ClassDescriptor desc);
/**
* Find an XMethod matching given parameters.
*
* @param methodName
* name of the method
* @param methodSig
* signature of the method
* @param isStatic
* true if the method is static, false if not
* @return matching XMethod, or null if there is no matching XMethod
*/
public XMethod findMethod(String methodName, String methodSig, boolean isStatic);
/**
* Find XMethod matching given MethodDescriptor.
*
* @param descriptor
* a MethodDescriptor
* @return matching XMethod, or null if there is no matching method
*/
public XMethod findMethod(MethodDescriptor descriptor);
/**
* Find XMethod matching the name and signature of the supplied method
* MethodDescriptor. The class descriptor of the argument is ignored.
*
* @param descriptor
* a MethodDescriptor
* @return matching XMethod, or null if there is no matching method
*/
public XMethod findMatchingMethod(MethodDescriptor descriptor);
/**
* Find an XField matching given parameters.
*
* @param name
* name of the field
* @param signature
* signature of the field
* @param isStatic
* true if field is static, false if not
* @return XField, or null if there is no matching XField
*/
public XField findField(String name, String signature, boolean isStatic);
public List<? extends XField> getXFields();
public List<? extends XMethod> getXMethods();
public String getSourceSignature();
public boolean usesConcurrency();
public boolean hasStubs();
}