Package com.ibm.wala.ipa.cha
Interface IClassHierarchy
-
- All Known Implementing Classes:
ClassHierarchy
,CrossLanguageClassHierarchy
public interface IClassHierarchy extends Iterable<IClass>
General interface for a type hierarchy
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description boolean
addClass(IClass klass)
Collection<IClass>
computeSubClasses(TypeReference type)
Return set of all subclasses of type in the Class HierarchyClassLoaderFactory
getFactory()
Collection<IClass>
getImmediateSubclasses(IClass klass)
Set<IClass>
getImplementors(TypeReference type)
Collection<TypeReference>
getJavaLangErrorTypes()
Solely for optimization; return a Collectionrepresenting the subclasses of Error kind of ugly. Collection<TypeReference>
getJavaLangRuntimeExceptionTypes()
Solely for optimization; return a Collectionrepresenting the subclasses of RuntimeException
kind of ugly.IClass
getLeastCommonSuperclass(IClass A, IClass B)
TypeReference
getLeastCommonSuperclass(TypeReference A, TypeReference B)
IClassLoader
getLoader(ClassLoaderReference loaderRef)
IClassLoader[]
getLoaders()
int
getNumber(IClass c)
int
getNumberOfClasses()
int
getNumberOfImmediateSubclasses(IClass klass)
Set<IMethod>
getPossibleTargets(IClass receiverClass, MethodReference ref)
Find the possible targets of a call to a method reference where the receiver is of a certain typeSet<IMethod>
getPossibleTargets(MethodReference ref)
Find the possible targets of a call to a method referenceIClass
getRootClass()
AnalysisScope
getScope()
Set<TypeReference>
getUnresolvedClasses()
BEGIN Custom change: remember unresolved classesboolean
implementsInterface(IClass c, IClass i)
Does c implement i?boolean
isAssignableFrom(IClass c1, IClass c2)
Does an expression c1 x := c2 y typecheck? i.e.boolean
isInterface(TypeReference type)
boolean
isRootClass(IClass c)
boolean
isSubclassOf(IClass c, IClass T)
Is c a subclass of T?IClass
lookupClass(TypeReference A)
Load a class using one of the loaders specified for this class hierarchyIField
resolveField(IClass klass, FieldReference f)
IField
resolveField(FieldReference f)
IMethod
resolveMethod(IClass receiverClass, Selector selector)
Return the unique receiver of an invocation of method on an object of type declaringClassIMethod
resolveMethod(MethodReference m)
Return the unique receiver of an invocation of method on an object of type m.getDeclaredClass-
Methods inherited from interface java.lang.Iterable
forEach, iterator, spliterator
-
-
-
-
Method Detail
-
getFactory
ClassLoaderFactory getFactory()
-
getScope
AnalysisScope getScope()
-
getLoaders
IClassLoader[] getLoaders()
-
getLoader
IClassLoader getLoader(ClassLoaderReference loaderRef)
-
addClass
boolean addClass(IClass klass)
- Returns:
- true if the add succeeded; false if it failed for some reason
- Throws:
IllegalArgumentException
- if klass is null
-
getNumberOfClasses
int getNumberOfClasses()
- Returns:
- The number of classes present in the class hierarchy.
-
isRootClass
boolean isRootClass(IClass c)
-
getRootClass
IClass getRootClass()
-
getNumber
int getNumber(IClass c)
-
getUnresolvedClasses
Set<TypeReference> getUnresolvedClasses()
BEGIN Custom change: remember unresolved classes
-
getPossibleTargets
Set<IMethod> getPossibleTargets(MethodReference ref)
Find the possible targets of a call to a method reference- Parameters:
ref
- method reference- Returns:
- the set of IMethods that this call can resolve to.
- Throws:
IllegalArgumentException
- if ref is null
-
getPossibleTargets
Set<IMethod> getPossibleTargets(IClass receiverClass, MethodReference ref)
Find the possible targets of a call to a method reference where the receiver is of a certain type- Parameters:
receiverClass
- the class of the receiverref
- method reference- Returns:
- the set of IMethods that this call can resolve to.
-
resolveMethod
IMethod resolveMethod(MethodReference m)
Return the unique receiver of an invocation of method on an object of type m.getDeclaredClass- Returns:
- IMethod, or null if no appropriate receiver is found.
- Throws:
IllegalArgumentException
- if m is null
-
resolveField
IField resolveField(FieldReference f)
- Returns:
- the canonical IField that represents a given field , or null if none found
- Throws:
IllegalArgumentException
- if f is null
-
resolveField
IField resolveField(IClass klass, FieldReference f)
- Returns:
- the canonical IField that represents a given field , or null if none found
- Throws:
IllegalArgumentException
- if f is nullIllegalArgumentException
- if klass is null
-
resolveMethod
IMethod resolveMethod(IClass receiverClass, Selector selector)
Return the unique receiver of an invocation of method on an object of type declaringClass- Parameters:
receiverClass
- type of receiverselector
- method signature- Returns:
- Method resolved method abstraction
- Throws:
IllegalArgumentException
- if receiverClass is null
-
lookupClass
IClass lookupClass(TypeReference A)
Load a class using one of the loaders specified for this class hierarchy- Returns:
- null if can't find the class.
- Throws:
IllegalArgumentException
- if A is null
-
isInterface
boolean isInterface(TypeReference type)
-
getLeastCommonSuperclass
TypeReference getLeastCommonSuperclass(TypeReference A, TypeReference B)
-
isSubclassOf
boolean isSubclassOf(IClass c, IClass T)
Is c a subclass of T?- Throws:
IllegalArgumentException
- if c is null
-
implementsInterface
boolean implementsInterface(IClass c, IClass i)
Does c implement i?- Returns:
- true iff i is an interface and c is a class that implements i, or c is an interface that extends i.
-
computeSubClasses
Collection<IClass> computeSubClasses(TypeReference type)
Return set of all subclasses of type in the Class Hierarchy
-
getJavaLangErrorTypes
Collection<TypeReference> getJavaLangErrorTypes()
Solely for optimization; return a Collectionrepresenting the subclasses of Error kind of ugly. a better scheme?
-
getJavaLangRuntimeExceptionTypes
Collection<TypeReference> getJavaLangRuntimeExceptionTypes()
Solely for optimization; return a Collectionrepresenting the subclasses of RuntimeException
kind of ugly. a better scheme?
-
getImplementors
Set<IClass> getImplementors(TypeReference type)
- Parameters:
type
- an interface- Returns:
- Set of IClass that represent implementors of the interface
-
getNumberOfImmediateSubclasses
int getNumberOfImmediateSubclasses(IClass klass)
- Returns:
- the number of classes that immediately extend klass.
-
getImmediateSubclasses
Collection<IClass> getImmediateSubclasses(IClass klass)
- Returns:
- the classes that immediately extend klass.
-
isAssignableFrom
boolean isAssignableFrom(IClass c1, IClass c2)
Does an expression c1 x := c2 y typecheck? i.e. is c2 a subtype of c1?- Throws:
IllegalArgumentException
- if c1 is nullIllegalArgumentException
- if c2 is null
-
-