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 booleanaddClass(IClass klass)Collection<IClass>computeSubClasses(TypeReference type)Return set of all subclasses of type in the Class HierarchyClassLoaderFactorygetFactory()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 RuntimeExceptionkind of ugly.IClassgetLeastCommonSuperclass(IClass A, IClass B)TypeReferencegetLeastCommonSuperclass(TypeReference A, TypeReference B)IClassLoadergetLoader(ClassLoaderReference loaderRef)IClassLoader[]getLoaders()intgetNumber(IClass c)intgetNumberOfClasses()intgetNumberOfImmediateSubclasses(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 referenceIClassgetRootClass()AnalysisScopegetScope()Set<TypeReference>getUnresolvedClasses()BEGIN Custom change: remember unresolved classesbooleanimplementsInterface(IClass c, IClass i)Does c implement i?booleanisAssignableFrom(IClass c1, IClass c2)Does an expression c1 x := c2 y typecheck? i.e.booleanisInterface(TypeReference type)booleanisRootClass(IClass c)booleanisSubclassOf(IClass c, IClass T)Is c a subclass of T?IClasslookupClass(TypeReference A)Load a class using one of the loaders specified for this class hierarchyIFieldresolveField(IClass klass, FieldReference f)IFieldresolveField(FieldReference f)IMethodresolveMethod(IClass receiverClass, Selector selector)Return the unique receiver of an invocation of method on an object of type declaringClassIMethodresolveMethod(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 RuntimeExceptionkind 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
-
-